Daily bump.
[official-gcc.git] / gcc / fortran / check.c
blob0a08c732790d44c0146ddbd3f615c4e781743626
1 /* Check functions
2 Copyright (C) 2002-2014 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
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
15 for more details.
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. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "flags.h"
32 #include "gfortran.h"
33 #include "intrinsic.h"
34 #include "constructor.h"
35 #include "target-memory.h"
38 /* Make sure an expression is a scalar. */
40 static bool
41 scalar_check (gfc_expr *e, int n)
43 if (e->rank == 0)
44 return true;
46 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
47 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
48 &e->where);
50 return false;
54 /* Check the type of an expression. */
56 static bool
57 type_check (gfc_expr *e, int n, bt type)
59 if (e->ts.type == type)
60 return true;
62 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
63 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
64 &e->where, gfc_basic_typename (type));
66 return false;
70 /* Check that the expression is a numeric type. */
72 static bool
73 numeric_check (gfc_expr *e, int n)
75 if (gfc_numeric_ts (&e->ts))
76 return true;
78 /* If the expression has not got a type, check if its namespace can
79 offer a default type. */
80 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_FUNCTION)
81 && e->symtree->n.sym->ts.type == BT_UNKNOWN
82 && gfc_set_default_type (e->symtree->n.sym, 0, e->symtree->n.sym->ns)
83 && gfc_numeric_ts (&e->symtree->n.sym->ts))
85 e->ts = e->symtree->n.sym->ts;
86 return true;
89 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
90 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
91 &e->where);
93 return false;
97 /* Check that an expression is integer or real. */
99 static bool
100 int_or_real_check (gfc_expr *e, int n)
102 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
104 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
105 "or REAL", gfc_current_intrinsic_arg[n]->name,
106 gfc_current_intrinsic, &e->where);
107 return false;
110 return true;
114 /* Check that an expression is real or complex. */
116 static bool
117 real_or_complex_check (gfc_expr *e, int n)
119 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
121 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
122 "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
123 gfc_current_intrinsic, &e->where);
124 return false;
127 return true;
131 /* Check that an expression is INTEGER or PROCEDURE. */
133 static bool
134 int_or_proc_check (gfc_expr *e, int n)
136 if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
138 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
139 "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
140 gfc_current_intrinsic, &e->where);
141 return false;
144 return true;
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
151 static bool
152 kind_check (gfc_expr *k, int n, bt type)
154 int kind;
156 if (k == NULL)
157 return true;
159 if (!type_check (k, n, BT_INTEGER))
160 return false;
162 if (!scalar_check (k, n))
163 return false;
165 if (!gfc_check_init_expr (k))
167 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
168 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
169 &k->where);
170 return false;
173 if (gfc_extract_int (k, &kind) != NULL
174 || gfc_validate_kind (type, kind, true) < 0)
176 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
177 &k->where);
178 return false;
181 return true;
185 /* Make sure the expression is a double precision real. */
187 static bool
188 double_check (gfc_expr *d, int n)
190 if (!type_check (d, n, BT_REAL))
191 return false;
193 if (d->ts.kind != gfc_default_double_kind)
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
196 "precision", gfc_current_intrinsic_arg[n]->name,
197 gfc_current_intrinsic, &d->where);
198 return false;
201 return true;
205 static bool
206 coarray_check (gfc_expr *e, int n)
208 if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
209 && CLASS_DATA (e)->attr.codimension
210 && CLASS_DATA (e)->as->corank)
212 gfc_add_class_array_ref (e);
213 return true;
216 if (!gfc_is_coarray (e))
218 gfc_error ("Expected coarray variable as '%s' argument to the %s "
219 "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
220 gfc_current_intrinsic, &e->where);
221 return false;
224 return true;
228 /* Make sure the expression is a logical array. */
230 static bool
231 logical_array_check (gfc_expr *array, int n)
233 if (array->ts.type != BT_LOGICAL || array->rank == 0)
235 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
236 "array", gfc_current_intrinsic_arg[n]->name,
237 gfc_current_intrinsic, &array->where);
238 return false;
241 return true;
245 /* Make sure an expression is an array. */
247 static bool
248 array_check (gfc_expr *e, int n)
250 if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
251 && CLASS_DATA (e)->attr.dimension
252 && CLASS_DATA (e)->as->rank)
254 gfc_add_class_array_ref (e);
255 return true;
258 if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
259 return true;
261 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
262 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
263 &e->where);
265 return false;
269 /* If expr is a constant, then check to ensure that it is greater than
270 of equal to zero. */
272 static bool
273 nonnegative_check (const char *arg, gfc_expr *expr)
275 int i;
277 if (expr->expr_type == EXPR_CONSTANT)
279 gfc_extract_int (expr, &i);
280 if (i < 0)
282 gfc_error ("'%s' at %L must be nonnegative", arg, &expr->where);
283 return false;
287 return true;
291 /* If expr2 is constant, then check that the value is less than
292 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
294 static bool
295 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
296 gfc_expr *expr2, bool or_equal)
298 int i2, i3;
300 if (expr2->expr_type == EXPR_CONSTANT)
302 gfc_extract_int (expr2, &i2);
303 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
305 /* For ISHFT[C], check that |shift| <= bit_size(i). */
306 if (arg2 == NULL)
308 if (i2 < 0)
309 i2 = -i2;
311 if (i2 > gfc_integer_kinds[i3].bit_size)
313 gfc_error ("The absolute value of SHIFT at %L must be less "
314 "than or equal to BIT_SIZE('%s')",
315 &expr2->where, arg1);
316 return false;
320 if (or_equal)
322 if (i2 > gfc_integer_kinds[i3].bit_size)
324 gfc_error ("'%s' at %L must be less than "
325 "or equal to BIT_SIZE('%s')",
326 arg2, &expr2->where, arg1);
327 return false;
330 else
332 if (i2 >= gfc_integer_kinds[i3].bit_size)
334 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
335 arg2, &expr2->where, arg1);
336 return false;
341 return true;
345 /* If expr is constant, then check that the value is less than or equal
346 to the bit_size of the kind k. */
348 static bool
349 less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
351 int i, val;
353 if (expr->expr_type != EXPR_CONSTANT)
354 return true;
356 i = gfc_validate_kind (BT_INTEGER, k, false);
357 gfc_extract_int (expr, &val);
359 if (val > gfc_integer_kinds[i].bit_size)
361 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
362 "INTEGER(KIND=%d)", arg, &expr->where, k);
363 return false;
366 return true;
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
373 static bool
374 less_than_bitsize2 (const char *arg1, gfc_expr *expr1, const char *arg2,
375 gfc_expr *expr2, const char *arg3, gfc_expr *expr3)
377 int i2, i3;
379 if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
381 gfc_extract_int (expr2, &i2);
382 gfc_extract_int (expr3, &i3);
383 i2 += i3;
384 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
385 if (i2 > gfc_integer_kinds[i3].bit_size)
387 gfc_error ("'%s + %s' at %L must be less than or equal "
388 "to BIT_SIZE('%s')",
389 arg2, arg3, &expr2->where, arg1);
390 return false;
394 return true;
397 /* Make sure two expressions have the same type. */
399 static bool
400 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
402 if (gfc_compare_types (&e->ts, &f->ts))
403 return true;
405 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
406 "and kind as '%s'", gfc_current_intrinsic_arg[m]->name,
407 gfc_current_intrinsic, &f->where,
408 gfc_current_intrinsic_arg[n]->name);
410 return false;
414 /* Make sure that an expression has a certain (nonzero) rank. */
416 static bool
417 rank_check (gfc_expr *e, int n, int rank)
419 if (e->rank == rank)
420 return true;
422 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
423 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
424 &e->where, rank);
426 return false;
430 /* Make sure a variable expression is not an optional dummy argument. */
432 static bool
433 nonoptional_check (gfc_expr *e, int n)
435 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
437 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
438 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
439 &e->where);
442 /* TODO: Recursive check on nonoptional variables? */
444 return true;
448 /* Check for ALLOCATABLE attribute. */
450 static bool
451 allocatable_check (gfc_expr *e, int n)
453 symbol_attribute attr;
455 attr = gfc_variable_attr (e, NULL);
456 if (!attr.allocatable || attr.associate_var)
458 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
459 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
460 &e->where);
461 return false;
464 return true;
468 /* Check that an expression has a particular kind. */
470 static bool
471 kind_value_check (gfc_expr *e, int n, int k)
473 if (e->ts.kind == k)
474 return true;
476 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
477 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
478 &e->where, k);
480 return false;
484 /* Make sure an expression is a variable. */
486 static bool
487 variable_check (gfc_expr *e, int n, bool allow_proc)
489 if (e->expr_type == EXPR_VARIABLE
490 && e->symtree->n.sym->attr.intent == INTENT_IN
491 && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
492 || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
494 gfc_ref *ref;
495 bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
496 && CLASS_DATA (e->symtree->n.sym)
497 ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
498 : e->symtree->n.sym->attr.pointer;
500 for (ref = e->ref; ref; ref = ref->next)
502 if (pointer && ref->type == REF_COMPONENT)
503 break;
504 if (ref->type == REF_COMPONENT
505 && ((ref->u.c.component->ts.type == BT_CLASS
506 && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
507 || (ref->u.c.component->ts.type != BT_CLASS
508 && ref->u.c.component->attr.pointer)))
509 break;
512 if (!ref)
514 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
515 "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
516 gfc_current_intrinsic, &e->where);
517 return false;
521 if (e->expr_type == EXPR_VARIABLE
522 && e->symtree->n.sym->attr.flavor != FL_PARAMETER
523 && (allow_proc || !e->symtree->n.sym->attr.function))
524 return true;
526 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.function
527 && e->symtree->n.sym == e->symtree->n.sym->result)
529 gfc_namespace *ns;
530 for (ns = gfc_current_ns; ns; ns = ns->parent)
531 if (ns->proc_name == e->symtree->n.sym)
532 return true;
535 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
536 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
538 return false;
542 /* Check the common DIM parameter for correctness. */
544 static bool
545 dim_check (gfc_expr *dim, int n, bool optional)
547 if (dim == NULL)
548 return true;
550 if (!type_check (dim, n, BT_INTEGER))
551 return false;
553 if (!scalar_check (dim, n))
554 return false;
556 if (!optional && !nonoptional_check (dim, n))
557 return false;
559 return true;
563 /* If a coarray DIM parameter is a constant, make sure that it is greater than
564 zero and less than or equal to the corank of the given array. */
566 static bool
567 dim_corank_check (gfc_expr *dim, gfc_expr *array)
569 int corank;
571 gcc_assert (array->expr_type == EXPR_VARIABLE);
573 if (dim->expr_type != EXPR_CONSTANT)
574 return true;
576 if (array->ts.type == BT_CLASS)
577 return true;
579 corank = gfc_get_corank (array);
581 if (mpz_cmp_ui (dim->value.integer, 1) < 0
582 || mpz_cmp_ui (dim->value.integer, corank) > 0)
584 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
585 "codimension index", gfc_current_intrinsic, &dim->where);
587 return false;
590 return true;
594 /* If a DIM parameter is a constant, make sure that it is greater than
595 zero and less than or equal to the rank of the given array. If
596 allow_assumed is zero then dim must be less than the rank of the array
597 for assumed size arrays. */
599 static bool
600 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
602 gfc_array_ref *ar;
603 int rank;
605 if (dim == NULL)
606 return true;
608 if (dim->expr_type != EXPR_CONSTANT)
609 return true;
611 if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
612 && array->value.function.isym->id == GFC_ISYM_SPREAD)
613 rank = array->rank + 1;
614 else
615 rank = array->rank;
617 /* Assumed-rank array. */
618 if (rank == -1)
619 rank = GFC_MAX_DIMENSIONS;
621 if (array->expr_type == EXPR_VARIABLE)
623 ar = gfc_find_array_ref (array);
624 if (ar->as->type == AS_ASSUMED_SIZE
625 && !allow_assumed
626 && ar->type != AR_ELEMENT
627 && ar->type != AR_SECTION)
628 rank--;
631 if (mpz_cmp_ui (dim->value.integer, 1) < 0
632 || mpz_cmp_ui (dim->value.integer, rank) > 0)
634 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
635 "dimension index", gfc_current_intrinsic, &dim->where);
637 return false;
640 return true;
644 /* Compare the size of a along dimension ai with the size of b along
645 dimension bi, returning 0 if they are known not to be identical,
646 and 1 if they are identical, or if this cannot be determined. */
648 static int
649 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
651 mpz_t a_size, b_size;
652 int ret;
654 gcc_assert (a->rank > ai);
655 gcc_assert (b->rank > bi);
657 ret = 1;
659 if (gfc_array_dimen_size (a, ai, &a_size))
661 if (gfc_array_dimen_size (b, bi, &b_size))
663 if (mpz_cmp (a_size, b_size) != 0)
664 ret = 0;
666 mpz_clear (b_size);
668 mpz_clear (a_size);
670 return ret;
673 /* Calculate the length of a character variable, including substrings.
674 Strip away parentheses if necessary. Return -1 if no length could
675 be determined. */
677 static long
678 gfc_var_strlen (const gfc_expr *a)
680 gfc_ref *ra;
682 while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
683 a = a->value.op.op1;
685 for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
688 if (ra)
690 long start_a, end_a;
692 if (!ra->u.ss.end)
693 return -1;
695 if ((!ra->u.ss.start || ra->u.ss.start->expr_type == EXPR_CONSTANT)
696 && ra->u.ss.end->expr_type == EXPR_CONSTANT)
698 start_a = ra->u.ss.start ? mpz_get_si (ra->u.ss.start->value.integer)
699 : 1;
700 end_a = mpz_get_si (ra->u.ss.end->value.integer);
701 return (end_a < start_a) ? 0 : end_a - start_a + 1;
703 else if (ra->u.ss.start
704 && gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
705 return 1;
706 else
707 return -1;
710 if (a->ts.u.cl && a->ts.u.cl->length
711 && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
712 return mpz_get_si (a->ts.u.cl->length->value.integer);
713 else if (a->expr_type == EXPR_CONSTANT
714 && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
715 return a->value.character.length;
716 else
717 return -1;
721 /* Check whether two character expressions have the same length;
722 returns true if they have or if the length cannot be determined,
723 otherwise return false and raise a gfc_error. */
725 bool
726 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
728 long len_a, len_b;
730 len_a = gfc_var_strlen(a);
731 len_b = gfc_var_strlen(b);
733 if (len_a == -1 || len_b == -1 || len_a == len_b)
734 return true;
735 else
737 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
738 len_a, len_b, name, &a->where);
739 return false;
744 /***** Check functions *****/
746 /* Check subroutine suitable for intrinsics taking a real argument and
747 a kind argument for the result. */
749 static bool
750 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
752 if (!type_check (a, 0, BT_REAL))
753 return false;
754 if (!kind_check (kind, 1, type))
755 return false;
757 return true;
761 /* Check subroutine suitable for ceiling, floor and nint. */
763 bool
764 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
766 return check_a_kind (a, kind, BT_INTEGER);
770 /* Check subroutine suitable for aint, anint. */
772 bool
773 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
775 return check_a_kind (a, kind, BT_REAL);
779 bool
780 gfc_check_abs (gfc_expr *a)
782 if (!numeric_check (a, 0))
783 return false;
785 return true;
789 bool
790 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
792 if (!type_check (a, 0, BT_INTEGER))
793 return false;
794 if (!kind_check (kind, 1, BT_CHARACTER))
795 return false;
797 return true;
801 bool
802 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
804 if (!type_check (name, 0, BT_CHARACTER)
805 || !scalar_check (name, 0))
806 return false;
807 if (!kind_value_check (name, 0, gfc_default_character_kind))
808 return false;
810 if (!type_check (mode, 1, BT_CHARACTER)
811 || !scalar_check (mode, 1))
812 return false;
813 if (!kind_value_check (mode, 1, gfc_default_character_kind))
814 return false;
816 return true;
820 bool
821 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
823 if (!logical_array_check (mask, 0))
824 return false;
826 if (!dim_check (dim, 1, false))
827 return false;
829 if (!dim_rank_check (dim, mask, 0))
830 return false;
832 return true;
836 bool
837 gfc_check_allocated (gfc_expr *array)
839 if (!variable_check (array, 0, false))
840 return false;
841 if (!allocatable_check (array, 0))
842 return false;
844 return true;
848 /* Common check function where the first argument must be real or
849 integer and the second argument must be the same as the first. */
851 bool
852 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
854 if (!int_or_real_check (a, 0))
855 return false;
857 if (a->ts.type != p->ts.type)
859 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
860 "have the same type", gfc_current_intrinsic_arg[0]->name,
861 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
862 &p->where);
863 return false;
866 if (a->ts.kind != p->ts.kind)
868 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
869 &p->where))
870 return false;
873 return true;
877 bool
878 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
880 if (!double_check (x, 0) || !double_check (y, 1))
881 return false;
883 return true;
887 bool
888 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
890 symbol_attribute attr1, attr2;
891 int i;
892 bool t;
893 locus *where;
895 where = &pointer->where;
897 if (pointer->expr_type == EXPR_NULL)
898 goto null_arg;
900 attr1 = gfc_expr_attr (pointer);
902 if (!attr1.pointer && !attr1.proc_pointer)
904 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
905 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
906 &pointer->where);
907 return false;
910 /* F2008, C1242. */
911 if (attr1.pointer && gfc_is_coindexed (pointer))
913 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
914 "coindexed", gfc_current_intrinsic_arg[0]->name,
915 gfc_current_intrinsic, &pointer->where);
916 return false;
919 /* Target argument is optional. */
920 if (target == NULL)
921 return true;
923 where = &target->where;
924 if (target->expr_type == EXPR_NULL)
925 goto null_arg;
927 if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
928 attr2 = gfc_expr_attr (target);
929 else
931 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
932 "or target VARIABLE or FUNCTION",
933 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
934 &target->where);
935 return false;
938 if (attr1.pointer && !attr2.pointer && !attr2.target)
940 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
941 "or a TARGET", gfc_current_intrinsic_arg[1]->name,
942 gfc_current_intrinsic, &target->where);
943 return false;
946 /* F2008, C1242. */
947 if (attr1.pointer && gfc_is_coindexed (target))
949 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
950 "coindexed", gfc_current_intrinsic_arg[1]->name,
951 gfc_current_intrinsic, &target->where);
952 return false;
955 t = true;
956 if (!same_type_check (pointer, 0, target, 1))
957 t = false;
958 if (!rank_check (target, 0, pointer->rank))
959 t = false;
960 if (target->rank > 0)
962 for (i = 0; i < target->rank; i++)
963 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
965 gfc_error ("Array section with a vector subscript at %L shall not "
966 "be the target of a pointer",
967 &target->where);
968 t = false;
969 break;
972 return t;
974 null_arg:
976 gfc_error ("NULL pointer at %L is not permitted as actual argument "
977 "of '%s' intrinsic function", where, gfc_current_intrinsic);
978 return false;
983 bool
984 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
986 /* gfc_notify_std would be a waste of time as the return value
987 is seemingly used only for the generic resolution. The error
988 will be: Too many arguments. */
989 if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
990 return false;
992 return gfc_check_atan2 (y, x);
996 bool
997 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
999 if (!type_check (y, 0, BT_REAL))
1000 return false;
1001 if (!same_type_check (y, 0, x, 1))
1002 return false;
1004 return true;
1008 static bool
1009 gfc_check_atomic (gfc_expr *atom, int atom_no, gfc_expr *value, int val_no,
1010 gfc_expr *stat, int stat_no)
1012 if (!scalar_check (atom, atom_no) || !scalar_check (value, val_no))
1013 return false;
1015 if (!(atom->ts.type == BT_INTEGER && atom->ts.kind == gfc_atomic_int_kind)
1016 && !(atom->ts.type == BT_LOGICAL
1017 && atom->ts.kind == gfc_atomic_logical_kind))
1019 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1020 "integer of ATOMIC_INT_KIND or a logical of "
1021 "ATOMIC_LOGICAL_KIND", &atom->where, gfc_current_intrinsic);
1022 return false;
1025 if (!gfc_expr_attr (atom).codimension)
1027 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1028 "coarray or coindexed", &atom->where, gfc_current_intrinsic);
1029 return false;
1032 if (atom->ts.type != value->ts.type)
1034 gfc_error ("'%s' argument of '%s' intrinsic at %L shall have the same "
1035 "type as '%s' at %L", gfc_current_intrinsic_arg[val_no]->name,
1036 gfc_current_intrinsic, &value->where,
1037 gfc_current_intrinsic_arg[atom_no]->name, &atom->where);
1038 return false;
1041 if (stat != NULL)
1043 if (!type_check (stat, stat_no, BT_INTEGER))
1044 return false;
1045 if (!scalar_check (stat, stat_no))
1046 return false;
1047 if (!variable_check (stat, stat_no, false))
1048 return false;
1049 if (!kind_value_check (stat, stat_no, gfc_default_integer_kind))
1050 return false;
1052 if (!gfc_notify_std (GFC_STD_F2008_TS, "STAT= argument to %s at %L",
1053 gfc_current_intrinsic, &stat->where))
1054 return false;
1057 return true;
1061 bool
1062 gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1064 if (atom->expr_type == EXPR_FUNCTION
1065 && atom->value.function.isym
1066 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1067 atom = atom->value.function.actual->expr;
1069 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1071 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1072 "definable", gfc_current_intrinsic, &atom->where);
1073 return false;
1076 return gfc_check_atomic (atom, 0, value, 1, stat, 2);
1080 bool
1081 gfc_check_atomic_op (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1083 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1085 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1086 "integer of ATOMIC_INT_KIND", &atom->where,
1087 gfc_current_intrinsic);
1088 return false;
1091 return gfc_check_atomic_def (atom, value, stat);
1095 bool
1096 gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom, gfc_expr *stat)
1098 if (atom->expr_type == EXPR_FUNCTION
1099 && atom->value.function.isym
1100 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1101 atom = atom->value.function.actual->expr;
1103 if (!gfc_check_vardef_context (value, false, false, false, NULL))
1105 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1106 "definable", gfc_current_intrinsic, &value->where);
1107 return false;
1110 return gfc_check_atomic (atom, 1, value, 0, stat, 2);
1114 bool
1115 gfc_check_atomic_cas (gfc_expr *atom, gfc_expr *old, gfc_expr *compare,
1116 gfc_expr *new_val, gfc_expr *stat)
1118 if (atom->expr_type == EXPR_FUNCTION
1119 && atom->value.function.isym
1120 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1121 atom = atom->value.function.actual->expr;
1123 if (!gfc_check_atomic (atom, 0, new_val, 3, stat, 4))
1124 return false;
1126 if (!scalar_check (old, 1) || !scalar_check (compare, 2))
1127 return false;
1129 if (!same_type_check (atom, 0, old, 1))
1130 return false;
1132 if (!same_type_check (atom, 0, compare, 2))
1133 return false;
1135 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1137 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1138 "definable", gfc_current_intrinsic, &atom->where);
1139 return false;
1142 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1144 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1145 "definable", gfc_current_intrinsic, &old->where);
1146 return false;
1149 return true;
1153 bool
1154 gfc_check_atomic_fetch_op (gfc_expr *atom, gfc_expr *value, gfc_expr *old,
1155 gfc_expr *stat)
1157 if (atom->expr_type == EXPR_FUNCTION
1158 && atom->value.function.isym
1159 && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1160 atom = atom->value.function.actual->expr;
1162 if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1164 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1165 "integer of ATOMIC_INT_KIND", &atom->where,
1166 gfc_current_intrinsic);
1167 return false;
1170 if (!gfc_check_atomic (atom, 0, value, 1, stat, 3))
1171 return false;
1173 if (!scalar_check (old, 2))
1174 return false;
1176 if (!same_type_check (atom, 0, old, 2))
1177 return false;
1179 if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1181 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1182 "definable", gfc_current_intrinsic, &atom->where);
1183 return false;
1186 if (!gfc_check_vardef_context (old, false, false, false, NULL))
1188 gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1189 "definable", gfc_current_intrinsic, &old->where);
1190 return false;
1193 return true;
1197 /* BESJN and BESYN functions. */
1199 bool
1200 gfc_check_besn (gfc_expr *n, gfc_expr *x)
1202 if (!type_check (n, 0, BT_INTEGER))
1203 return false;
1204 if (n->expr_type == EXPR_CONSTANT)
1206 int i;
1207 gfc_extract_int (n, &i);
1208 if (i < 0 && !gfc_notify_std (GFC_STD_GNU, "Negative argument "
1209 "N at %L", &n->where))
1210 return false;
1213 if (!type_check (x, 1, BT_REAL))
1214 return false;
1216 return true;
1220 /* Transformational version of the Bessel JN and YN functions. */
1222 bool
1223 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
1225 if (!type_check (n1, 0, BT_INTEGER))
1226 return false;
1227 if (!scalar_check (n1, 0))
1228 return false;
1229 if (!nonnegative_check ("N1", n1))
1230 return false;
1232 if (!type_check (n2, 1, BT_INTEGER))
1233 return false;
1234 if (!scalar_check (n2, 1))
1235 return false;
1236 if (!nonnegative_check ("N2", n2))
1237 return false;
1239 if (!type_check (x, 2, BT_REAL))
1240 return false;
1241 if (!scalar_check (x, 2))
1242 return false;
1244 return true;
1248 bool
1249 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1251 if (!type_check (i, 0, BT_INTEGER))
1252 return false;
1254 if (!type_check (j, 1, BT_INTEGER))
1255 return false;
1257 return true;
1261 bool
1262 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1264 if (!type_check (i, 0, BT_INTEGER))
1265 return false;
1267 if (!type_check (pos, 1, BT_INTEGER))
1268 return false;
1270 if (!nonnegative_check ("pos", pos))
1271 return false;
1273 if (!less_than_bitsize1 ("i", i, "pos", pos, false))
1274 return false;
1276 return true;
1280 bool
1281 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1283 if (!type_check (i, 0, BT_INTEGER))
1284 return false;
1285 if (!kind_check (kind, 1, BT_CHARACTER))
1286 return false;
1288 return true;
1292 bool
1293 gfc_check_chdir (gfc_expr *dir)
1295 if (!type_check (dir, 0, BT_CHARACTER))
1296 return false;
1297 if (!kind_value_check (dir, 0, gfc_default_character_kind))
1298 return false;
1300 return true;
1304 bool
1305 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1307 if (!type_check (dir, 0, BT_CHARACTER))
1308 return false;
1309 if (!kind_value_check (dir, 0, gfc_default_character_kind))
1310 return false;
1312 if (status == NULL)
1313 return true;
1315 if (!type_check (status, 1, BT_INTEGER))
1316 return false;
1317 if (!scalar_check (status, 1))
1318 return false;
1320 return true;
1324 bool
1325 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
1327 if (!type_check (name, 0, BT_CHARACTER))
1328 return false;
1329 if (!kind_value_check (name, 0, gfc_default_character_kind))
1330 return false;
1332 if (!type_check (mode, 1, BT_CHARACTER))
1333 return false;
1334 if (!kind_value_check (mode, 1, gfc_default_character_kind))
1335 return false;
1337 return true;
1341 bool
1342 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
1344 if (!type_check (name, 0, BT_CHARACTER))
1345 return false;
1346 if (!kind_value_check (name, 0, gfc_default_character_kind))
1347 return false;
1349 if (!type_check (mode, 1, BT_CHARACTER))
1350 return false;
1351 if (!kind_value_check (mode, 1, gfc_default_character_kind))
1352 return false;
1354 if (status == NULL)
1355 return true;
1357 if (!type_check (status, 2, BT_INTEGER))
1358 return false;
1360 if (!scalar_check (status, 2))
1361 return false;
1363 return true;
1367 bool
1368 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1370 if (!numeric_check (x, 0))
1371 return false;
1373 if (y != NULL)
1375 if (!numeric_check (y, 1))
1376 return false;
1378 if (x->ts.type == BT_COMPLEX)
1380 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1381 "present if 'x' is COMPLEX",
1382 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1383 &y->where);
1384 return false;
1387 if (y->ts.type == BT_COMPLEX)
1389 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1390 "of either REAL or INTEGER",
1391 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1392 &y->where);
1393 return false;
1398 if (!kind_check (kind, 2, BT_COMPLEX))
1399 return false;
1401 if (!kind && gfc_option.gfc_warn_conversion
1402 && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind)
1403 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1404 "might lose precision, consider using the KIND argument",
1405 gfc_typename (&x->ts), gfc_default_real_kind, &x->where);
1406 else if (y && !kind && gfc_option.gfc_warn_conversion
1407 && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind)
1408 gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
1409 "might lose precision, consider using the KIND argument",
1410 gfc_typename (&y->ts), gfc_default_real_kind, &y->where);
1412 return true;
1416 static bool
1417 check_co_collective (gfc_expr *a, gfc_expr *image_idx, gfc_expr *stat,
1418 gfc_expr *errmsg, bool co_reduce)
1420 if (!variable_check (a, 0, false))
1421 return false;
1423 if (!gfc_check_vardef_context (a, false, false, false, "argument 'A' with "
1424 "INTENT(INOUT)"))
1425 return false;
1427 /* Fortran 2008, 12.5.2.4, paragraph 18. */
1428 if (gfc_has_vector_subscript (a))
1430 gfc_error ("Argument 'A' with INTENT(INOUT) at %L of the intrinsic "
1431 "subroutine %s shall not have a vector subscript",
1432 &a->where, gfc_current_intrinsic);
1433 return false;
1436 if (image_idx != NULL)
1438 if (!type_check (image_idx, co_reduce ? 2 : 1, BT_INTEGER))
1439 return false;
1440 if (!scalar_check (image_idx, co_reduce ? 2 : 1))
1441 return false;
1444 if (stat != NULL)
1446 if (!type_check (stat, co_reduce ? 3 : 2, BT_INTEGER))
1447 return false;
1448 if (!scalar_check (stat, co_reduce ? 3 : 2))
1449 return false;
1450 if (!variable_check (stat, co_reduce ? 3 : 2, false))
1451 return false;
1452 if (stat->ts.kind != 4)
1454 gfc_error ("The stat= argument at %L must be a kind=4 integer "
1455 "variable", &stat->where);
1456 return false;
1460 if (errmsg != NULL)
1462 if (!type_check (errmsg, co_reduce ? 4 : 3, BT_CHARACTER))
1463 return false;
1464 if (!scalar_check (errmsg, co_reduce ? 4 : 3))
1465 return false;
1466 if (!variable_check (errmsg, co_reduce ? 4 : 3, false))
1467 return false;
1468 if (errmsg->ts.kind != 1)
1470 gfc_error ("The errmsg= argument at %L must be a default-kind "
1471 "character variable", &errmsg->where);
1472 return false;
1476 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
1478 gfc_fatal_error ("Coarrays disabled at %L, use -fcoarray= to enable",
1479 &a->where);
1480 return false;
1483 return true;
1487 bool
1488 gfc_check_co_broadcast (gfc_expr *a, gfc_expr *source_image, gfc_expr *stat,
1489 gfc_expr *errmsg)
1491 if (a->ts.type == BT_CLASS || gfc_expr_attr (a).alloc_comp)
1493 gfc_error ("Support for the A argument at %L which is polymorphic A "
1494 "argument or has allocatable components is not yet "
1495 "implemented", &a->where);
1496 return false;
1498 return check_co_collective (a, source_image, stat, errmsg, false);
1502 bool
1503 gfc_check_co_reduce (gfc_expr *a, gfc_expr *op, gfc_expr *result_image,
1504 gfc_expr *stat, gfc_expr *errmsg)
1506 symbol_attribute attr;
1508 if (a->ts.type == BT_CLASS)
1510 gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
1511 &a->where);
1512 return false;
1515 if (gfc_expr_attr (a).alloc_comp)
1517 gfc_error ("Support for the A argument at %L with allocatable components"
1518 " is not yet implemented", &a->where);
1519 return false;
1522 attr = gfc_expr_attr (op);
1523 if (!attr.pure || !attr.function)
1525 gfc_error ("OPERATOR argument at %L must be a PURE function",
1526 &op->where);
1527 return false;
1530 if (!check_co_collective (a, result_image, stat, errmsg, true))
1531 return false;
1533 /* FIXME: After J3/WG5 has decided what they actually exactly want, more
1534 checks such as same-argument checks have to be added, implemented and
1535 intrinsic.texi upated. */
1537 gfc_error("CO_REDUCE at %L is not yet implemented", &a->where);
1538 return false;
1542 bool
1543 gfc_check_co_minmax (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1544 gfc_expr *errmsg)
1546 if (a->ts.type != BT_INTEGER && a->ts.type != BT_REAL
1547 && a->ts.type != BT_CHARACTER)
1549 gfc_error ("'%s' argument of '%s' intrinsic at %L shall be of type "
1550 "integer, real or character",
1551 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1552 &a->where);
1553 return false;
1555 return check_co_collective (a, result_image, stat, errmsg, false);
1559 bool
1560 gfc_check_co_sum (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
1561 gfc_expr *errmsg)
1563 if (!numeric_check (a, 0))
1564 return false;
1565 return check_co_collective (a, result_image, stat, errmsg, false);
1569 bool
1570 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1572 if (!int_or_real_check (x, 0))
1573 return false;
1574 if (!scalar_check (x, 0))
1575 return false;
1577 if (!int_or_real_check (y, 1))
1578 return false;
1579 if (!scalar_check (y, 1))
1580 return false;
1582 return true;
1586 bool
1587 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1589 if (!logical_array_check (mask, 0))
1590 return false;
1591 if (!dim_check (dim, 1, false))
1592 return false;
1593 if (!dim_rank_check (dim, mask, 0))
1594 return false;
1595 if (!kind_check (kind, 2, BT_INTEGER))
1596 return false;
1597 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
1598 "with KIND argument at %L",
1599 gfc_current_intrinsic, &kind->where))
1600 return false;
1602 return true;
1606 bool
1607 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1609 if (!array_check (array, 0))
1610 return false;
1612 if (!type_check (shift, 1, BT_INTEGER))
1613 return false;
1615 if (!dim_check (dim, 2, true))
1616 return false;
1618 if (!dim_rank_check (dim, array, false))
1619 return false;
1621 if (array->rank == 1 || shift->rank == 0)
1623 if (!scalar_check (shift, 1))
1624 return false;
1626 else if (shift->rank == array->rank - 1)
1628 int d;
1629 if (!dim)
1630 d = 1;
1631 else if (dim->expr_type == EXPR_CONSTANT)
1632 gfc_extract_int (dim, &d);
1633 else
1634 d = -1;
1636 if (d > 0)
1638 int i, j;
1639 for (i = 0, j = 0; i < array->rank; i++)
1640 if (i != d - 1)
1642 if (!identical_dimen_shape (array, i, shift, j))
1644 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1645 "invalid shape in dimension %d (%ld/%ld)",
1646 gfc_current_intrinsic_arg[1]->name,
1647 gfc_current_intrinsic, &shift->where, i + 1,
1648 mpz_get_si (array->shape[i]),
1649 mpz_get_si (shift->shape[j]));
1650 return false;
1653 j += 1;
1657 else
1659 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1660 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1661 gfc_current_intrinsic, &shift->where, array->rank - 1);
1662 return false;
1665 return true;
1669 bool
1670 gfc_check_ctime (gfc_expr *time)
1672 if (!scalar_check (time, 0))
1673 return false;
1675 if (!type_check (time, 0, BT_INTEGER))
1676 return false;
1678 return true;
1682 bool gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1684 if (!double_check (y, 0) || !double_check (x, 1))
1685 return false;
1687 return true;
1690 bool
1691 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1693 if (!numeric_check (x, 0))
1694 return false;
1696 if (y != NULL)
1698 if (!numeric_check (y, 1))
1699 return false;
1701 if (x->ts.type == BT_COMPLEX)
1703 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1704 "present if 'x' is COMPLEX",
1705 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1706 &y->where);
1707 return false;
1710 if (y->ts.type == BT_COMPLEX)
1712 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1713 "of either REAL or INTEGER",
1714 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1715 &y->where);
1716 return false;
1720 return true;
1724 bool
1725 gfc_check_dble (gfc_expr *x)
1727 if (!numeric_check (x, 0))
1728 return false;
1730 return true;
1734 bool
1735 gfc_check_digits (gfc_expr *x)
1737 if (!int_or_real_check (x, 0))
1738 return false;
1740 return true;
1744 bool
1745 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1747 switch (vector_a->ts.type)
1749 case BT_LOGICAL:
1750 if (!type_check (vector_b, 1, BT_LOGICAL))
1751 return false;
1752 break;
1754 case BT_INTEGER:
1755 case BT_REAL:
1756 case BT_COMPLEX:
1757 if (!numeric_check (vector_b, 1))
1758 return false;
1759 break;
1761 default:
1762 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1763 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1764 gfc_current_intrinsic, &vector_a->where);
1765 return false;
1768 if (!rank_check (vector_a, 0, 1))
1769 return false;
1771 if (!rank_check (vector_b, 1, 1))
1772 return false;
1774 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1776 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1777 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0]->name,
1778 gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1779 return false;
1782 return true;
1786 bool
1787 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1789 if (!type_check (x, 0, BT_REAL)
1790 || !type_check (y, 1, BT_REAL))
1791 return false;
1793 if (x->ts.kind != gfc_default_real_kind)
1795 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1796 "real", gfc_current_intrinsic_arg[0]->name,
1797 gfc_current_intrinsic, &x->where);
1798 return false;
1801 if (y->ts.kind != gfc_default_real_kind)
1803 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1804 "real", gfc_current_intrinsic_arg[1]->name,
1805 gfc_current_intrinsic, &y->where);
1806 return false;
1809 return true;
1813 bool
1814 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1816 if (!type_check (i, 0, BT_INTEGER))
1817 return false;
1819 if (!type_check (j, 1, BT_INTEGER))
1820 return false;
1822 if (i->is_boz && j->is_boz)
1824 gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1825 "constants", &i->where, &j->where);
1826 return false;
1829 if (!i->is_boz && !j->is_boz && !same_type_check (i, 0, j, 1))
1830 return false;
1832 if (!type_check (shift, 2, BT_INTEGER))
1833 return false;
1835 if (!nonnegative_check ("SHIFT", shift))
1836 return false;
1838 if (i->is_boz)
1840 if (!less_than_bitsize1 ("J", j, "SHIFT", shift, true))
1841 return false;
1842 i->ts.kind = j->ts.kind;
1844 else
1846 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
1847 return false;
1848 j->ts.kind = i->ts.kind;
1851 return true;
1855 bool
1856 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1857 gfc_expr *dim)
1859 if (!array_check (array, 0))
1860 return false;
1862 if (!type_check (shift, 1, BT_INTEGER))
1863 return false;
1865 if (!dim_check (dim, 3, true))
1866 return false;
1868 if (!dim_rank_check (dim, array, false))
1869 return false;
1871 if (array->rank == 1 || shift->rank == 0)
1873 if (!scalar_check (shift, 1))
1874 return false;
1876 else if (shift->rank == array->rank - 1)
1878 int d;
1879 if (!dim)
1880 d = 1;
1881 else if (dim->expr_type == EXPR_CONSTANT)
1882 gfc_extract_int (dim, &d);
1883 else
1884 d = -1;
1886 if (d > 0)
1888 int i, j;
1889 for (i = 0, j = 0; i < array->rank; i++)
1890 if (i != d - 1)
1892 if (!identical_dimen_shape (array, i, shift, j))
1894 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1895 "invalid shape in dimension %d (%ld/%ld)",
1896 gfc_current_intrinsic_arg[1]->name,
1897 gfc_current_intrinsic, &shift->where, i + 1,
1898 mpz_get_si (array->shape[i]),
1899 mpz_get_si (shift->shape[j]));
1900 return false;
1903 j += 1;
1907 else
1909 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1910 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1911 gfc_current_intrinsic, &shift->where, array->rank - 1);
1912 return false;
1915 if (boundary != NULL)
1917 if (!same_type_check (array, 0, boundary, 2))
1918 return false;
1920 if (array->rank == 1 || boundary->rank == 0)
1922 if (!scalar_check (boundary, 2))
1923 return false;
1925 else if (boundary->rank == array->rank - 1)
1927 if (!gfc_check_conformance (shift, boundary,
1928 "arguments '%s' and '%s' for "
1929 "intrinsic %s",
1930 gfc_current_intrinsic_arg[1]->name,
1931 gfc_current_intrinsic_arg[2]->name,
1932 gfc_current_intrinsic))
1933 return false;
1935 else
1937 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1938 "rank %d or be a scalar",
1939 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1940 &shift->where, array->rank - 1);
1941 return false;
1945 return true;
1948 bool
1949 gfc_check_float (gfc_expr *a)
1951 if (!type_check (a, 0, BT_INTEGER))
1952 return false;
1954 if ((a->ts.kind != gfc_default_integer_kind)
1955 && !gfc_notify_std (GFC_STD_GNU, "non-default INTEGER "
1956 "kind argument to %s intrinsic at %L",
1957 gfc_current_intrinsic, &a->where))
1958 return false;
1960 return true;
1963 /* A single complex argument. */
1965 bool
1966 gfc_check_fn_c (gfc_expr *a)
1968 if (!type_check (a, 0, BT_COMPLEX))
1969 return false;
1971 return true;
1974 /* A single real argument. */
1976 bool
1977 gfc_check_fn_r (gfc_expr *a)
1979 if (!type_check (a, 0, BT_REAL))
1980 return false;
1982 return true;
1985 /* A single double argument. */
1987 bool
1988 gfc_check_fn_d (gfc_expr *a)
1990 if (!double_check (a, 0))
1991 return false;
1993 return true;
1996 /* A single real or complex argument. */
1998 bool
1999 gfc_check_fn_rc (gfc_expr *a)
2001 if (!real_or_complex_check (a, 0))
2002 return false;
2004 return true;
2008 bool
2009 gfc_check_fn_rc2008 (gfc_expr *a)
2011 if (!real_or_complex_check (a, 0))
2012 return false;
2014 if (a->ts.type == BT_COMPLEX
2015 && !gfc_notify_std (GFC_STD_F2008, "COMPLEX argument '%s' "
2016 "of '%s' intrinsic at %L",
2017 gfc_current_intrinsic_arg[0]->name,
2018 gfc_current_intrinsic, &a->where))
2019 return false;
2021 return true;
2025 bool
2026 gfc_check_fnum (gfc_expr *unit)
2028 if (!type_check (unit, 0, BT_INTEGER))
2029 return false;
2031 if (!scalar_check (unit, 0))
2032 return false;
2034 return true;
2038 bool
2039 gfc_check_huge (gfc_expr *x)
2041 if (!int_or_real_check (x, 0))
2042 return false;
2044 return true;
2048 bool
2049 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
2051 if (!type_check (x, 0, BT_REAL))
2052 return false;
2053 if (!same_type_check (x, 0, y, 1))
2054 return false;
2056 return true;
2060 /* Check that the single argument is an integer. */
2062 bool
2063 gfc_check_i (gfc_expr *i)
2065 if (!type_check (i, 0, BT_INTEGER))
2066 return false;
2068 return true;
2072 bool
2073 gfc_check_iand (gfc_expr *i, gfc_expr *j)
2075 if (!type_check (i, 0, BT_INTEGER))
2076 return false;
2078 if (!type_check (j, 1, BT_INTEGER))
2079 return false;
2081 if (i->ts.kind != j->ts.kind)
2083 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2084 &i->where))
2085 return false;
2088 return true;
2092 bool
2093 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
2095 if (!type_check (i, 0, BT_INTEGER))
2096 return false;
2098 if (!type_check (pos, 1, BT_INTEGER))
2099 return false;
2101 if (!type_check (len, 2, BT_INTEGER))
2102 return false;
2104 if (!nonnegative_check ("pos", pos))
2105 return false;
2107 if (!nonnegative_check ("len", len))
2108 return false;
2110 if (!less_than_bitsize2 ("i", i, "pos", pos, "len", len))
2111 return false;
2113 return true;
2117 bool
2118 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
2120 int i;
2122 if (!type_check (c, 0, BT_CHARACTER))
2123 return false;
2125 if (!kind_check (kind, 1, BT_INTEGER))
2126 return false;
2128 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2129 "with KIND argument at %L",
2130 gfc_current_intrinsic, &kind->where))
2131 return false;
2133 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
2135 gfc_expr *start;
2136 gfc_expr *end;
2137 gfc_ref *ref;
2139 /* Substring references don't have the charlength set. */
2140 ref = c->ref;
2141 while (ref && ref->type != REF_SUBSTRING)
2142 ref = ref->next;
2144 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
2146 if (!ref)
2148 /* Check that the argument is length one. Non-constant lengths
2149 can't be checked here, so assume they are ok. */
2150 if (c->ts.u.cl && c->ts.u.cl->length)
2152 /* If we already have a length for this expression then use it. */
2153 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
2154 return true;
2155 i = mpz_get_si (c->ts.u.cl->length->value.integer);
2157 else
2158 return true;
2160 else
2162 start = ref->u.ss.start;
2163 end = ref->u.ss.end;
2165 gcc_assert (start);
2166 if (end == NULL || end->expr_type != EXPR_CONSTANT
2167 || start->expr_type != EXPR_CONSTANT)
2168 return true;
2170 i = mpz_get_si (end->value.integer) + 1
2171 - mpz_get_si (start->value.integer);
2174 else
2175 return true;
2177 if (i != 1)
2179 gfc_error ("Argument of %s at %L must be of length one",
2180 gfc_current_intrinsic, &c->where);
2181 return false;
2184 return true;
2188 bool
2189 gfc_check_idnint (gfc_expr *a)
2191 if (!double_check (a, 0))
2192 return false;
2194 return true;
2198 bool
2199 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
2201 if (!type_check (i, 0, BT_INTEGER))
2202 return false;
2204 if (!type_check (j, 1, BT_INTEGER))
2205 return false;
2207 if (i->ts.kind != j->ts.kind)
2209 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2210 &i->where))
2211 return false;
2214 return true;
2218 bool
2219 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
2220 gfc_expr *kind)
2222 if (!type_check (string, 0, BT_CHARACTER)
2223 || !type_check (substring, 1, BT_CHARACTER))
2224 return false;
2226 if (back != NULL && !type_check (back, 2, BT_LOGICAL))
2227 return false;
2229 if (!kind_check (kind, 3, BT_INTEGER))
2230 return false;
2231 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2232 "with KIND argument at %L",
2233 gfc_current_intrinsic, &kind->where))
2234 return false;
2236 if (string->ts.kind != substring->ts.kind)
2238 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
2239 "kind as '%s'", gfc_current_intrinsic_arg[1]->name,
2240 gfc_current_intrinsic, &substring->where,
2241 gfc_current_intrinsic_arg[0]->name);
2242 return false;
2245 return true;
2249 bool
2250 gfc_check_int (gfc_expr *x, gfc_expr *kind)
2252 if (!numeric_check (x, 0))
2253 return false;
2255 if (!kind_check (kind, 1, BT_INTEGER))
2256 return false;
2258 return true;
2262 bool
2263 gfc_check_intconv (gfc_expr *x)
2265 if (!numeric_check (x, 0))
2266 return false;
2268 return true;
2272 bool
2273 gfc_check_ior (gfc_expr *i, gfc_expr *j)
2275 if (!type_check (i, 0, BT_INTEGER))
2276 return false;
2278 if (!type_check (j, 1, BT_INTEGER))
2279 return false;
2281 if (i->ts.kind != j->ts.kind)
2283 if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
2284 &i->where))
2285 return false;
2288 return true;
2292 bool
2293 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
2295 if (!type_check (i, 0, BT_INTEGER)
2296 || !type_check (shift, 1, BT_INTEGER))
2297 return false;
2299 if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2300 return false;
2302 return true;
2306 bool
2307 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
2309 if (!type_check (i, 0, BT_INTEGER)
2310 || !type_check (shift, 1, BT_INTEGER))
2311 return false;
2313 if (size != NULL)
2315 int i2, i3;
2317 if (!type_check (size, 2, BT_INTEGER))
2318 return false;
2320 if (!less_than_bitsize1 ("I", i, "SIZE", size, true))
2321 return false;
2323 if (size->expr_type == EXPR_CONSTANT)
2325 gfc_extract_int (size, &i3);
2326 if (i3 <= 0)
2328 gfc_error ("SIZE at %L must be positive", &size->where);
2329 return false;
2332 if (shift->expr_type == EXPR_CONSTANT)
2334 gfc_extract_int (shift, &i2);
2335 if (i2 < 0)
2336 i2 = -i2;
2338 if (i2 > i3)
2340 gfc_error ("The absolute value of SHIFT at %L must be less "
2341 "than or equal to SIZE at %L", &shift->where,
2342 &size->where);
2343 return false;
2348 else if (!less_than_bitsize1 ("I", i, NULL, shift, true))
2349 return false;
2351 return true;
2355 bool
2356 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
2358 if (!type_check (pid, 0, BT_INTEGER))
2359 return false;
2361 if (!type_check (sig, 1, BT_INTEGER))
2362 return false;
2364 return true;
2368 bool
2369 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
2371 if (!type_check (pid, 0, BT_INTEGER))
2372 return false;
2374 if (!scalar_check (pid, 0))
2375 return false;
2377 if (!type_check (sig, 1, BT_INTEGER))
2378 return false;
2380 if (!scalar_check (sig, 1))
2381 return false;
2383 if (status == NULL)
2384 return true;
2386 if (!type_check (status, 2, BT_INTEGER))
2387 return false;
2389 if (!scalar_check (status, 2))
2390 return false;
2392 return true;
2396 bool
2397 gfc_check_kind (gfc_expr *x)
2399 if (x->ts.type == BT_DERIVED)
2401 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2402 "non-derived type", gfc_current_intrinsic_arg[0]->name,
2403 gfc_current_intrinsic, &x->where);
2404 return false;
2407 return true;
2411 bool
2412 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2414 if (!array_check (array, 0))
2415 return false;
2417 if (!dim_check (dim, 1, false))
2418 return false;
2420 if (!dim_rank_check (dim, array, 1))
2421 return false;
2423 if (!kind_check (kind, 2, BT_INTEGER))
2424 return false;
2425 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2426 "with KIND argument at %L",
2427 gfc_current_intrinsic, &kind->where))
2428 return false;
2430 return true;
2434 bool
2435 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
2437 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
2439 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2440 return false;
2443 if (!coarray_check (coarray, 0))
2444 return false;
2446 if (dim != NULL)
2448 if (!dim_check (dim, 1, false))
2449 return false;
2451 if (!dim_corank_check (dim, coarray))
2452 return false;
2455 if (!kind_check (kind, 2, BT_INTEGER))
2456 return false;
2458 return true;
2462 bool
2463 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2465 if (!type_check (s, 0, BT_CHARACTER))
2466 return false;
2468 if (!kind_check (kind, 1, BT_INTEGER))
2469 return false;
2470 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2471 "with KIND argument at %L",
2472 gfc_current_intrinsic, &kind->where))
2473 return false;
2475 return true;
2479 bool
2480 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2482 if (!type_check (a, 0, BT_CHARACTER))
2483 return false;
2484 if (!kind_value_check (a, 0, gfc_default_character_kind))
2485 return false;
2487 if (!type_check (b, 1, BT_CHARACTER))
2488 return false;
2489 if (!kind_value_check (b, 1, gfc_default_character_kind))
2490 return false;
2492 return true;
2496 bool
2497 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2499 if (!type_check (path1, 0, BT_CHARACTER))
2500 return false;
2501 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2502 return false;
2504 if (!type_check (path2, 1, BT_CHARACTER))
2505 return false;
2506 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2507 return false;
2509 return true;
2513 bool
2514 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2516 if (!type_check (path1, 0, BT_CHARACTER))
2517 return false;
2518 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2519 return false;
2521 if (!type_check (path2, 1, BT_CHARACTER))
2522 return false;
2523 if (!kind_value_check (path2, 0, gfc_default_character_kind))
2524 return false;
2526 if (status == NULL)
2527 return true;
2529 if (!type_check (status, 2, BT_INTEGER))
2530 return false;
2532 if (!scalar_check (status, 2))
2533 return false;
2535 return true;
2539 bool
2540 gfc_check_loc (gfc_expr *expr)
2542 return variable_check (expr, 0, true);
2546 bool
2547 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2549 if (!type_check (path1, 0, BT_CHARACTER))
2550 return false;
2551 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2552 return false;
2554 if (!type_check (path2, 1, BT_CHARACTER))
2555 return false;
2556 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2557 return false;
2559 return true;
2563 bool
2564 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2566 if (!type_check (path1, 0, BT_CHARACTER))
2567 return false;
2568 if (!kind_value_check (path1, 0, gfc_default_character_kind))
2569 return false;
2571 if (!type_check (path2, 1, BT_CHARACTER))
2572 return false;
2573 if (!kind_value_check (path2, 1, gfc_default_character_kind))
2574 return false;
2576 if (status == NULL)
2577 return true;
2579 if (!type_check (status, 2, BT_INTEGER))
2580 return false;
2582 if (!scalar_check (status, 2))
2583 return false;
2585 return true;
2589 bool
2590 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2592 if (!type_check (a, 0, BT_LOGICAL))
2593 return false;
2594 if (!kind_check (kind, 1, BT_LOGICAL))
2595 return false;
2597 return true;
2601 /* Min/max family. */
2603 static bool
2604 min_max_args (gfc_actual_arglist *args)
2606 gfc_actual_arglist *arg;
2607 int i, j, nargs, *nlabels, nlabelless;
2608 bool a1 = false, a2 = false;
2610 if (args == NULL || args->next == NULL)
2612 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2613 gfc_current_intrinsic, gfc_current_intrinsic_where);
2614 return false;
2617 if (!args->name)
2618 a1 = true;
2620 if (!args->next->name)
2621 a2 = true;
2623 nargs = 0;
2624 for (arg = args; arg; arg = arg->next)
2625 if (arg->name)
2626 nargs++;
2628 if (nargs == 0)
2629 return true;
2631 /* Note: Having a keywordless argument after an "arg=" is checked before. */
2632 nlabelless = 0;
2633 nlabels = XALLOCAVEC (int, nargs);
2634 for (arg = args, i = 0; arg; arg = arg->next, i++)
2635 if (arg->name)
2637 int n;
2638 char *endp;
2640 if (arg->name[0] != 'a' || arg->name[1] < '1' || arg->name[1] > '9')
2641 goto unknown;
2642 n = strtol (&arg->name[1], &endp, 10);
2643 if (endp[0] != '\0')
2644 goto unknown;
2645 if (n <= 0)
2646 goto unknown;
2647 if (n <= nlabelless)
2648 goto duplicate;
2649 nlabels[i] = n;
2650 if (n == 1)
2651 a1 = true;
2652 if (n == 2)
2653 a2 = true;
2655 else
2656 nlabelless++;
2658 if (!a1 || !a2)
2660 gfc_error ("Missing '%s' argument to the %s intrinsic at %L",
2661 !a1 ? "a1" : "a2", gfc_current_intrinsic,
2662 gfc_current_intrinsic_where);
2663 return false;
2666 /* Check for duplicates. */
2667 for (i = 0; i < nargs; i++)
2668 for (j = i + 1; j < nargs; j++)
2669 if (nlabels[i] == nlabels[j])
2670 goto duplicate;
2672 return true;
2674 duplicate:
2675 gfc_error ("Duplicate argument '%s' at %L to intrinsic %s", arg->name,
2676 &arg->expr->where, gfc_current_intrinsic);
2677 return false;
2679 unknown:
2680 gfc_error ("Unknown argument '%s' at %L to intrinsic %s", arg->name,
2681 &arg->expr->where, gfc_current_intrinsic);
2682 return false;
2686 static bool
2687 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2689 gfc_actual_arglist *arg, *tmp;
2690 gfc_expr *x;
2691 int m, n;
2693 if (!min_max_args (arglist))
2694 return false;
2696 for (arg = arglist, n=1; arg; arg = arg->next, n++)
2698 x = arg->expr;
2699 if (x->ts.type != type || x->ts.kind != kind)
2701 if (x->ts.type == type)
2703 if (!gfc_notify_std (GFC_STD_GNU, "Different type "
2704 "kinds at %L", &x->where))
2705 return false;
2707 else
2709 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2710 "%s(%d)", n, gfc_current_intrinsic, &x->where,
2711 gfc_basic_typename (type), kind);
2712 return false;
2716 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2717 if (!gfc_check_conformance (tmp->expr, x,
2718 "arguments 'a%d' and 'a%d' for "
2719 "intrinsic '%s'", m, n,
2720 gfc_current_intrinsic))
2721 return false;
2724 return true;
2728 bool
2729 gfc_check_min_max (gfc_actual_arglist *arg)
2731 gfc_expr *x;
2733 if (!min_max_args (arg))
2734 return false;
2736 x = arg->expr;
2738 if (x->ts.type == BT_CHARACTER)
2740 if (!gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
2741 "with CHARACTER argument at %L",
2742 gfc_current_intrinsic, &x->where))
2743 return false;
2745 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2747 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2748 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2749 return false;
2752 return check_rest (x->ts.type, x->ts.kind, arg);
2756 bool
2757 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2759 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2763 bool
2764 gfc_check_min_max_real (gfc_actual_arglist *arg)
2766 return check_rest (BT_REAL, gfc_default_real_kind, arg);
2770 bool
2771 gfc_check_min_max_double (gfc_actual_arglist *arg)
2773 return check_rest (BT_REAL, gfc_default_double_kind, arg);
2777 /* End of min/max family. */
2779 bool
2780 gfc_check_malloc (gfc_expr *size)
2782 if (!type_check (size, 0, BT_INTEGER))
2783 return false;
2785 if (!scalar_check (size, 0))
2786 return false;
2788 return true;
2792 bool
2793 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2795 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2797 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2798 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2799 gfc_current_intrinsic, &matrix_a->where);
2800 return false;
2803 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2805 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2806 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2807 gfc_current_intrinsic, &matrix_b->where);
2808 return false;
2811 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2812 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2814 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2815 gfc_current_intrinsic, &matrix_a->where,
2816 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2817 return false;
2820 switch (matrix_a->rank)
2822 case 1:
2823 if (!rank_check (matrix_b, 1, 2))
2824 return false;
2825 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2826 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2828 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2829 "and '%s' at %L for intrinsic matmul",
2830 gfc_current_intrinsic_arg[0]->name,
2831 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2832 return false;
2834 break;
2836 case 2:
2837 if (matrix_b->rank != 2)
2839 if (!rank_check (matrix_b, 1, 1))
2840 return false;
2842 /* matrix_b has rank 1 or 2 here. Common check for the cases
2843 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2844 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2845 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2847 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2848 "dimension 1 for argument '%s' at %L for intrinsic "
2849 "matmul", gfc_current_intrinsic_arg[0]->name,
2850 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2851 return false;
2853 break;
2855 default:
2856 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2857 "1 or 2", gfc_current_intrinsic_arg[0]->name,
2858 gfc_current_intrinsic, &matrix_a->where);
2859 return false;
2862 return true;
2866 /* Whoever came up with this interface was probably on something.
2867 The possibilities for the occupation of the second and third
2868 parameters are:
2870 Arg #2 Arg #3
2871 NULL NULL
2872 DIM NULL
2873 MASK NULL
2874 NULL MASK minloc(array, mask=m)
2875 DIM MASK
2877 I.e. in the case of minloc(array,mask), mask will be in the second
2878 position of the argument list and we'll have to fix that up. */
2880 bool
2881 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
2883 gfc_expr *a, *m, *d;
2885 a = ap->expr;
2886 if (!int_or_real_check (a, 0) || !array_check (a, 0))
2887 return false;
2889 d = ap->next->expr;
2890 m = ap->next->next->expr;
2892 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2893 && ap->next->name == NULL)
2895 m = d;
2896 d = NULL;
2897 ap->next->expr = NULL;
2898 ap->next->next->expr = m;
2901 if (!dim_check (d, 1, false))
2902 return false;
2904 if (!dim_rank_check (d, a, 0))
2905 return false;
2907 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
2908 return false;
2910 if (m != NULL
2911 && !gfc_check_conformance (a, m,
2912 "arguments '%s' and '%s' for intrinsic %s",
2913 gfc_current_intrinsic_arg[0]->name,
2914 gfc_current_intrinsic_arg[2]->name,
2915 gfc_current_intrinsic))
2916 return false;
2918 return true;
2922 /* Similar to minloc/maxloc, the argument list might need to be
2923 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2924 difference is that MINLOC/MAXLOC take an additional KIND argument.
2925 The possibilities are:
2927 Arg #2 Arg #3
2928 NULL NULL
2929 DIM NULL
2930 MASK NULL
2931 NULL MASK minval(array, mask=m)
2932 DIM MASK
2934 I.e. in the case of minval(array,mask), mask will be in the second
2935 position of the argument list and we'll have to fix that up. */
2937 static bool
2938 check_reduction (gfc_actual_arglist *ap)
2940 gfc_expr *a, *m, *d;
2942 a = ap->expr;
2943 d = ap->next->expr;
2944 m = ap->next->next->expr;
2946 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2947 && ap->next->name == NULL)
2949 m = d;
2950 d = NULL;
2951 ap->next->expr = NULL;
2952 ap->next->next->expr = m;
2955 if (!dim_check (d, 1, false))
2956 return false;
2958 if (!dim_rank_check (d, a, 0))
2959 return false;
2961 if (m != NULL && !type_check (m, 2, BT_LOGICAL))
2962 return false;
2964 if (m != NULL
2965 && !gfc_check_conformance (a, m,
2966 "arguments '%s' and '%s' for intrinsic %s",
2967 gfc_current_intrinsic_arg[0]->name,
2968 gfc_current_intrinsic_arg[2]->name,
2969 gfc_current_intrinsic))
2970 return false;
2972 return true;
2976 bool
2977 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2979 if (!int_or_real_check (ap->expr, 0)
2980 || !array_check (ap->expr, 0))
2981 return false;
2983 return check_reduction (ap);
2987 bool
2988 gfc_check_product_sum (gfc_actual_arglist *ap)
2990 if (!numeric_check (ap->expr, 0)
2991 || !array_check (ap->expr, 0))
2992 return false;
2994 return check_reduction (ap);
2998 /* For IANY, IALL and IPARITY. */
3000 bool
3001 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
3003 int k;
3005 if (!type_check (i, 0, BT_INTEGER))
3006 return false;
3008 if (!nonnegative_check ("I", i))
3009 return false;
3011 if (!kind_check (kind, 1, BT_INTEGER))
3012 return false;
3014 if (kind)
3015 gfc_extract_int (kind, &k);
3016 else
3017 k = gfc_default_integer_kind;
3019 if (!less_than_bitsizekind ("I", i, k))
3020 return false;
3022 return true;
3026 bool
3027 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
3029 if (ap->expr->ts.type != BT_INTEGER)
3031 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
3032 gfc_current_intrinsic_arg[0]->name,
3033 gfc_current_intrinsic, &ap->expr->where);
3034 return false;
3037 if (!array_check (ap->expr, 0))
3038 return false;
3040 return check_reduction (ap);
3044 bool
3045 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
3047 if (!same_type_check (tsource, 0, fsource, 1))
3048 return false;
3050 if (!type_check (mask, 2, BT_LOGICAL))
3051 return false;
3053 if (tsource->ts.type == BT_CHARACTER)
3054 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
3056 return true;
3060 bool
3061 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
3063 if (!type_check (i, 0, BT_INTEGER))
3064 return false;
3066 if (!type_check (j, 1, BT_INTEGER))
3067 return false;
3069 if (!type_check (mask, 2, BT_INTEGER))
3070 return false;
3072 if (!same_type_check (i, 0, j, 1))
3073 return false;
3075 if (!same_type_check (i, 0, mask, 2))
3076 return false;
3078 return true;
3082 bool
3083 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
3085 if (!variable_check (from, 0, false))
3086 return false;
3087 if (!allocatable_check (from, 0))
3088 return false;
3089 if (gfc_is_coindexed (from))
3091 gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
3092 "coindexed", &from->where);
3093 return false;
3096 if (!variable_check (to, 1, false))
3097 return false;
3098 if (!allocatable_check (to, 1))
3099 return false;
3100 if (gfc_is_coindexed (to))
3102 gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
3103 "coindexed", &to->where);
3104 return false;
3107 if (from->ts.type == BT_CLASS && to->ts.type == BT_DERIVED)
3109 gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
3110 "polymorphic if FROM is polymorphic",
3111 &to->where);
3112 return false;
3115 if (!same_type_check (to, 1, from, 0))
3116 return false;
3118 if (to->rank != from->rank)
3120 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3121 "must have the same rank %d/%d", &to->where, from->rank,
3122 to->rank);
3123 return false;
3126 /* IR F08/0040; cf. 12-006A. */
3127 if (gfc_get_corank (to) != gfc_get_corank (from))
3129 gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
3130 "must have the same corank %d/%d", &to->where,
3131 gfc_get_corank (from), gfc_get_corank (to));
3132 return false;
3135 /* CLASS arguments: Make sure the vtab of from is present. */
3136 if (to->ts.type == BT_CLASS && !UNLIMITED_POLY (from))
3137 gfc_find_vtab (&from->ts);
3139 return true;
3143 bool
3144 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
3146 if (!type_check (x, 0, BT_REAL))
3147 return false;
3149 if (!type_check (s, 1, BT_REAL))
3150 return false;
3152 if (s->expr_type == EXPR_CONSTANT)
3154 if (mpfr_sgn (s->value.real) == 0)
3156 gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
3157 &s->where);
3158 return false;
3162 return true;
3166 bool
3167 gfc_check_new_line (gfc_expr *a)
3169 if (!type_check (a, 0, BT_CHARACTER))
3170 return false;
3172 return true;
3176 bool
3177 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
3179 if (!type_check (array, 0, BT_REAL))
3180 return false;
3182 if (!array_check (array, 0))
3183 return false;
3185 if (!dim_rank_check (dim, array, false))
3186 return false;
3188 return true;
3191 bool
3192 gfc_check_null (gfc_expr *mold)
3194 symbol_attribute attr;
3196 if (mold == NULL)
3197 return true;
3199 if (!variable_check (mold, 0, true))
3200 return false;
3202 attr = gfc_variable_attr (mold, NULL);
3204 if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
3206 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
3207 "ALLOCATABLE or procedure pointer",
3208 gfc_current_intrinsic_arg[0]->name,
3209 gfc_current_intrinsic, &mold->where);
3210 return false;
3213 if (attr.allocatable
3214 && !gfc_notify_std (GFC_STD_F2003, "NULL intrinsic with "
3215 "allocatable MOLD at %L", &mold->where))
3216 return false;
3218 /* F2008, C1242. */
3219 if (gfc_is_coindexed (mold))
3221 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
3222 "coindexed", gfc_current_intrinsic_arg[0]->name,
3223 gfc_current_intrinsic, &mold->where);
3224 return false;
3227 return true;
3231 bool
3232 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
3234 if (!array_check (array, 0))
3235 return false;
3237 if (!type_check (mask, 1, BT_LOGICAL))
3238 return false;
3240 if (!gfc_check_conformance (array, mask,
3241 "arguments '%s' and '%s' for intrinsic '%s'",
3242 gfc_current_intrinsic_arg[0]->name,
3243 gfc_current_intrinsic_arg[1]->name,
3244 gfc_current_intrinsic))
3245 return false;
3247 if (vector != NULL)
3249 mpz_t array_size, vector_size;
3250 bool have_array_size, have_vector_size;
3252 if (!same_type_check (array, 0, vector, 2))
3253 return false;
3255 if (!rank_check (vector, 2, 1))
3256 return false;
3258 /* VECTOR requires at least as many elements as MASK
3259 has .TRUE. values. */
3260 have_array_size = gfc_array_size(array, &array_size);
3261 have_vector_size = gfc_array_size(vector, &vector_size);
3263 if (have_vector_size
3264 && (mask->expr_type == EXPR_ARRAY
3265 || (mask->expr_type == EXPR_CONSTANT
3266 && have_array_size)))
3268 int mask_true_values = 0;
3270 if (mask->expr_type == EXPR_ARRAY)
3272 gfc_constructor *mask_ctor;
3273 mask_ctor = gfc_constructor_first (mask->value.constructor);
3274 while (mask_ctor)
3276 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3278 mask_true_values = 0;
3279 break;
3282 if (mask_ctor->expr->value.logical)
3283 mask_true_values++;
3285 mask_ctor = gfc_constructor_next (mask_ctor);
3288 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
3289 mask_true_values = mpz_get_si (array_size);
3291 if (mpz_get_si (vector_size) < mask_true_values)
3293 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3294 "provide at least as many elements as there "
3295 "are .TRUE. values in '%s' (%ld/%d)",
3296 gfc_current_intrinsic_arg[2]->name,
3297 gfc_current_intrinsic, &vector->where,
3298 gfc_current_intrinsic_arg[1]->name,
3299 mpz_get_si (vector_size), mask_true_values);
3300 return false;
3304 if (have_array_size)
3305 mpz_clear (array_size);
3306 if (have_vector_size)
3307 mpz_clear (vector_size);
3310 return true;
3314 bool
3315 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
3317 if (!type_check (mask, 0, BT_LOGICAL))
3318 return false;
3320 if (!array_check (mask, 0))
3321 return false;
3323 if (!dim_rank_check (dim, mask, false))
3324 return false;
3326 return true;
3330 bool
3331 gfc_check_precision (gfc_expr *x)
3333 if (!real_or_complex_check (x, 0))
3334 return false;
3336 return true;
3340 bool
3341 gfc_check_present (gfc_expr *a)
3343 gfc_symbol *sym;
3345 if (!variable_check (a, 0, true))
3346 return false;
3348 sym = a->symtree->n.sym;
3349 if (!sym->attr.dummy)
3351 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
3352 "dummy variable", gfc_current_intrinsic_arg[0]->name,
3353 gfc_current_intrinsic, &a->where);
3354 return false;
3357 if (!sym->attr.optional)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
3360 "an OPTIONAL dummy variable",
3361 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3362 &a->where);
3363 return false;
3366 /* 13.14.82 PRESENT(A)
3367 ......
3368 Argument. A shall be the name of an optional dummy argument that is
3369 accessible in the subprogram in which the PRESENT function reference
3370 appears... */
3372 if (a->ref != NULL
3373 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
3374 && (a->ref->u.ar.type == AR_FULL
3375 || (a->ref->u.ar.type == AR_ELEMENT
3376 && a->ref->u.ar.as->rank == 0))))
3378 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3379 "subobject of '%s'", gfc_current_intrinsic_arg[0]->name,
3380 gfc_current_intrinsic, &a->where, sym->name);
3381 return false;
3384 return true;
3388 bool
3389 gfc_check_radix (gfc_expr *x)
3391 if (!int_or_real_check (x, 0))
3392 return false;
3394 return true;
3398 bool
3399 gfc_check_range (gfc_expr *x)
3401 if (!numeric_check (x, 0))
3402 return false;
3404 return true;
3408 bool
3409 gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
3411 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3412 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
3414 bool is_variable = true;
3416 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3417 if (a->expr_type == EXPR_FUNCTION)
3418 is_variable = a->value.function.esym
3419 ? a->value.function.esym->result->attr.pointer
3420 : a->symtree->n.sym->result->attr.pointer;
3422 if (a->expr_type == EXPR_OP || a->expr_type == EXPR_NULL
3423 || a->expr_type == EXPR_COMPCALL|| a->expr_type == EXPR_PPC
3424 || !is_variable)
3426 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3427 "object", &a->where);
3428 return false;
3431 return true;
3435 /* real, float, sngl. */
3436 bool
3437 gfc_check_real (gfc_expr *a, gfc_expr *kind)
3439 if (!numeric_check (a, 0))
3440 return false;
3442 if (!kind_check (kind, 1, BT_REAL))
3443 return false;
3445 return true;
3449 bool
3450 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
3452 if (!type_check (path1, 0, BT_CHARACTER))
3453 return false;
3454 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3455 return false;
3457 if (!type_check (path2, 1, BT_CHARACTER))
3458 return false;
3459 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3460 return false;
3462 return true;
3466 bool
3467 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3469 if (!type_check (path1, 0, BT_CHARACTER))
3470 return false;
3471 if (!kind_value_check (path1, 0, gfc_default_character_kind))
3472 return false;
3474 if (!type_check (path2, 1, BT_CHARACTER))
3475 return false;
3476 if (!kind_value_check (path2, 1, gfc_default_character_kind))
3477 return false;
3479 if (status == NULL)
3480 return true;
3482 if (!type_check (status, 2, BT_INTEGER))
3483 return false;
3485 if (!scalar_check (status, 2))
3486 return false;
3488 return true;
3492 bool
3493 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
3495 if (!type_check (x, 0, BT_CHARACTER))
3496 return false;
3498 if (!scalar_check (x, 0))
3499 return false;
3501 if (!type_check (y, 0, BT_INTEGER))
3502 return false;
3504 if (!scalar_check (y, 1))
3505 return false;
3507 return true;
3511 bool
3512 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
3513 gfc_expr *pad, gfc_expr *order)
3515 mpz_t size;
3516 mpz_t nelems;
3517 int shape_size;
3519 if (!array_check (source, 0))
3520 return false;
3522 if (!rank_check (shape, 1, 1))
3523 return false;
3525 if (!type_check (shape, 1, BT_INTEGER))
3526 return false;
3528 if (!gfc_array_size (shape, &size))
3530 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3531 "array of constant size", &shape->where);
3532 return false;
3535 shape_size = mpz_get_ui (size);
3536 mpz_clear (size);
3538 if (shape_size <= 0)
3540 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3541 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3542 &shape->where);
3543 return false;
3545 else if (shape_size > GFC_MAX_DIMENSIONS)
3547 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3548 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
3549 return false;
3551 else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
3553 gfc_expr *e;
3554 int i, extent;
3555 for (i = 0; i < shape_size; ++i)
3557 e = gfc_constructor_lookup_expr (shape->value.constructor, i);
3558 if (e->expr_type != EXPR_CONSTANT)
3559 continue;
3561 gfc_extract_int (e, &extent);
3562 if (extent < 0)
3564 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3565 "negative element (%d)",
3566 gfc_current_intrinsic_arg[1]->name,
3567 gfc_current_intrinsic, &e->where, extent);
3568 return false;
3573 if (pad != NULL)
3575 if (!same_type_check (source, 0, pad, 2))
3576 return false;
3578 if (!array_check (pad, 2))
3579 return false;
3582 if (order != NULL)
3584 if (!array_check (order, 3))
3585 return false;
3587 if (!type_check (order, 3, BT_INTEGER))
3588 return false;
3590 if (order->expr_type == EXPR_ARRAY)
3592 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
3593 gfc_expr *e;
3595 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
3596 perm[i] = 0;
3598 gfc_array_size (order, &size);
3599 order_size = mpz_get_ui (size);
3600 mpz_clear (size);
3602 if (order_size != shape_size)
3604 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3605 "has wrong number of elements (%d/%d)",
3606 gfc_current_intrinsic_arg[3]->name,
3607 gfc_current_intrinsic, &order->where,
3608 order_size, shape_size);
3609 return false;
3612 for (i = 1; i <= order_size; ++i)
3614 e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3615 if (e->expr_type != EXPR_CONSTANT)
3616 continue;
3618 gfc_extract_int (e, &dim);
3620 if (dim < 1 || dim > order_size)
3622 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3623 "has out-of-range dimension (%d)",
3624 gfc_current_intrinsic_arg[3]->name,
3625 gfc_current_intrinsic, &e->where, dim);
3626 return false;
3629 if (perm[dim-1] != 0)
3631 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3632 "invalid permutation of dimensions (dimension "
3633 "'%d' duplicated)",
3634 gfc_current_intrinsic_arg[3]->name,
3635 gfc_current_intrinsic, &e->where, dim);
3636 return false;
3639 perm[dim-1] = 1;
3644 if (pad == NULL && shape->expr_type == EXPR_ARRAY
3645 && gfc_is_constant_expr (shape)
3646 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3647 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3649 /* Check the match in size between source and destination. */
3650 if (gfc_array_size (source, &nelems))
3652 gfc_constructor *c;
3653 bool test;
3656 mpz_init_set_ui (size, 1);
3657 for (c = gfc_constructor_first (shape->value.constructor);
3658 c; c = gfc_constructor_next (c))
3659 mpz_mul (size, size, c->expr->value.integer);
3661 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3662 mpz_clear (nelems);
3663 mpz_clear (size);
3665 if (test)
3667 gfc_error ("Without padding, there are not enough elements "
3668 "in the intrinsic RESHAPE source at %L to match "
3669 "the shape", &source->where);
3670 return false;
3675 return true;
3679 bool
3680 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3682 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3684 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3685 "cannot be of type %s",
3686 gfc_current_intrinsic_arg[0]->name,
3687 gfc_current_intrinsic,
3688 &a->where, gfc_typename (&a->ts));
3689 return false;
3692 if (!(gfc_type_is_extensible (a->ts.u.derived) || UNLIMITED_POLY (a)))
3694 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3695 "must be of an extensible type",
3696 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3697 &a->where);
3698 return false;
3701 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3703 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3704 "cannot be of type %s",
3705 gfc_current_intrinsic_arg[0]->name,
3706 gfc_current_intrinsic,
3707 &b->where, gfc_typename (&b->ts));
3708 return false;
3711 if (!(gfc_type_is_extensible (b->ts.u.derived) || UNLIMITED_POLY (b)))
3713 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3714 "must be of an extensible type",
3715 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3716 &b->where);
3717 return false;
3720 return true;
3724 bool
3725 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3727 if (!type_check (x, 0, BT_REAL))
3728 return false;
3730 if (!type_check (i, 1, BT_INTEGER))
3731 return false;
3733 return true;
3737 bool
3738 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3740 if (!type_check (x, 0, BT_CHARACTER))
3741 return false;
3743 if (!type_check (y, 1, BT_CHARACTER))
3744 return false;
3746 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
3747 return false;
3749 if (!kind_check (kind, 3, BT_INTEGER))
3750 return false;
3751 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3752 "with KIND argument at %L",
3753 gfc_current_intrinsic, &kind->where))
3754 return false;
3756 if (!same_type_check (x, 0, y, 1))
3757 return false;
3759 return true;
3763 bool
3764 gfc_check_secnds (gfc_expr *r)
3766 if (!type_check (r, 0, BT_REAL))
3767 return false;
3769 if (!kind_value_check (r, 0, 4))
3770 return false;
3772 if (!scalar_check (r, 0))
3773 return false;
3775 return true;
3779 bool
3780 gfc_check_selected_char_kind (gfc_expr *name)
3782 if (!type_check (name, 0, BT_CHARACTER))
3783 return false;
3785 if (!kind_value_check (name, 0, gfc_default_character_kind))
3786 return false;
3788 if (!scalar_check (name, 0))
3789 return false;
3791 return true;
3795 bool
3796 gfc_check_selected_int_kind (gfc_expr *r)
3798 if (!type_check (r, 0, BT_INTEGER))
3799 return false;
3801 if (!scalar_check (r, 0))
3802 return false;
3804 return true;
3808 bool
3809 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3811 if (p == NULL && r == NULL
3812 && !gfc_notify_std (GFC_STD_F2008, "SELECTED_REAL_KIND with"
3813 " neither 'P' nor 'R' argument at %L",
3814 gfc_current_intrinsic_where))
3815 return false;
3817 if (p)
3819 if (!type_check (p, 0, BT_INTEGER))
3820 return false;
3822 if (!scalar_check (p, 0))
3823 return false;
3826 if (r)
3828 if (!type_check (r, 1, BT_INTEGER))
3829 return false;
3831 if (!scalar_check (r, 1))
3832 return false;
3835 if (radix)
3837 if (!type_check (radix, 1, BT_INTEGER))
3838 return false;
3840 if (!scalar_check (radix, 1))
3841 return false;
3843 if (!gfc_notify_std (GFC_STD_F2008, "'%s' intrinsic with "
3844 "RADIX argument at %L", gfc_current_intrinsic,
3845 &radix->where))
3846 return false;
3849 return true;
3853 bool
3854 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3856 if (!type_check (x, 0, BT_REAL))
3857 return false;
3859 if (!type_check (i, 1, BT_INTEGER))
3860 return false;
3862 return true;
3866 bool
3867 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
3869 gfc_array_ref *ar;
3871 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
3872 return true;
3874 ar = gfc_find_array_ref (source);
3876 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
3878 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3879 "an assumed size array", &source->where);
3880 return false;
3883 if (!kind_check (kind, 1, BT_INTEGER))
3884 return false;
3885 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3886 "with KIND argument at %L",
3887 gfc_current_intrinsic, &kind->where))
3888 return false;
3890 return true;
3894 bool
3895 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
3897 if (!type_check (i, 0, BT_INTEGER))
3898 return false;
3900 if (!type_check (shift, 0, BT_INTEGER))
3901 return false;
3903 if (!nonnegative_check ("SHIFT", shift))
3904 return false;
3906 if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
3907 return false;
3909 return true;
3913 bool
3914 gfc_check_sign (gfc_expr *a, gfc_expr *b)
3916 if (!int_or_real_check (a, 0))
3917 return false;
3919 if (!same_type_check (a, 0, b, 1))
3920 return false;
3922 return true;
3926 bool
3927 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3929 if (!array_check (array, 0))
3930 return false;
3932 if (!dim_check (dim, 1, true))
3933 return false;
3935 if (!dim_rank_check (dim, array, 0))
3936 return false;
3938 if (!kind_check (kind, 2, BT_INTEGER))
3939 return false;
3940 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
3941 "with KIND argument at %L",
3942 gfc_current_intrinsic, &kind->where))
3943 return false;
3946 return true;
3950 bool
3951 gfc_check_sizeof (gfc_expr *arg)
3953 if (arg->ts.type == BT_PROCEDURE)
3955 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a procedure",
3956 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3957 &arg->where);
3958 return false;
3961 /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
3962 if (arg->ts.type == BT_ASSUMED
3963 && (arg->symtree->n.sym->as == NULL
3964 || (arg->symtree->n.sym->as->type != AS_ASSUMED_SHAPE
3965 && arg->symtree->n.sym->as->type != AS_DEFERRED
3966 && arg->symtree->n.sym->as->type != AS_ASSUMED_RANK)))
3968 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
3969 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3970 &arg->where);
3971 return false;
3974 if (arg->rank && arg->expr_type == EXPR_VARIABLE
3975 && arg->symtree->n.sym->as != NULL
3976 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
3977 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
3979 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
3980 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
3981 gfc_current_intrinsic, &arg->where);
3982 return false;
3985 return true;
3989 /* Check whether an expression is interoperable. When returning false,
3990 msg is set to a string telling why the expression is not interoperable,
3991 otherwise, it is set to NULL. The msg string can be used in diagnostics.
3992 If c_loc is true, character with len > 1 are allowed (cf. Fortran
3993 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
3994 arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
3995 are permitted. */
3997 static bool
3998 is_c_interoperable (gfc_expr *expr, const char **msg, bool c_loc, bool c_f_ptr)
4000 *msg = NULL;
4002 if (expr->ts.type == BT_CLASS)
4004 *msg = "Expression is polymorphic";
4005 return false;
4008 if (expr->ts.type == BT_DERIVED && !expr->ts.u.derived->attr.is_bind_c
4009 && !expr->ts.u.derived->ts.is_iso_c)
4011 *msg = "Expression is a noninteroperable derived type";
4012 return false;
4015 if (expr->ts.type == BT_PROCEDURE)
4017 *msg = "Procedure unexpected as argument";
4018 return false;
4021 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_LOGICAL)
4023 int i;
4024 for (i = 0; gfc_logical_kinds[i].kind; i++)
4025 if (gfc_logical_kinds[i].kind == expr->ts.kind)
4026 return true;
4027 *msg = "Extension to use a non-C_Bool-kind LOGICAL";
4028 return false;
4031 if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_CHARACTER
4032 && expr->ts.kind != 1)
4034 *msg = "Extension to use a non-C_CHAR-kind CHARACTER";
4035 return false;
4038 if (expr->ts.type == BT_CHARACTER) {
4039 if (expr->ts.deferred)
4041 /* TS 29113 allows deferred-length strings as dummy arguments,
4042 but it is not an interoperable type. */
4043 *msg = "Expression shall not be a deferred-length string";
4044 return false;
4047 if (expr->ts.u.cl && expr->ts.u.cl->length
4048 && !gfc_simplify_expr (expr, 0))
4049 gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
4051 if (!c_loc && expr->ts.u.cl
4052 && (!expr->ts.u.cl->length
4053 || expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
4054 || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0))
4056 *msg = "Type shall have a character length of 1";
4057 return false;
4061 /* Note: The following checks are about interoperatable variables, Fortran
4062 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
4063 is allowed, e.g. assumed-shape arrays with TS 29113. */
4065 if (gfc_is_coarray (expr))
4067 *msg = "Coarrays are not interoperable";
4068 return false;
4071 if (!c_loc && expr->rank > 0 && expr->expr_type != EXPR_ARRAY)
4073 gfc_array_ref *ar = gfc_find_array_ref (expr);
4074 if (ar->type != AR_FULL)
4076 *msg = "Only whole-arrays are interoperable";
4077 return false;
4079 if (!c_f_ptr && ar->as->type != AS_EXPLICIT
4080 && ar->as->type != AS_ASSUMED_SIZE)
4082 *msg = "Only explicit-size and assumed-size arrays are interoperable";
4083 return false;
4087 return true;
4091 bool
4092 gfc_check_c_sizeof (gfc_expr *arg)
4094 const char *msg;
4096 if (!is_c_interoperable (arg, &msg, false, false))
4098 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
4099 "interoperable data entity: %s",
4100 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4101 &arg->where, msg);
4102 return false;
4105 if (arg->ts.type == BT_ASSUMED)
4107 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
4108 "TYPE(*)",
4109 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4110 &arg->where);
4111 return false;
4114 if (arg->rank && arg->expr_type == EXPR_VARIABLE
4115 && arg->symtree->n.sym->as != NULL
4116 && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
4117 && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
4119 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be an "
4120 "assumed-size array", gfc_current_intrinsic_arg[0]->name,
4121 gfc_current_intrinsic, &arg->where);
4122 return false;
4125 return true;
4129 bool
4130 gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
4132 if (c_ptr_1->ts.type != BT_DERIVED
4133 || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4134 || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
4135 && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
4137 gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
4138 "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
4139 return false;
4142 if (!scalar_check (c_ptr_1, 0))
4143 return false;
4145 if (c_ptr_2
4146 && (c_ptr_2->ts.type != BT_DERIVED
4147 || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4148 || (c_ptr_1->ts.u.derived->intmod_sym_id
4149 != c_ptr_2->ts.u.derived->intmod_sym_id)))
4151 gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
4152 "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
4153 gfc_typename (&c_ptr_1->ts),
4154 gfc_typename (&c_ptr_2->ts));
4155 return false;
4158 if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
4159 return false;
4161 return true;
4165 bool
4166 gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape)
4168 symbol_attribute attr;
4169 const char *msg;
4171 if (cptr->ts.type != BT_DERIVED
4172 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4173 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR)
4175 gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
4176 "type TYPE(C_PTR)", &cptr->where);
4177 return false;
4180 if (!scalar_check (cptr, 0))
4181 return false;
4183 attr = gfc_expr_attr (fptr);
4185 if (!attr.pointer)
4187 gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
4188 &fptr->where);
4189 return false;
4192 if (fptr->ts.type == BT_CLASS)
4194 gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
4195 &fptr->where);
4196 return false;
4199 if (gfc_is_coindexed (fptr))
4201 gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
4202 "coindexed", &fptr->where);
4203 return false;
4206 if (fptr->rank == 0 && shape)
4208 gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
4209 "FPTR", &fptr->where);
4210 return false;
4212 else if (fptr->rank && !shape)
4214 gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
4215 "FPTR at %L", &fptr->where);
4216 return false;
4219 if (shape && !rank_check (shape, 2, 1))
4220 return false;
4222 if (shape && !type_check (shape, 2, BT_INTEGER))
4223 return false;
4225 if (shape)
4227 mpz_t size;
4228 if (gfc_array_size (shape, &size))
4230 if (mpz_cmp_ui (size, fptr->rank) != 0)
4232 mpz_clear (size);
4233 gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
4234 "size as the RANK of FPTR", &shape->where);
4235 return false;
4237 mpz_clear (size);
4241 if (fptr->ts.type == BT_CLASS)
4243 gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr->where);
4244 return false;
4247 if (!is_c_interoperable (fptr, &msg, false, true))
4248 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable array FPTR "
4249 "at %L to C_F_POINTER: %s", &fptr->where, msg);
4251 return true;
4255 bool
4256 gfc_check_c_f_procpointer (gfc_expr *cptr, gfc_expr *fptr)
4258 symbol_attribute attr;
4260 if (cptr->ts.type != BT_DERIVED
4261 || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
4262 || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR)
4264 gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
4265 "type TYPE(C_FUNPTR)", &cptr->where);
4266 return false;
4269 if (!scalar_check (cptr, 0))
4270 return false;
4272 attr = gfc_expr_attr (fptr);
4274 if (!attr.proc_pointer)
4276 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
4277 "pointer", &fptr->where);
4278 return false;
4281 if (gfc_is_coindexed (fptr))
4283 gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
4284 "coindexed", &fptr->where);
4285 return false;
4288 if (!attr.is_bind_c)
4289 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4290 "pointer at %L to C_F_PROCPOINTER", &fptr->where);
4292 return true;
4296 bool
4297 gfc_check_c_funloc (gfc_expr *x)
4299 symbol_attribute attr;
4301 if (gfc_is_coindexed (x))
4303 gfc_error ("Argument X at %L to C_FUNLOC shall not be "
4304 "coindexed", &x->where);
4305 return false;
4308 attr = gfc_expr_attr (x);
4310 if (attr.function && !attr.proc_pointer && x->expr_type == EXPR_VARIABLE
4311 && x->symtree->n.sym == x->symtree->n.sym->result)
4313 gfc_namespace *ns = gfc_current_ns;
4315 for (ns = gfc_current_ns; ns; ns = ns->parent)
4316 if (x->symtree->n.sym == ns->proc_name)
4318 gfc_error ("Function result '%s' at %L is invalid as X argument "
4319 "to C_FUNLOC", x->symtree->n.sym->name, &x->where);
4320 return false;
4324 if (attr.flavor != FL_PROCEDURE)
4326 gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
4327 "or a procedure pointer", &x->where);
4328 return false;
4331 if (!attr.is_bind_c)
4332 return gfc_notify_std (GFC_STD_F2008_TS, "Noninteroperable procedure "
4333 "at %L to C_FUNLOC", &x->where);
4334 return true;
4338 bool
4339 gfc_check_c_loc (gfc_expr *x)
4341 symbol_attribute attr;
4342 const char *msg;
4344 if (gfc_is_coindexed (x))
4346 gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x->where);
4347 return false;
4350 if (x->ts.type == BT_CLASS)
4352 gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
4353 &x->where);
4354 return false;
4357 attr = gfc_expr_attr (x);
4359 if (!attr.pointer
4360 && (x->expr_type != EXPR_VARIABLE || !attr.target
4361 || attr.flavor == FL_PARAMETER))
4363 gfc_error ("Argument X at %L to C_LOC shall have either "
4364 "the POINTER or the TARGET attribute", &x->where);
4365 return false;
4368 if (x->ts.type == BT_CHARACTER
4369 && gfc_var_strlen (x) == 0)
4371 gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
4372 "string", &x->where);
4373 return false;
4376 if (!is_c_interoperable (x, &msg, true, false))
4378 if (x->ts.type == BT_CLASS)
4380 gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
4381 &x->where);
4382 return false;
4385 if (x->rank
4386 && !gfc_notify_std (GFC_STD_F2008_TS,
4387 "Noninteroperable array at %L as"
4388 " argument to C_LOC: %s", &x->where, msg))
4389 return false;
4391 else if (x->rank > 0 && gfc_notification_std (GFC_STD_F2008))
4393 gfc_array_ref *ar = gfc_find_array_ref (x);
4395 if (ar->as->type != AS_EXPLICIT && ar->as->type != AS_ASSUMED_SIZE
4396 && !attr.allocatable
4397 && !gfc_notify_std (GFC_STD_F2008,
4398 "Array of interoperable type at %L "
4399 "to C_LOC which is nonallocatable and neither "
4400 "assumed size nor explicit size", &x->where))
4401 return false;
4402 else if (ar->type != AR_FULL
4403 && !gfc_notify_std (GFC_STD_F2008, "Array section at %L "
4404 "to C_LOC", &x->where))
4405 return false;
4408 return true;
4412 bool
4413 gfc_check_sleep_sub (gfc_expr *seconds)
4415 if (!type_check (seconds, 0, BT_INTEGER))
4416 return false;
4418 if (!scalar_check (seconds, 0))
4419 return false;
4421 return true;
4424 bool
4425 gfc_check_sngl (gfc_expr *a)
4427 if (!type_check (a, 0, BT_REAL))
4428 return false;
4430 if ((a->ts.kind != gfc_default_double_kind)
4431 && !gfc_notify_std (GFC_STD_GNU, "non double precision "
4432 "REAL argument to %s intrinsic at %L",
4433 gfc_current_intrinsic, &a->where))
4434 return false;
4436 return true;
4439 bool
4440 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
4442 if (source->rank >= GFC_MAX_DIMENSIONS)
4444 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
4445 "than rank %d", gfc_current_intrinsic_arg[0]->name,
4446 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
4448 return false;
4451 if (dim == NULL)
4452 return false;
4454 if (!dim_check (dim, 1, false))
4455 return false;
4457 /* dim_rank_check() does not apply here. */
4458 if (dim
4459 && dim->expr_type == EXPR_CONSTANT
4460 && (mpz_cmp_ui (dim->value.integer, 1) < 0
4461 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
4463 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
4464 "dimension index", gfc_current_intrinsic_arg[1]->name,
4465 gfc_current_intrinsic, &dim->where);
4466 return false;
4469 if (!type_check (ncopies, 2, BT_INTEGER))
4470 return false;
4472 if (!scalar_check (ncopies, 2))
4473 return false;
4475 return true;
4479 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
4480 functions). */
4482 bool
4483 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
4485 if (!type_check (unit, 0, BT_INTEGER))
4486 return false;
4488 if (!scalar_check (unit, 0))
4489 return false;
4491 if (!type_check (c, 1, BT_CHARACTER))
4492 return false;
4493 if (!kind_value_check (c, 1, gfc_default_character_kind))
4494 return false;
4496 if (status == NULL)
4497 return true;
4499 if (!type_check (status, 2, BT_INTEGER)
4500 || !kind_value_check (status, 2, gfc_default_integer_kind)
4501 || !scalar_check (status, 2))
4502 return false;
4504 return true;
4508 bool
4509 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
4511 return gfc_check_fgetputc_sub (unit, c, NULL);
4515 bool
4516 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
4518 if (!type_check (c, 0, BT_CHARACTER))
4519 return false;
4520 if (!kind_value_check (c, 0, gfc_default_character_kind))
4521 return false;
4523 if (status == NULL)
4524 return true;
4526 if (!type_check (status, 1, BT_INTEGER)
4527 || !kind_value_check (status, 1, gfc_default_integer_kind)
4528 || !scalar_check (status, 1))
4529 return false;
4531 return true;
4535 bool
4536 gfc_check_fgetput (gfc_expr *c)
4538 return gfc_check_fgetput_sub (c, NULL);
4542 bool
4543 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
4545 if (!type_check (unit, 0, BT_INTEGER))
4546 return false;
4548 if (!scalar_check (unit, 0))
4549 return false;
4551 if (!type_check (offset, 1, BT_INTEGER))
4552 return false;
4554 if (!scalar_check (offset, 1))
4555 return false;
4557 if (!type_check (whence, 2, BT_INTEGER))
4558 return false;
4560 if (!scalar_check (whence, 2))
4561 return false;
4563 if (status == NULL)
4564 return true;
4566 if (!type_check (status, 3, BT_INTEGER))
4567 return false;
4569 if (!kind_value_check (status, 3, 4))
4570 return false;
4572 if (!scalar_check (status, 3))
4573 return false;
4575 return true;
4580 bool
4581 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
4583 if (!type_check (unit, 0, BT_INTEGER))
4584 return false;
4586 if (!scalar_check (unit, 0))
4587 return false;
4589 if (!type_check (array, 1, BT_INTEGER)
4590 || !kind_value_check (unit, 0, gfc_default_integer_kind))
4591 return false;
4593 if (!array_check (array, 1))
4594 return false;
4596 return true;
4600 bool
4601 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
4603 if (!type_check (unit, 0, BT_INTEGER))
4604 return false;
4606 if (!scalar_check (unit, 0))
4607 return false;
4609 if (!type_check (array, 1, BT_INTEGER)
4610 || !kind_value_check (array, 1, gfc_default_integer_kind))
4611 return false;
4613 if (!array_check (array, 1))
4614 return false;
4616 if (status == NULL)
4617 return true;
4619 if (!type_check (status, 2, BT_INTEGER)
4620 || !kind_value_check (status, 2, gfc_default_integer_kind))
4621 return false;
4623 if (!scalar_check (status, 2))
4624 return false;
4626 return true;
4630 bool
4631 gfc_check_ftell (gfc_expr *unit)
4633 if (!type_check (unit, 0, BT_INTEGER))
4634 return false;
4636 if (!scalar_check (unit, 0))
4637 return false;
4639 return true;
4643 bool
4644 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
4646 if (!type_check (unit, 0, BT_INTEGER))
4647 return false;
4649 if (!scalar_check (unit, 0))
4650 return false;
4652 if (!type_check (offset, 1, BT_INTEGER))
4653 return false;
4655 if (!scalar_check (offset, 1))
4656 return false;
4658 return true;
4662 bool
4663 gfc_check_stat (gfc_expr *name, gfc_expr *array)
4665 if (!type_check (name, 0, BT_CHARACTER))
4666 return false;
4667 if (!kind_value_check (name, 0, gfc_default_character_kind))
4668 return false;
4670 if (!type_check (array, 1, BT_INTEGER)
4671 || !kind_value_check (array, 1, gfc_default_integer_kind))
4672 return false;
4674 if (!array_check (array, 1))
4675 return false;
4677 return true;
4681 bool
4682 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
4684 if (!type_check (name, 0, BT_CHARACTER))
4685 return false;
4686 if (!kind_value_check (name, 0, gfc_default_character_kind))
4687 return false;
4689 if (!type_check (array, 1, BT_INTEGER)
4690 || !kind_value_check (array, 1, gfc_default_integer_kind))
4691 return false;
4693 if (!array_check (array, 1))
4694 return false;
4696 if (status == NULL)
4697 return true;
4699 if (!type_check (status, 2, BT_INTEGER)
4700 || !kind_value_check (array, 1, gfc_default_integer_kind))
4701 return false;
4703 if (!scalar_check (status, 2))
4704 return false;
4706 return true;
4710 bool
4711 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
4713 mpz_t nelems;
4715 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4717 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4718 return false;
4721 if (!coarray_check (coarray, 0))
4722 return false;
4724 if (sub->rank != 1)
4726 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
4727 gfc_current_intrinsic_arg[1]->name, &sub->where);
4728 return false;
4731 if (gfc_array_size (sub, &nelems))
4733 int corank = gfc_get_corank (coarray);
4735 if (mpz_cmp_ui (nelems, corank) != 0)
4737 gfc_error ("The number of array elements of the SUB argument to "
4738 "IMAGE_INDEX at %L shall be %d (corank) not %d",
4739 &sub->where, corank, (int) mpz_get_si (nelems));
4740 mpz_clear (nelems);
4741 return false;
4743 mpz_clear (nelems);
4746 return true;
4750 bool
4751 gfc_check_num_images (gfc_expr *distance, gfc_expr *failed)
4753 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4755 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4756 return false;
4759 if (distance)
4761 if (!type_check (distance, 0, BT_INTEGER))
4762 return false;
4764 if (!nonnegative_check ("DISTANCE", distance))
4765 return false;
4767 if (!scalar_check (distance, 0))
4768 return false;
4770 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4771 "NUM_IMAGES at %L", &distance->where))
4772 return false;
4775 if (failed)
4777 if (!type_check (failed, 1, BT_LOGICAL))
4778 return false;
4780 if (!scalar_check (failed, 1))
4781 return false;
4783 if (!gfc_notify_std (GFC_STD_F2008_TS, "FAILED= argument to "
4784 "NUM_IMAGES at %L", &distance->where))
4785 return false;
4788 return true;
4792 bool
4793 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim, gfc_expr *distance)
4795 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4797 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4798 return false;
4801 if (coarray == NULL && dim == NULL && distance == NULL)
4802 return true;
4804 if (dim != NULL && coarray == NULL)
4806 gfc_error ("DIM argument without COARRAY argument not allowed for "
4807 "THIS_IMAGE intrinsic at %L", &dim->where);
4808 return false;
4811 if (distance && (coarray || dim))
4813 gfc_error ("The DISTANCE argument may not be specified together with the "
4814 "COARRAY or DIM argument in intrinsic at %L",
4815 &distance->where);
4816 return false;
4819 /* Assume that we have "this_image (distance)". */
4820 if (coarray && !gfc_is_coarray (coarray) && coarray->ts.type == BT_INTEGER)
4822 if (dim)
4824 gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
4825 &coarray->where);
4826 return false;
4828 distance = coarray;
4831 if (distance)
4833 if (!type_check (distance, 2, BT_INTEGER))
4834 return false;
4836 if (!nonnegative_check ("DISTANCE", distance))
4837 return false;
4839 if (!scalar_check (distance, 2))
4840 return false;
4842 if (!gfc_notify_std (GFC_STD_F2008_TS, "DISTANCE= argument to "
4843 "THIS_IMAGE at %L", &distance->where))
4844 return false;
4846 return true;
4849 if (!coarray_check (coarray, 0))
4850 return false;
4852 if (dim != NULL)
4854 if (!dim_check (dim, 1, false))
4855 return false;
4857 if (!dim_corank_check (dim, coarray))
4858 return false;
4861 return true;
4864 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
4865 by gfc_simplify_transfer. Return false if we cannot do so. */
4867 bool
4868 gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
4869 size_t *source_size, size_t *result_size,
4870 size_t *result_length_p)
4872 size_t result_elt_size;
4874 if (source->expr_type == EXPR_FUNCTION)
4875 return false;
4877 if (size && size->expr_type != EXPR_CONSTANT)
4878 return false;
4880 /* Calculate the size of the source. */
4881 *source_size = gfc_target_expr_size (source);
4882 if (*source_size == 0)
4883 return false;
4885 /* Determine the size of the element. */
4886 result_elt_size = gfc_element_size (mold);
4887 if (result_elt_size == 0)
4888 return false;
4890 if (mold->expr_type == EXPR_ARRAY || mold->rank || size)
4892 int result_length;
4894 if (size)
4895 result_length = (size_t)mpz_get_ui (size->value.integer);
4896 else
4898 result_length = *source_size / result_elt_size;
4899 if (result_length * result_elt_size < *source_size)
4900 result_length += 1;
4903 *result_size = result_length * result_elt_size;
4904 if (result_length_p)
4905 *result_length_p = result_length;
4907 else
4908 *result_size = result_elt_size;
4910 return true;
4914 bool
4915 gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
4917 size_t source_size;
4918 size_t result_size;
4920 if (mold->ts.type == BT_HOLLERITH)
4922 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4923 &mold->where, gfc_basic_typename (BT_HOLLERITH));
4924 return false;
4927 if (size != NULL)
4929 if (!type_check (size, 2, BT_INTEGER))
4930 return false;
4932 if (!scalar_check (size, 2))
4933 return false;
4935 if (!nonoptional_check (size, 2))
4936 return false;
4939 if (!gfc_option.warn_surprising)
4940 return true;
4942 /* If we can't calculate the sizes, we cannot check any more.
4943 Return true for that case. */
4945 if (!gfc_calculate_transfer_sizes (source, mold, size, &source_size,
4946 &result_size, NULL))
4947 return true;
4949 if (source_size < result_size)
4950 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4951 "source size %ld < result size %ld", &source->where,
4952 (long) source_size, (long) result_size);
4954 return true;
4958 bool
4959 gfc_check_transpose (gfc_expr *matrix)
4961 if (!rank_check (matrix, 0, 2))
4962 return false;
4964 return true;
4968 bool
4969 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
4971 if (!array_check (array, 0))
4972 return false;
4974 if (!dim_check (dim, 1, false))
4975 return false;
4977 if (!dim_rank_check (dim, array, 0))
4978 return false;
4980 if (!kind_check (kind, 2, BT_INTEGER))
4981 return false;
4982 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
4983 "with KIND argument at %L",
4984 gfc_current_intrinsic, &kind->where))
4985 return false;
4987 return true;
4991 bool
4992 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
4994 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4996 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4997 return false;
5000 if (!coarray_check (coarray, 0))
5001 return false;
5003 if (dim != NULL)
5005 if (!dim_check (dim, 1, false))
5006 return false;
5008 if (!dim_corank_check (dim, coarray))
5009 return false;
5012 if (!kind_check (kind, 2, BT_INTEGER))
5013 return false;
5015 return true;
5019 bool
5020 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
5022 mpz_t vector_size;
5024 if (!rank_check (vector, 0, 1))
5025 return false;
5027 if (!array_check (mask, 1))
5028 return false;
5030 if (!type_check (mask, 1, BT_LOGICAL))
5031 return false;
5033 if (!same_type_check (vector, 0, field, 2))
5034 return false;
5036 if (mask->expr_type == EXPR_ARRAY
5037 && gfc_array_size (vector, &vector_size))
5039 int mask_true_count = 0;
5040 gfc_constructor *mask_ctor;
5041 mask_ctor = gfc_constructor_first (mask->value.constructor);
5042 while (mask_ctor)
5044 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
5046 mask_true_count = 0;
5047 break;
5050 if (mask_ctor->expr->value.logical)
5051 mask_true_count++;
5053 mask_ctor = gfc_constructor_next (mask_ctor);
5056 if (mpz_get_si (vector_size) < mask_true_count)
5058 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
5059 "provide at least as many elements as there "
5060 "are .TRUE. values in '%s' (%ld/%d)",
5061 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5062 &vector->where, gfc_current_intrinsic_arg[1]->name,
5063 mpz_get_si (vector_size), mask_true_count);
5064 return false;
5067 mpz_clear (vector_size);
5070 if (mask->rank != field->rank && field->rank != 0)
5072 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
5073 "the same rank as '%s' or be a scalar",
5074 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5075 &field->where, gfc_current_intrinsic_arg[1]->name);
5076 return false;
5079 if (mask->rank == field->rank)
5081 int i;
5082 for (i = 0; i < field->rank; i++)
5083 if (! identical_dimen_shape (mask, i, field, i))
5085 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
5086 "must have identical shape.",
5087 gfc_current_intrinsic_arg[2]->name,
5088 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5089 &field->where);
5093 return true;
5097 bool
5098 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
5100 if (!type_check (x, 0, BT_CHARACTER))
5101 return false;
5103 if (!same_type_check (x, 0, y, 1))
5104 return false;
5106 if (z != NULL && !type_check (z, 2, BT_LOGICAL))
5107 return false;
5109 if (!kind_check (kind, 3, BT_INTEGER))
5110 return false;
5111 if (kind && !gfc_notify_std (GFC_STD_F2003, "'%s' intrinsic "
5112 "with KIND argument at %L",
5113 gfc_current_intrinsic, &kind->where))
5114 return false;
5116 return true;
5120 bool
5121 gfc_check_trim (gfc_expr *x)
5123 if (!type_check (x, 0, BT_CHARACTER))
5124 return false;
5126 if (!scalar_check (x, 0))
5127 return false;
5129 return true;
5133 bool
5134 gfc_check_ttynam (gfc_expr *unit)
5136 if (!scalar_check (unit, 0))
5137 return false;
5139 if (!type_check (unit, 0, BT_INTEGER))
5140 return false;
5142 return true;
5146 /* Common check function for the half a dozen intrinsics that have a
5147 single real argument. */
5149 bool
5150 gfc_check_x (gfc_expr *x)
5152 if (!type_check (x, 0, BT_REAL))
5153 return false;
5155 return true;
5159 /************* Check functions for intrinsic subroutines *************/
5161 bool
5162 gfc_check_cpu_time (gfc_expr *time)
5164 if (!scalar_check (time, 0))
5165 return false;
5167 if (!type_check (time, 0, BT_REAL))
5168 return false;
5170 if (!variable_check (time, 0, false))
5171 return false;
5173 return true;
5177 bool
5178 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
5179 gfc_expr *zone, gfc_expr *values)
5181 if (date != NULL)
5183 if (!type_check (date, 0, BT_CHARACTER))
5184 return false;
5185 if (!kind_value_check (date, 0, gfc_default_character_kind))
5186 return false;
5187 if (!scalar_check (date, 0))
5188 return false;
5189 if (!variable_check (date, 0, false))
5190 return false;
5193 if (time != NULL)
5195 if (!type_check (time, 1, BT_CHARACTER))
5196 return false;
5197 if (!kind_value_check (time, 1, gfc_default_character_kind))
5198 return false;
5199 if (!scalar_check (time, 1))
5200 return false;
5201 if (!variable_check (time, 1, false))
5202 return false;
5205 if (zone != NULL)
5207 if (!type_check (zone, 2, BT_CHARACTER))
5208 return false;
5209 if (!kind_value_check (zone, 2, gfc_default_character_kind))
5210 return false;
5211 if (!scalar_check (zone, 2))
5212 return false;
5213 if (!variable_check (zone, 2, false))
5214 return false;
5217 if (values != NULL)
5219 if (!type_check (values, 3, BT_INTEGER))
5220 return false;
5221 if (!array_check (values, 3))
5222 return false;
5223 if (!rank_check (values, 3, 1))
5224 return false;
5225 if (!variable_check (values, 3, false))
5226 return false;
5229 return true;
5233 bool
5234 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
5235 gfc_expr *to, gfc_expr *topos)
5237 if (!type_check (from, 0, BT_INTEGER))
5238 return false;
5240 if (!type_check (frompos, 1, BT_INTEGER))
5241 return false;
5243 if (!type_check (len, 2, BT_INTEGER))
5244 return false;
5246 if (!same_type_check (from, 0, to, 3))
5247 return false;
5249 if (!variable_check (to, 3, false))
5250 return false;
5252 if (!type_check (topos, 4, BT_INTEGER))
5253 return false;
5255 if (!nonnegative_check ("frompos", frompos))
5256 return false;
5258 if (!nonnegative_check ("topos", topos))
5259 return false;
5261 if (!nonnegative_check ("len", len))
5262 return false;
5264 if (!less_than_bitsize2 ("from", from, "frompos", frompos, "len", len))
5265 return false;
5267 if (!less_than_bitsize2 ("to", to, "topos", topos, "len", len))
5268 return false;
5270 return true;
5274 bool
5275 gfc_check_random_number (gfc_expr *harvest)
5277 if (!type_check (harvest, 0, BT_REAL))
5278 return false;
5280 if (!variable_check (harvest, 0, false))
5281 return false;
5283 return true;
5287 bool
5288 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
5290 unsigned int nargs = 0, kiss_size;
5291 locus *where = NULL;
5292 mpz_t put_size, get_size;
5293 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
5295 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
5297 /* Keep the number of bytes in sync with kiss_size in
5298 libgfortran/intrinsics/random.c. */
5299 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
5301 if (size != NULL)
5303 if (size->expr_type != EXPR_VARIABLE
5304 || !size->symtree->n.sym->attr.optional)
5305 nargs++;
5307 if (!scalar_check (size, 0))
5308 return false;
5310 if (!type_check (size, 0, BT_INTEGER))
5311 return false;
5313 if (!variable_check (size, 0, false))
5314 return false;
5316 if (!kind_value_check (size, 0, gfc_default_integer_kind))
5317 return false;
5320 if (put != NULL)
5322 if (put->expr_type != EXPR_VARIABLE
5323 || !put->symtree->n.sym->attr.optional)
5325 nargs++;
5326 where = &put->where;
5329 if (!array_check (put, 1))
5330 return false;
5332 if (!rank_check (put, 1, 1))
5333 return false;
5335 if (!type_check (put, 1, BT_INTEGER))
5336 return false;
5338 if (!kind_value_check (put, 1, gfc_default_integer_kind))
5339 return false;
5341 if (gfc_array_size (put, &put_size)
5342 && mpz_get_ui (put_size) < kiss_size)
5343 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5344 "too small (%i/%i)",
5345 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5346 where, (int) mpz_get_ui (put_size), kiss_size);
5349 if (get != NULL)
5351 if (get->expr_type != EXPR_VARIABLE
5352 || !get->symtree->n.sym->attr.optional)
5354 nargs++;
5355 where = &get->where;
5358 if (!array_check (get, 2))
5359 return false;
5361 if (!rank_check (get, 2, 1))
5362 return false;
5364 if (!type_check (get, 2, BT_INTEGER))
5365 return false;
5367 if (!variable_check (get, 2, false))
5368 return false;
5370 if (!kind_value_check (get, 2, gfc_default_integer_kind))
5371 return false;
5373 if (gfc_array_size (get, &get_size)
5374 && mpz_get_ui (get_size) < kiss_size)
5375 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
5376 "too small (%i/%i)",
5377 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
5378 where, (int) mpz_get_ui (get_size), kiss_size);
5381 /* RANDOM_SEED may not have more than one non-optional argument. */
5382 if (nargs > 1)
5383 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
5385 return true;
5389 bool
5390 gfc_check_second_sub (gfc_expr *time)
5392 if (!scalar_check (time, 0))
5393 return false;
5395 if (!type_check (time, 0, BT_REAL))
5396 return false;
5398 if (!kind_value_check (time, 0, 4))
5399 return false;
5401 return true;
5405 /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
5406 variables in Fortran 95. In Fortran 2003 and later, they can be of any
5407 kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
5408 count_max are all optional arguments */
5410 bool
5411 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
5412 gfc_expr *count_max)
5414 if (count != NULL)
5416 if (!scalar_check (count, 0))
5417 return false;
5419 if (!type_check (count, 0, BT_INTEGER))
5420 return false;
5422 if (count->ts.kind != gfc_default_integer_kind
5423 && !gfc_notify_std (GFC_STD_F2003, "COUNT argument to "
5424 "SYSTEM_CLOCK at %L has non-default kind",
5425 &count->where))
5426 return false;
5428 if (!variable_check (count, 0, false))
5429 return false;
5432 if (count_rate != NULL)
5434 if (!scalar_check (count_rate, 1))
5435 return false;
5437 if (!variable_check (count_rate, 1, false))
5438 return false;
5440 if (count_rate->ts.type == BT_REAL)
5442 if (!gfc_notify_std (GFC_STD_F2003, "Real COUNT_RATE argument to "
5443 "SYSTEM_CLOCK at %L", &count_rate->where))
5444 return false;
5446 else
5448 if (!type_check (count_rate, 1, BT_INTEGER))
5449 return false;
5451 if (count_rate->ts.kind != gfc_default_integer_kind
5452 && !gfc_notify_std (GFC_STD_F2003, "COUNT_RATE argument to "
5453 "SYSTEM_CLOCK at %L has non-default kind",
5454 &count_rate->where))
5455 return false;
5460 if (count_max != NULL)
5462 if (!scalar_check (count_max, 2))
5463 return false;
5465 if (!type_check (count_max, 2, BT_INTEGER))
5466 return false;
5468 if (count_max->ts.kind != gfc_default_integer_kind
5469 && !gfc_notify_std (GFC_STD_F2003, "COUNT_MAX argument to "
5470 "SYSTEM_CLOCK at %L has non-default kind",
5471 &count_max->where))
5472 return false;
5474 if (!variable_check (count_max, 2, false))
5475 return false;
5478 return true;
5482 bool
5483 gfc_check_irand (gfc_expr *x)
5485 if (x == NULL)
5486 return true;
5488 if (!scalar_check (x, 0))
5489 return false;
5491 if (!type_check (x, 0, BT_INTEGER))
5492 return false;
5494 if (!kind_value_check (x, 0, 4))
5495 return false;
5497 return true;
5501 bool
5502 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
5504 if (!scalar_check (seconds, 0))
5505 return false;
5506 if (!type_check (seconds, 0, BT_INTEGER))
5507 return false;
5509 if (!int_or_proc_check (handler, 1))
5510 return false;
5511 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5512 return false;
5514 if (status == NULL)
5515 return true;
5517 if (!scalar_check (status, 2))
5518 return false;
5519 if (!type_check (status, 2, BT_INTEGER))
5520 return false;
5521 if (!kind_value_check (status, 2, gfc_default_integer_kind))
5522 return false;
5524 return true;
5528 bool
5529 gfc_check_rand (gfc_expr *x)
5531 if (x == NULL)
5532 return true;
5534 if (!scalar_check (x, 0))
5535 return false;
5537 if (!type_check (x, 0, BT_INTEGER))
5538 return false;
5540 if (!kind_value_check (x, 0, 4))
5541 return false;
5543 return true;
5547 bool
5548 gfc_check_srand (gfc_expr *x)
5550 if (!scalar_check (x, 0))
5551 return false;
5553 if (!type_check (x, 0, BT_INTEGER))
5554 return false;
5556 if (!kind_value_check (x, 0, 4))
5557 return false;
5559 return true;
5563 bool
5564 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
5566 if (!scalar_check (time, 0))
5567 return false;
5568 if (!type_check (time, 0, BT_INTEGER))
5569 return false;
5571 if (!type_check (result, 1, BT_CHARACTER))
5572 return false;
5573 if (!kind_value_check (result, 1, gfc_default_character_kind))
5574 return false;
5576 return true;
5580 bool
5581 gfc_check_dtime_etime (gfc_expr *x)
5583 if (!array_check (x, 0))
5584 return false;
5586 if (!rank_check (x, 0, 1))
5587 return false;
5589 if (!variable_check (x, 0, false))
5590 return false;
5592 if (!type_check (x, 0, BT_REAL))
5593 return false;
5595 if (!kind_value_check (x, 0, 4))
5596 return false;
5598 return true;
5602 bool
5603 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
5605 if (!array_check (values, 0))
5606 return false;
5608 if (!rank_check (values, 0, 1))
5609 return false;
5611 if (!variable_check (values, 0, false))
5612 return false;
5614 if (!type_check (values, 0, BT_REAL))
5615 return false;
5617 if (!kind_value_check (values, 0, 4))
5618 return false;
5620 if (!scalar_check (time, 1))
5621 return false;
5623 if (!type_check (time, 1, BT_REAL))
5624 return false;
5626 if (!kind_value_check (time, 1, 4))
5627 return false;
5629 return true;
5633 bool
5634 gfc_check_fdate_sub (gfc_expr *date)
5636 if (!type_check (date, 0, BT_CHARACTER))
5637 return false;
5638 if (!kind_value_check (date, 0, gfc_default_character_kind))
5639 return false;
5641 return true;
5645 bool
5646 gfc_check_gerror (gfc_expr *msg)
5648 if (!type_check (msg, 0, BT_CHARACTER))
5649 return false;
5650 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5651 return false;
5653 return true;
5657 bool
5658 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
5660 if (!type_check (cwd, 0, BT_CHARACTER))
5661 return false;
5662 if (!kind_value_check (cwd, 0, gfc_default_character_kind))
5663 return false;
5665 if (status == NULL)
5666 return true;
5668 if (!scalar_check (status, 1))
5669 return false;
5671 if (!type_check (status, 1, BT_INTEGER))
5672 return false;
5674 return true;
5678 bool
5679 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
5681 if (!type_check (pos, 0, BT_INTEGER))
5682 return false;
5684 if (pos->ts.kind > gfc_default_integer_kind)
5686 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
5687 "not wider than the default kind (%d)",
5688 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5689 &pos->where, gfc_default_integer_kind);
5690 return false;
5693 if (!type_check (value, 1, BT_CHARACTER))
5694 return false;
5695 if (!kind_value_check (value, 1, gfc_default_character_kind))
5696 return false;
5698 return true;
5702 bool
5703 gfc_check_getlog (gfc_expr *msg)
5705 if (!type_check (msg, 0, BT_CHARACTER))
5706 return false;
5707 if (!kind_value_check (msg, 0, gfc_default_character_kind))
5708 return false;
5710 return true;
5714 bool
5715 gfc_check_exit (gfc_expr *status)
5717 if (status == NULL)
5718 return true;
5720 if (!type_check (status, 0, BT_INTEGER))
5721 return false;
5723 if (!scalar_check (status, 0))
5724 return false;
5726 return true;
5730 bool
5731 gfc_check_flush (gfc_expr *unit)
5733 if (unit == NULL)
5734 return true;
5736 if (!type_check (unit, 0, BT_INTEGER))
5737 return false;
5739 if (!scalar_check (unit, 0))
5740 return false;
5742 return true;
5746 bool
5747 gfc_check_free (gfc_expr *i)
5749 if (!type_check (i, 0, BT_INTEGER))
5750 return false;
5752 if (!scalar_check (i, 0))
5753 return false;
5755 return true;
5759 bool
5760 gfc_check_hostnm (gfc_expr *name)
5762 if (!type_check (name, 0, BT_CHARACTER))
5763 return false;
5764 if (!kind_value_check (name, 0, gfc_default_character_kind))
5765 return false;
5767 return true;
5771 bool
5772 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
5774 if (!type_check (name, 0, BT_CHARACTER))
5775 return false;
5776 if (!kind_value_check (name, 0, gfc_default_character_kind))
5777 return false;
5779 if (status == NULL)
5780 return true;
5782 if (!scalar_check (status, 1))
5783 return false;
5785 if (!type_check (status, 1, BT_INTEGER))
5786 return false;
5788 return true;
5792 bool
5793 gfc_check_itime_idate (gfc_expr *values)
5795 if (!array_check (values, 0))
5796 return false;
5798 if (!rank_check (values, 0, 1))
5799 return false;
5801 if (!variable_check (values, 0, false))
5802 return false;
5804 if (!type_check (values, 0, BT_INTEGER))
5805 return false;
5807 if (!kind_value_check (values, 0, gfc_default_integer_kind))
5808 return false;
5810 return true;
5814 bool
5815 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
5817 if (!type_check (time, 0, BT_INTEGER))
5818 return false;
5820 if (!kind_value_check (time, 0, gfc_default_integer_kind))
5821 return false;
5823 if (!scalar_check (time, 0))
5824 return false;
5826 if (!array_check (values, 1))
5827 return false;
5829 if (!rank_check (values, 1, 1))
5830 return false;
5832 if (!variable_check (values, 1, false))
5833 return false;
5835 if (!type_check (values, 1, BT_INTEGER))
5836 return false;
5838 if (!kind_value_check (values, 1, gfc_default_integer_kind))
5839 return false;
5841 return true;
5845 bool
5846 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
5848 if (!scalar_check (unit, 0))
5849 return false;
5851 if (!type_check (unit, 0, BT_INTEGER))
5852 return false;
5854 if (!type_check (name, 1, BT_CHARACTER))
5855 return false;
5856 if (!kind_value_check (name, 1, gfc_default_character_kind))
5857 return false;
5859 return true;
5863 bool
5864 gfc_check_isatty (gfc_expr *unit)
5866 if (unit == NULL)
5867 return false;
5869 if (!type_check (unit, 0, BT_INTEGER))
5870 return false;
5872 if (!scalar_check (unit, 0))
5873 return false;
5875 return true;
5879 bool
5880 gfc_check_isnan (gfc_expr *x)
5882 if (!type_check (x, 0, BT_REAL))
5883 return false;
5885 return true;
5889 bool
5890 gfc_check_perror (gfc_expr *string)
5892 if (!type_check (string, 0, BT_CHARACTER))
5893 return false;
5894 if (!kind_value_check (string, 0, gfc_default_character_kind))
5895 return false;
5897 return true;
5901 bool
5902 gfc_check_umask (gfc_expr *mask)
5904 if (!type_check (mask, 0, BT_INTEGER))
5905 return false;
5907 if (!scalar_check (mask, 0))
5908 return false;
5910 return true;
5914 bool
5915 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
5917 if (!type_check (mask, 0, BT_INTEGER))
5918 return false;
5920 if (!scalar_check (mask, 0))
5921 return false;
5923 if (old == NULL)
5924 return true;
5926 if (!scalar_check (old, 1))
5927 return false;
5929 if (!type_check (old, 1, BT_INTEGER))
5930 return false;
5932 return true;
5936 bool
5937 gfc_check_unlink (gfc_expr *name)
5939 if (!type_check (name, 0, BT_CHARACTER))
5940 return false;
5941 if (!kind_value_check (name, 0, gfc_default_character_kind))
5942 return false;
5944 return true;
5948 bool
5949 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
5951 if (!type_check (name, 0, BT_CHARACTER))
5952 return false;
5953 if (!kind_value_check (name, 0, gfc_default_character_kind))
5954 return false;
5956 if (status == NULL)
5957 return true;
5959 if (!scalar_check (status, 1))
5960 return false;
5962 if (!type_check (status, 1, BT_INTEGER))
5963 return false;
5965 return true;
5969 bool
5970 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
5972 if (!scalar_check (number, 0))
5973 return false;
5974 if (!type_check (number, 0, BT_INTEGER))
5975 return false;
5977 if (!int_or_proc_check (handler, 1))
5978 return false;
5979 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5980 return false;
5982 return true;
5986 bool
5987 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
5989 if (!scalar_check (number, 0))
5990 return false;
5991 if (!type_check (number, 0, BT_INTEGER))
5992 return false;
5994 if (!int_or_proc_check (handler, 1))
5995 return false;
5996 if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
5997 return false;
5999 if (status == NULL)
6000 return true;
6002 if (!type_check (status, 2, BT_INTEGER))
6003 return false;
6004 if (!scalar_check (status, 2))
6005 return false;
6007 return true;
6011 bool
6012 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
6014 if (!type_check (cmd, 0, BT_CHARACTER))
6015 return false;
6016 if (!kind_value_check (cmd, 0, gfc_default_character_kind))
6017 return false;
6019 if (!scalar_check (status, 1))
6020 return false;
6022 if (!type_check (status, 1, BT_INTEGER))
6023 return false;
6025 if (!kind_value_check (status, 1, gfc_default_integer_kind))
6026 return false;
6028 return true;
6032 /* This is used for the GNU intrinsics AND, OR and XOR. */
6033 bool
6034 gfc_check_and (gfc_expr *i, gfc_expr *j)
6036 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
6038 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6039 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
6040 gfc_current_intrinsic, &i->where);
6041 return false;
6044 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
6046 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
6047 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
6048 gfc_current_intrinsic, &j->where);
6049 return false;
6052 if (i->ts.type != j->ts.type)
6054 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
6055 "have the same type", gfc_current_intrinsic_arg[0]->name,
6056 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6057 &j->where);
6058 return false;
6061 if (!scalar_check (i, 0))
6062 return false;
6064 if (!scalar_check (j, 1))
6065 return false;
6067 return true;
6071 bool
6072 gfc_check_storage_size (gfc_expr *a, gfc_expr *kind)
6074 if (a->ts.type == BT_ASSUMED)
6076 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)",
6077 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
6078 &a->where);
6079 return false;
6082 if (a->ts.type == BT_PROCEDURE)
6084 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be a "
6085 "procedure", gfc_current_intrinsic_arg[0]->name,
6086 gfc_current_intrinsic, &a->where);
6087 return false;
6090 if (kind == NULL)
6091 return true;
6093 if (!type_check (kind, 1, BT_INTEGER))
6094 return false;
6096 if (!scalar_check (kind, 1))
6097 return false;
6099 if (kind->expr_type != EXPR_CONSTANT)
6101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
6102 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6103 &kind->where);
6104 return false;
6107 return true;