2011-04-04 Tobias Burnus <burnus@net-b.de>
[official-gcc.git] / gcc / fortran / check.c
blobbb56122137e44f0f042def053be36cb16b601606
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* These functions check to see if an argument list is compatible with
24 a particular intrinsic function or subroutine. Presence of
25 required arguments has already been established, the argument list
26 has been sorted into the right order and has NULL arguments in the
27 correct places for missing optional arguments. */
29 #include "config.h"
30 #include "system.h"
31 #include "flags.h"
32 #include "gfortran.h"
33 #include "intrinsic.h"
34 #include "constructor.h"
37 /* Make sure an expression is a scalar. */
39 static gfc_try
40 scalar_check (gfc_expr *e, int n)
42 if (e->rank == 0)
43 return SUCCESS;
45 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
46 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
47 &e->where);
49 return FAILURE;
53 /* Check the type of an expression. */
55 static gfc_try
56 type_check (gfc_expr *e, int n, bt type)
58 if (e->ts.type == type)
59 return SUCCESS;
61 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
62 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
63 &e->where, gfc_basic_typename (type));
65 return FAILURE;
69 /* Check that the expression is a numeric type. */
71 static gfc_try
72 numeric_check (gfc_expr *e, int n)
74 if (gfc_numeric_ts (&e->ts))
75 return SUCCESS;
77 /* If the expression has not got a type, check if its namespace can
78 offer a default type. */
79 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
80 && e->symtree->n.sym->ts.type == BT_UNKNOWN
81 && gfc_set_default_type (e->symtree->n.sym, 0,
82 e->symtree->n.sym->ns) == SUCCESS
83 && gfc_numeric_ts (&e->symtree->n.sym->ts))
85 e->ts = e->symtree->n.sym->ts;
86 return SUCCESS;
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 FAILURE;
97 /* Check that an expression is integer or real. */
99 static gfc_try
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 FAILURE;
110 return SUCCESS;
114 /* Check that an expression is real or complex. */
116 static gfc_try
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 FAILURE;
127 return SUCCESS;
131 /* Check that an expression is INTEGER or PROCEDURE. */
133 static gfc_try
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 FAILURE;
144 return SUCCESS;
148 /* Check that the expression is an optional constant integer
149 and that it specifies a valid kind for that type. */
151 static gfc_try
152 kind_check (gfc_expr *k, int n, bt type)
154 int kind;
156 if (k == NULL)
157 return SUCCESS;
159 if (type_check (k, n, BT_INTEGER) == FAILURE)
160 return FAILURE;
162 if (scalar_check (k, n) == FAILURE)
163 return FAILURE;
165 if (k->expr_type != EXPR_CONSTANT)
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 FAILURE;
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 FAILURE;
181 return SUCCESS;
185 /* Make sure the expression is a double precision real. */
187 static gfc_try
188 double_check (gfc_expr *d, int n)
190 if (type_check (d, n, BT_REAL) == FAILURE)
191 return FAILURE;
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 FAILURE;
201 return SUCCESS;
205 /* Check whether an expression is a coarray (without array designator). */
207 static bool
208 is_coarray (gfc_expr *e)
210 bool coarray = false;
211 gfc_ref *ref;
213 if (e->expr_type != EXPR_VARIABLE)
214 return false;
216 coarray = e->symtree->n.sym->attr.codimension;
218 for (ref = e->ref; ref; ref = ref->next)
220 if (ref->type == REF_COMPONENT)
221 coarray = ref->u.c.component->attr.codimension;
222 else if (ref->type != REF_ARRAY || ref->u.ar.dimen != 0)
223 coarray = false;
224 else if (ref->type == REF_ARRAY && ref->u.ar.codimen != 0)
226 int n;
227 for (n = 0; n < ref->u.ar.codimen; n++)
228 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
229 coarray = false;
233 return coarray;
237 static gfc_try
238 coarray_check (gfc_expr *e, int n)
240 if (!is_coarray (e))
242 gfc_error ("Expected coarray variable as '%s' argument to the %s "
243 "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
244 gfc_current_intrinsic, &e->where);
245 return FAILURE;
248 return SUCCESS;
252 /* Make sure the expression is a logical array. */
254 static gfc_try
255 logical_array_check (gfc_expr *array, int n)
257 if (array->ts.type != BT_LOGICAL || array->rank == 0)
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
260 "array", gfc_current_intrinsic_arg[n]->name,
261 gfc_current_intrinsic, &array->where);
262 return FAILURE;
265 return SUCCESS;
269 /* Make sure an expression is an array. */
271 static gfc_try
272 array_check (gfc_expr *e, int n)
274 if (e->rank != 0)
275 return SUCCESS;
277 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
278 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
279 &e->where);
281 return FAILURE;
285 /* If expr is a constant, then check to ensure that it is greater than
286 of equal to zero. */
288 static gfc_try
289 nonnegative_check (const char *arg, gfc_expr *expr)
291 int i;
293 if (expr->expr_type == EXPR_CONSTANT)
295 gfc_extract_int (expr, &i);
296 if (i < 0)
298 gfc_error ("'%s' at %L must be nonnegative", arg, &expr->where);
299 return FAILURE;
303 return SUCCESS;
307 /* If expr2 is constant, then check that the value is less than
308 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
310 static gfc_try
311 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
312 gfc_expr *expr2, bool or_equal)
314 int i2, i3;
316 if (expr2->expr_type == EXPR_CONSTANT)
318 gfc_extract_int (expr2, &i2);
319 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, 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 FAILURE;
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 FAILURE;
341 return SUCCESS;
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 gfc_try
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 SUCCESS;
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 FAILURE;
366 return SUCCESS;
370 /* If expr2 and expr3 are constants, then check that the value is less than
371 or equal to bit_size(expr1). */
373 static gfc_try
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 FAILURE;
394 return SUCCESS;
397 /* Make sure two expressions have the same type. */
399 static gfc_try
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 SUCCESS;
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 FAILURE;
414 /* Make sure that an expression has a certain (nonzero) rank. */
416 static gfc_try
417 rank_check (gfc_expr *e, int n, int rank)
419 if (e->rank == rank)
420 return SUCCESS;
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 FAILURE;
430 /* Make sure a variable expression is not an optional dummy argument. */
432 static gfc_try
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 SUCCESS;
448 /* Check for ALLOCATABLE attribute. */
450 static gfc_try
451 allocatable_check (gfc_expr *e, int n)
453 symbol_attribute attr;
455 attr = gfc_variable_attr (e, NULL);
456 if (!attr.allocatable)
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 FAILURE;
464 return SUCCESS;
468 /* Check that an expression has a particular kind. */
470 static gfc_try
471 kind_value_check (gfc_expr *e, int n, int k)
473 if (e->ts.kind == k)
474 return SUCCESS;
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 FAILURE;
484 /* Make sure an expression is a variable. */
486 static gfc_try
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_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
495 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
496 &e->where);
497 return FAILURE;
500 if (e->expr_type == EXPR_VARIABLE
501 && e->symtree->n.sym->attr.flavor != FL_PARAMETER
502 && (allow_proc
503 || !e->symtree->n.sym->attr.function
504 || (e->symtree->n.sym == e->symtree->n.sym->result
505 && (e->symtree->n.sym == gfc_current_ns->proc_name
506 || (gfc_current_ns->parent
507 && e->symtree->n.sym
508 == gfc_current_ns->parent->proc_name)))))
509 return SUCCESS;
511 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
512 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
514 return FAILURE;
518 /* Check the common DIM parameter for correctness. */
520 static gfc_try
521 dim_check (gfc_expr *dim, int n, bool optional)
523 if (dim == NULL)
524 return SUCCESS;
526 if (type_check (dim, n, BT_INTEGER) == FAILURE)
527 return FAILURE;
529 if (scalar_check (dim, n) == FAILURE)
530 return FAILURE;
532 if (!optional && nonoptional_check (dim, n) == FAILURE)
533 return FAILURE;
535 return SUCCESS;
539 /* If a coarray DIM parameter is a constant, make sure that it is greater than
540 zero and less than or equal to the corank of the given array. */
542 static gfc_try
543 dim_corank_check (gfc_expr *dim, gfc_expr *array)
545 gfc_array_ref *ar;
546 int corank;
548 gcc_assert (array->expr_type == EXPR_VARIABLE);
550 if (dim->expr_type != EXPR_CONSTANT)
551 return SUCCESS;
553 ar = gfc_find_array_ref (array);
554 corank = ar->as->corank;
556 if (mpz_cmp_ui (dim->value.integer, 1) < 0
557 || mpz_cmp_ui (dim->value.integer, corank) > 0)
559 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
560 "codimension index", gfc_current_intrinsic, &dim->where);
562 return FAILURE;
565 return SUCCESS;
569 /* If a DIM parameter is a constant, make sure that it is greater than
570 zero and less than or equal to the rank of the given array. If
571 allow_assumed is zero then dim must be less than the rank of the array
572 for assumed size arrays. */
574 static gfc_try
575 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
577 gfc_array_ref *ar;
578 int rank;
580 if (dim == NULL)
581 return SUCCESS;
583 if (dim->expr_type != EXPR_CONSTANT)
584 return SUCCESS;
586 if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
587 && array->value.function.isym->id == GFC_ISYM_SPREAD)
588 rank = array->rank + 1;
589 else
590 rank = array->rank;
592 if (array->expr_type == EXPR_VARIABLE)
594 ar = gfc_find_array_ref (array);
595 if (ar->as->type == AS_ASSUMED_SIZE
596 && !allow_assumed
597 && ar->type != AR_ELEMENT
598 && ar->type != AR_SECTION)
599 rank--;
602 if (mpz_cmp_ui (dim->value.integer, 1) < 0
603 || mpz_cmp_ui (dim->value.integer, rank) > 0)
605 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
606 "dimension index", gfc_current_intrinsic, &dim->where);
608 return FAILURE;
611 return SUCCESS;
615 /* Compare the size of a along dimension ai with the size of b along
616 dimension bi, returning 0 if they are known not to be identical,
617 and 1 if they are identical, or if this cannot be determined. */
619 static int
620 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
622 mpz_t a_size, b_size;
623 int ret;
625 gcc_assert (a->rank > ai);
626 gcc_assert (b->rank > bi);
628 ret = 1;
630 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
632 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
634 if (mpz_cmp (a_size, b_size) != 0)
635 ret = 0;
637 mpz_clear (b_size);
639 mpz_clear (a_size);
641 return ret;
644 /* Calculate the length of a character variable, including substrings.
645 Strip away parentheses if necessary. Return -1 if no length could
646 be determined. */
648 static long
649 gfc_var_strlen (const gfc_expr *a)
651 gfc_ref *ra;
653 while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
654 a = a->value.op.op1;
656 for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
659 if (ra)
661 long start_a, end_a;
663 if (ra->u.ss.start->expr_type == EXPR_CONSTANT
664 && ra->u.ss.end->expr_type == EXPR_CONSTANT)
666 start_a = mpz_get_si (ra->u.ss.start->value.integer);
667 end_a = mpz_get_si (ra->u.ss.end->value.integer);
668 return end_a - start_a + 1;
670 else if (gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
671 return 1;
672 else
673 return -1;
676 if (a->ts.u.cl && a->ts.u.cl->length
677 && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
678 return mpz_get_si (a->ts.u.cl->length->value.integer);
679 else if (a->expr_type == EXPR_CONSTANT
680 && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
681 return a->value.character.length;
682 else
683 return -1;
687 /* Check whether two character expressions have the same length;
688 returns SUCCESS if they have or if the length cannot be determined,
689 otherwise return FAILURE and raise a gfc_error. */
691 gfc_try
692 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
694 long len_a, len_b;
696 len_a = gfc_var_strlen(a);
697 len_b = gfc_var_strlen(b);
699 if (len_a == -1 || len_b == -1 || len_a == len_b)
700 return SUCCESS;
701 else
703 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
704 len_a, len_b, name, &a->where);
705 return FAILURE;
710 /***** Check functions *****/
712 /* Check subroutine suitable for intrinsics taking a real argument and
713 a kind argument for the result. */
715 static gfc_try
716 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
718 if (type_check (a, 0, BT_REAL) == FAILURE)
719 return FAILURE;
720 if (kind_check (kind, 1, type) == FAILURE)
721 return FAILURE;
723 return SUCCESS;
727 /* Check subroutine suitable for ceiling, floor and nint. */
729 gfc_try
730 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
732 return check_a_kind (a, kind, BT_INTEGER);
736 /* Check subroutine suitable for aint, anint. */
738 gfc_try
739 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
741 return check_a_kind (a, kind, BT_REAL);
745 gfc_try
746 gfc_check_abs (gfc_expr *a)
748 if (numeric_check (a, 0) == FAILURE)
749 return FAILURE;
751 return SUCCESS;
755 gfc_try
756 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
758 if (type_check (a, 0, BT_INTEGER) == FAILURE)
759 return FAILURE;
760 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
761 return FAILURE;
763 return SUCCESS;
767 gfc_try
768 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
770 if (type_check (name, 0, BT_CHARACTER) == FAILURE
771 || scalar_check (name, 0) == FAILURE)
772 return FAILURE;
773 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
774 return FAILURE;
776 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
777 || scalar_check (mode, 1) == FAILURE)
778 return FAILURE;
779 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
780 return FAILURE;
782 return SUCCESS;
786 gfc_try
787 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
789 if (logical_array_check (mask, 0) == FAILURE)
790 return FAILURE;
792 if (dim_check (dim, 1, false) == FAILURE)
793 return FAILURE;
795 if (dim_rank_check (dim, mask, 0) == FAILURE)
796 return FAILURE;
798 return SUCCESS;
802 gfc_try
803 gfc_check_allocated (gfc_expr *array)
805 if (variable_check (array, 0, false) == FAILURE)
806 return FAILURE;
807 if (allocatable_check (array, 0) == FAILURE)
808 return FAILURE;
810 return SUCCESS;
814 /* Common check function where the first argument must be real or
815 integer and the second argument must be the same as the first. */
817 gfc_try
818 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
820 if (int_or_real_check (a, 0) == FAILURE)
821 return FAILURE;
823 if (a->ts.type != p->ts.type)
825 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
826 "have the same type", gfc_current_intrinsic_arg[0]->name,
827 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
828 &p->where);
829 return FAILURE;
832 if (a->ts.kind != p->ts.kind)
834 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
835 &p->where) == FAILURE)
836 return FAILURE;
839 return SUCCESS;
843 gfc_try
844 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
846 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
847 return FAILURE;
849 return SUCCESS;
853 gfc_try
854 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
856 symbol_attribute attr1, attr2;
857 int i;
858 gfc_try t;
859 locus *where;
861 where = &pointer->where;
863 if (pointer->expr_type == EXPR_VARIABLE || pointer->expr_type == EXPR_FUNCTION)
864 attr1 = gfc_expr_attr (pointer);
865 else if (pointer->expr_type == EXPR_NULL)
866 goto null_arg;
867 else
868 gcc_assert (0); /* Pointer must be a variable or a function. */
870 if (!attr1.pointer && !attr1.proc_pointer)
872 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
873 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
874 &pointer->where);
875 return FAILURE;
878 /* Target argument is optional. */
879 if (target == NULL)
880 return SUCCESS;
882 where = &target->where;
883 if (target->expr_type == EXPR_NULL)
884 goto null_arg;
886 if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
887 attr2 = gfc_expr_attr (target);
888 else
890 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
891 "or target VARIABLE or FUNCTION",
892 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
893 &target->where);
894 return FAILURE;
897 if (attr1.pointer && !attr2.pointer && !attr2.target)
899 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
900 "or a TARGET", gfc_current_intrinsic_arg[1]->name,
901 gfc_current_intrinsic, &target->where);
902 return FAILURE;
905 t = SUCCESS;
906 if (same_type_check (pointer, 0, target, 1) == FAILURE)
907 t = FAILURE;
908 if (rank_check (target, 0, pointer->rank) == FAILURE)
909 t = FAILURE;
910 if (target->rank > 0)
912 for (i = 0; i < target->rank; i++)
913 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
915 gfc_error ("Array section with a vector subscript at %L shall not "
916 "be the target of a pointer",
917 &target->where);
918 t = FAILURE;
919 break;
922 return t;
924 null_arg:
926 gfc_error ("NULL pointer at %L is not permitted as actual argument "
927 "of '%s' intrinsic function", where, gfc_current_intrinsic);
928 return FAILURE;
933 gfc_try
934 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
936 /* gfc_notify_std would be a wast of time as the return value
937 is seemingly used only for the generic resolution. The error
938 will be: Too many arguments. */
939 if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
940 return FAILURE;
942 return gfc_check_atan2 (y, x);
946 gfc_try
947 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
949 if (type_check (y, 0, BT_REAL) == FAILURE)
950 return FAILURE;
951 if (same_type_check (y, 0, x, 1) == FAILURE)
952 return FAILURE;
954 return SUCCESS;
958 /* BESJN and BESYN functions. */
960 gfc_try
961 gfc_check_besn (gfc_expr *n, gfc_expr *x)
963 if (type_check (n, 0, BT_INTEGER) == FAILURE)
964 return FAILURE;
965 if (n->expr_type == EXPR_CONSTANT)
967 int i;
968 gfc_extract_int (n, &i);
969 if (i < 0 && gfc_notify_std (GFC_STD_GNU, "Extension: Negative argument "
970 "N at %L", &n->where) == FAILURE)
971 return FAILURE;
974 if (type_check (x, 1, BT_REAL) == FAILURE)
975 return FAILURE;
977 return SUCCESS;
981 /* Transformational version of the Bessel JN and YN functions. */
983 gfc_try
984 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
986 if (type_check (n1, 0, BT_INTEGER) == FAILURE)
987 return FAILURE;
988 if (scalar_check (n1, 0) == FAILURE)
989 return FAILURE;
990 if (nonnegative_check("N1", n1) == FAILURE)
991 return FAILURE;
993 if (type_check (n2, 1, BT_INTEGER) == FAILURE)
994 return FAILURE;
995 if (scalar_check (n2, 1) == FAILURE)
996 return FAILURE;
997 if (nonnegative_check("N2", n2) == FAILURE)
998 return FAILURE;
1000 if (type_check (x, 2, BT_REAL) == FAILURE)
1001 return FAILURE;
1002 if (scalar_check (x, 2) == FAILURE)
1003 return FAILURE;
1005 return SUCCESS;
1009 gfc_try
1010 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1012 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1013 return FAILURE;
1015 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1016 return FAILURE;
1018 return SUCCESS;
1022 gfc_try
1023 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1025 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1026 return FAILURE;
1028 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1029 return FAILURE;
1031 if (nonnegative_check ("pos", pos) == FAILURE)
1032 return FAILURE;
1034 if (less_than_bitsize1 ("i", i, "pos", pos, false) == FAILURE)
1035 return FAILURE;
1037 return SUCCESS;
1041 gfc_try
1042 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1044 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1045 return FAILURE;
1046 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
1047 return FAILURE;
1049 return SUCCESS;
1053 gfc_try
1054 gfc_check_chdir (gfc_expr *dir)
1056 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1057 return FAILURE;
1058 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1059 return FAILURE;
1061 return SUCCESS;
1065 gfc_try
1066 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1068 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1069 return FAILURE;
1070 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1071 return FAILURE;
1073 if (status == NULL)
1074 return SUCCESS;
1076 if (type_check (status, 1, BT_INTEGER) == FAILURE)
1077 return FAILURE;
1078 if (scalar_check (status, 1) == FAILURE)
1079 return FAILURE;
1081 return SUCCESS;
1085 gfc_try
1086 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
1088 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1089 return FAILURE;
1090 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1091 return FAILURE;
1093 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1094 return FAILURE;
1095 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1096 return FAILURE;
1098 return SUCCESS;
1102 gfc_try
1103 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
1105 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1106 return FAILURE;
1107 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1108 return FAILURE;
1110 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1111 return FAILURE;
1112 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1113 return FAILURE;
1115 if (status == NULL)
1116 return SUCCESS;
1118 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1119 return FAILURE;
1121 if (scalar_check (status, 2) == FAILURE)
1122 return FAILURE;
1124 return SUCCESS;
1128 gfc_try
1129 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1131 if (numeric_check (x, 0) == FAILURE)
1132 return FAILURE;
1134 if (y != NULL)
1136 if (numeric_check (y, 1) == FAILURE)
1137 return FAILURE;
1139 if (x->ts.type == BT_COMPLEX)
1141 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1142 "present if 'x' is COMPLEX",
1143 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1144 &y->where);
1145 return FAILURE;
1148 if (y->ts.type == BT_COMPLEX)
1150 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1151 "of either REAL or INTEGER",
1152 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1153 &y->where);
1154 return FAILURE;
1159 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
1160 return FAILURE;
1162 return SUCCESS;
1166 gfc_try
1167 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1169 if (int_or_real_check (x, 0) == FAILURE)
1170 return FAILURE;
1171 if (scalar_check (x, 0) == FAILURE)
1172 return FAILURE;
1174 if (int_or_real_check (y, 1) == FAILURE)
1175 return FAILURE;
1176 if (scalar_check (y, 1) == FAILURE)
1177 return FAILURE;
1179 return SUCCESS;
1183 gfc_try
1184 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1186 if (logical_array_check (mask, 0) == FAILURE)
1187 return FAILURE;
1188 if (dim_check (dim, 1, false) == FAILURE)
1189 return FAILURE;
1190 if (dim_rank_check (dim, mask, 0) == FAILURE)
1191 return FAILURE;
1192 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1193 return FAILURE;
1194 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1195 "with KIND argument at %L",
1196 gfc_current_intrinsic, &kind->where) == FAILURE)
1197 return FAILURE;
1199 return SUCCESS;
1203 gfc_try
1204 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1206 if (array_check (array, 0) == FAILURE)
1207 return FAILURE;
1209 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1210 return FAILURE;
1212 if (dim_check (dim, 2, true) == FAILURE)
1213 return FAILURE;
1215 if (dim_rank_check (dim, array, false) == FAILURE)
1216 return FAILURE;
1218 if (array->rank == 1 || shift->rank == 0)
1220 if (scalar_check (shift, 1) == FAILURE)
1221 return FAILURE;
1223 else if (shift->rank == array->rank - 1)
1225 int d;
1226 if (!dim)
1227 d = 1;
1228 else if (dim->expr_type == EXPR_CONSTANT)
1229 gfc_extract_int (dim, &d);
1230 else
1231 d = -1;
1233 if (d > 0)
1235 int i, j;
1236 for (i = 0, j = 0; i < array->rank; i++)
1237 if (i != d - 1)
1239 if (!identical_dimen_shape (array, i, shift, j))
1241 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1242 "invalid shape in dimension %d (%ld/%ld)",
1243 gfc_current_intrinsic_arg[1]->name,
1244 gfc_current_intrinsic, &shift->where, i + 1,
1245 mpz_get_si (array->shape[i]),
1246 mpz_get_si (shift->shape[j]));
1247 return FAILURE;
1250 j += 1;
1254 else
1256 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1257 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1258 gfc_current_intrinsic, &shift->where, array->rank - 1);
1259 return FAILURE;
1262 return SUCCESS;
1266 gfc_try
1267 gfc_check_ctime (gfc_expr *time)
1269 if (scalar_check (time, 0) == FAILURE)
1270 return FAILURE;
1272 if (type_check (time, 0, BT_INTEGER) == FAILURE)
1273 return FAILURE;
1275 return SUCCESS;
1279 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1281 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
1282 return FAILURE;
1284 return SUCCESS;
1287 gfc_try
1288 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1290 if (numeric_check (x, 0) == FAILURE)
1291 return FAILURE;
1293 if (y != NULL)
1295 if (numeric_check (y, 1) == FAILURE)
1296 return FAILURE;
1298 if (x->ts.type == BT_COMPLEX)
1300 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1301 "present if 'x' is COMPLEX",
1302 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1303 &y->where);
1304 return FAILURE;
1307 if (y->ts.type == BT_COMPLEX)
1309 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1310 "of either REAL or INTEGER",
1311 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1312 &y->where);
1313 return FAILURE;
1317 return SUCCESS;
1321 gfc_try
1322 gfc_check_dble (gfc_expr *x)
1324 if (numeric_check (x, 0) == FAILURE)
1325 return FAILURE;
1327 return SUCCESS;
1331 gfc_try
1332 gfc_check_digits (gfc_expr *x)
1334 if (int_or_real_check (x, 0) == FAILURE)
1335 return FAILURE;
1337 return SUCCESS;
1341 gfc_try
1342 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1344 switch (vector_a->ts.type)
1346 case BT_LOGICAL:
1347 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1348 return FAILURE;
1349 break;
1351 case BT_INTEGER:
1352 case BT_REAL:
1353 case BT_COMPLEX:
1354 if (numeric_check (vector_b, 1) == FAILURE)
1355 return FAILURE;
1356 break;
1358 default:
1359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1360 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1361 gfc_current_intrinsic, &vector_a->where);
1362 return FAILURE;
1365 if (rank_check (vector_a, 0, 1) == FAILURE)
1366 return FAILURE;
1368 if (rank_check (vector_b, 1, 1) == FAILURE)
1369 return FAILURE;
1371 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1373 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1374 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0]->name,
1375 gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1376 return FAILURE;
1379 return SUCCESS;
1383 gfc_try
1384 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1386 if (type_check (x, 0, BT_REAL) == FAILURE
1387 || type_check (y, 1, BT_REAL) == FAILURE)
1388 return FAILURE;
1390 if (x->ts.kind != gfc_default_real_kind)
1392 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1393 "real", gfc_current_intrinsic_arg[0]->name,
1394 gfc_current_intrinsic, &x->where);
1395 return FAILURE;
1398 if (y->ts.kind != gfc_default_real_kind)
1400 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1401 "real", gfc_current_intrinsic_arg[1]->name,
1402 gfc_current_intrinsic, &y->where);
1403 return FAILURE;
1406 return SUCCESS;
1410 gfc_try
1411 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1413 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1414 return FAILURE;
1416 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1417 return FAILURE;
1419 if (same_type_check (i, 0, j, 1) == FAILURE)
1420 return FAILURE;
1422 if (type_check (shift, 2, BT_INTEGER) == FAILURE)
1423 return FAILURE;
1425 if (nonnegative_check ("SHIFT", shift) == FAILURE)
1426 return FAILURE;
1428 if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
1429 return FAILURE;
1431 return SUCCESS;
1435 gfc_try
1436 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1437 gfc_expr *dim)
1439 if (array_check (array, 0) == FAILURE)
1440 return FAILURE;
1442 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1443 return FAILURE;
1445 if (dim_check (dim, 3, true) == FAILURE)
1446 return FAILURE;
1448 if (dim_rank_check (dim, array, false) == FAILURE)
1449 return FAILURE;
1451 if (array->rank == 1 || shift->rank == 0)
1453 if (scalar_check (shift, 1) == FAILURE)
1454 return FAILURE;
1456 else if (shift->rank == array->rank - 1)
1458 int d;
1459 if (!dim)
1460 d = 1;
1461 else if (dim->expr_type == EXPR_CONSTANT)
1462 gfc_extract_int (dim, &d);
1463 else
1464 d = -1;
1466 if (d > 0)
1468 int i, j;
1469 for (i = 0, j = 0; i < array->rank; i++)
1470 if (i != d - 1)
1472 if (!identical_dimen_shape (array, i, shift, j))
1474 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1475 "invalid shape in dimension %d (%ld/%ld)",
1476 gfc_current_intrinsic_arg[1]->name,
1477 gfc_current_intrinsic, &shift->where, i + 1,
1478 mpz_get_si (array->shape[i]),
1479 mpz_get_si (shift->shape[j]));
1480 return FAILURE;
1483 j += 1;
1487 else
1489 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1490 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1491 gfc_current_intrinsic, &shift->where, array->rank - 1);
1492 return FAILURE;
1495 if (boundary != NULL)
1497 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1498 return FAILURE;
1500 if (array->rank == 1 || boundary->rank == 0)
1502 if (scalar_check (boundary, 2) == FAILURE)
1503 return FAILURE;
1505 else if (boundary->rank == array->rank - 1)
1507 if (gfc_check_conformance (shift, boundary,
1508 "arguments '%s' and '%s' for "
1509 "intrinsic %s",
1510 gfc_current_intrinsic_arg[1]->name,
1511 gfc_current_intrinsic_arg[2]->name,
1512 gfc_current_intrinsic ) == FAILURE)
1513 return FAILURE;
1515 else
1517 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1518 "rank %d or be a scalar",
1519 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1520 &shift->where, array->rank - 1);
1521 return FAILURE;
1525 return SUCCESS;
1528 gfc_try
1529 gfc_check_float (gfc_expr *a)
1531 if (type_check (a, 0, BT_INTEGER) == FAILURE)
1532 return FAILURE;
1534 if ((a->ts.kind != gfc_default_integer_kind)
1535 && gfc_notify_std (GFC_STD_GNU, "GNU extension: non-default INTEGER "
1536 "kind argument to %s intrinsic at %L",
1537 gfc_current_intrinsic, &a->where) == FAILURE )
1538 return FAILURE;
1540 return SUCCESS;
1543 /* A single complex argument. */
1545 gfc_try
1546 gfc_check_fn_c (gfc_expr *a)
1548 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1549 return FAILURE;
1551 return SUCCESS;
1554 /* A single real argument. */
1556 gfc_try
1557 gfc_check_fn_r (gfc_expr *a)
1559 if (type_check (a, 0, BT_REAL) == FAILURE)
1560 return FAILURE;
1562 return SUCCESS;
1565 /* A single double argument. */
1567 gfc_try
1568 gfc_check_fn_d (gfc_expr *a)
1570 if (double_check (a, 0) == FAILURE)
1571 return FAILURE;
1573 return SUCCESS;
1576 /* A single real or complex argument. */
1578 gfc_try
1579 gfc_check_fn_rc (gfc_expr *a)
1581 if (real_or_complex_check (a, 0) == FAILURE)
1582 return FAILURE;
1584 return SUCCESS;
1588 gfc_try
1589 gfc_check_fn_rc2008 (gfc_expr *a)
1591 if (real_or_complex_check (a, 0) == FAILURE)
1592 return FAILURE;
1594 if (a->ts.type == BT_COMPLEX
1595 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: COMPLEX argument '%s' "
1596 "argument of '%s' intrinsic at %L",
1597 gfc_current_intrinsic_arg[0]->name,
1598 gfc_current_intrinsic, &a->where) == FAILURE)
1599 return FAILURE;
1601 return SUCCESS;
1605 gfc_try
1606 gfc_check_fnum (gfc_expr *unit)
1608 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1609 return FAILURE;
1611 if (scalar_check (unit, 0) == FAILURE)
1612 return FAILURE;
1614 return SUCCESS;
1618 gfc_try
1619 gfc_check_huge (gfc_expr *x)
1621 if (int_or_real_check (x, 0) == FAILURE)
1622 return FAILURE;
1624 return SUCCESS;
1628 gfc_try
1629 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1631 if (type_check (x, 0, BT_REAL) == FAILURE)
1632 return FAILURE;
1633 if (same_type_check (x, 0, y, 1) == FAILURE)
1634 return FAILURE;
1636 return SUCCESS;
1640 /* Check that the single argument is an integer. */
1642 gfc_try
1643 gfc_check_i (gfc_expr *i)
1645 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1646 return FAILURE;
1648 return SUCCESS;
1652 gfc_try
1653 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1655 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1656 return FAILURE;
1658 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1659 return FAILURE;
1661 if (i->ts.kind != j->ts.kind)
1663 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1664 &i->where) == FAILURE)
1665 return FAILURE;
1668 return SUCCESS;
1672 gfc_try
1673 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1675 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1676 return FAILURE;
1678 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1679 return FAILURE;
1681 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1682 return FAILURE;
1684 if (nonnegative_check ("pos", pos) == FAILURE)
1685 return FAILURE;
1687 if (nonnegative_check ("len", len) == FAILURE)
1688 return FAILURE;
1690 if (less_than_bitsize2 ("i", i, "pos", pos, "len", len) == FAILURE)
1691 return FAILURE;
1693 return SUCCESS;
1697 gfc_try
1698 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1700 int i;
1702 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1703 return FAILURE;
1705 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1706 return FAILURE;
1708 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1709 "with KIND argument at %L",
1710 gfc_current_intrinsic, &kind->where) == FAILURE)
1711 return FAILURE;
1713 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1715 gfc_expr *start;
1716 gfc_expr *end;
1717 gfc_ref *ref;
1719 /* Substring references don't have the charlength set. */
1720 ref = c->ref;
1721 while (ref && ref->type != REF_SUBSTRING)
1722 ref = ref->next;
1724 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1726 if (!ref)
1728 /* Check that the argument is length one. Non-constant lengths
1729 can't be checked here, so assume they are ok. */
1730 if (c->ts.u.cl && c->ts.u.cl->length)
1732 /* If we already have a length for this expression then use it. */
1733 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
1734 return SUCCESS;
1735 i = mpz_get_si (c->ts.u.cl->length->value.integer);
1737 else
1738 return SUCCESS;
1740 else
1742 start = ref->u.ss.start;
1743 end = ref->u.ss.end;
1745 gcc_assert (start);
1746 if (end == NULL || end->expr_type != EXPR_CONSTANT
1747 || start->expr_type != EXPR_CONSTANT)
1748 return SUCCESS;
1750 i = mpz_get_si (end->value.integer) + 1
1751 - mpz_get_si (start->value.integer);
1754 else
1755 return SUCCESS;
1757 if (i != 1)
1759 gfc_error ("Argument of %s at %L must be of length one",
1760 gfc_current_intrinsic, &c->where);
1761 return FAILURE;
1764 return SUCCESS;
1768 gfc_try
1769 gfc_check_idnint (gfc_expr *a)
1771 if (double_check (a, 0) == FAILURE)
1772 return FAILURE;
1774 return SUCCESS;
1778 gfc_try
1779 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1781 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1782 return FAILURE;
1784 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1785 return FAILURE;
1787 if (i->ts.kind != j->ts.kind)
1789 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1790 &i->where) == FAILURE)
1791 return FAILURE;
1794 return SUCCESS;
1798 gfc_try
1799 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1800 gfc_expr *kind)
1802 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1803 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1804 return FAILURE;
1806 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1807 return FAILURE;
1809 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1810 return FAILURE;
1811 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1812 "with KIND argument at %L",
1813 gfc_current_intrinsic, &kind->where) == FAILURE)
1814 return FAILURE;
1816 if (string->ts.kind != substring->ts.kind)
1818 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1819 "kind as '%s'", gfc_current_intrinsic_arg[1]->name,
1820 gfc_current_intrinsic, &substring->where,
1821 gfc_current_intrinsic_arg[0]->name);
1822 return FAILURE;
1825 return SUCCESS;
1829 gfc_try
1830 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1832 if (numeric_check (x, 0) == FAILURE)
1833 return FAILURE;
1835 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1836 return FAILURE;
1838 return SUCCESS;
1842 gfc_try
1843 gfc_check_intconv (gfc_expr *x)
1845 if (numeric_check (x, 0) == FAILURE)
1846 return FAILURE;
1848 return SUCCESS;
1852 gfc_try
1853 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1855 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1856 return FAILURE;
1858 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1859 return FAILURE;
1861 if (i->ts.kind != j->ts.kind)
1863 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1864 &i->where) == FAILURE)
1865 return FAILURE;
1868 return SUCCESS;
1872 gfc_try
1873 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1875 if (type_check (i, 0, BT_INTEGER) == FAILURE
1876 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1877 return FAILURE;
1879 return SUCCESS;
1883 gfc_try
1884 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1886 if (type_check (i, 0, BT_INTEGER) == FAILURE
1887 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1888 return FAILURE;
1890 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1891 return FAILURE;
1893 return SUCCESS;
1897 gfc_try
1898 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1900 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1901 return FAILURE;
1903 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1904 return FAILURE;
1906 return SUCCESS;
1910 gfc_try
1911 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1913 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1914 return FAILURE;
1916 if (scalar_check (pid, 0) == FAILURE)
1917 return FAILURE;
1919 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1920 return FAILURE;
1922 if (scalar_check (sig, 1) == FAILURE)
1923 return FAILURE;
1925 if (status == NULL)
1926 return SUCCESS;
1928 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1929 return FAILURE;
1931 if (scalar_check (status, 2) == FAILURE)
1932 return FAILURE;
1934 return SUCCESS;
1938 gfc_try
1939 gfc_check_kind (gfc_expr *x)
1941 if (x->ts.type == BT_DERIVED)
1943 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1944 "non-derived type", gfc_current_intrinsic_arg[0]->name,
1945 gfc_current_intrinsic, &x->where);
1946 return FAILURE;
1949 return SUCCESS;
1953 gfc_try
1954 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1956 if (array_check (array, 0) == FAILURE)
1957 return FAILURE;
1959 if (dim_check (dim, 1, false) == FAILURE)
1960 return FAILURE;
1962 if (dim_rank_check (dim, array, 1) == FAILURE)
1963 return FAILURE;
1965 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1966 return FAILURE;
1967 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1968 "with KIND argument at %L",
1969 gfc_current_intrinsic, &kind->where) == FAILURE)
1970 return FAILURE;
1972 return SUCCESS;
1976 gfc_try
1977 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
1979 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
1981 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
1982 return FAILURE;
1985 if (coarray_check (coarray, 0) == FAILURE)
1986 return FAILURE;
1988 if (dim != NULL)
1990 if (dim_check (dim, 1, false) == FAILURE)
1991 return FAILURE;
1993 if (dim_corank_check (dim, coarray) == FAILURE)
1994 return FAILURE;
1997 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1998 return FAILURE;
2000 return SUCCESS;
2004 gfc_try
2005 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2007 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
2008 return FAILURE;
2010 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2011 return FAILURE;
2012 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2013 "with KIND argument at %L",
2014 gfc_current_intrinsic, &kind->where) == FAILURE)
2015 return FAILURE;
2017 return SUCCESS;
2021 gfc_try
2022 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2024 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2025 return FAILURE;
2026 if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
2027 return FAILURE;
2029 if (type_check (b, 1, BT_CHARACTER) == FAILURE)
2030 return FAILURE;
2031 if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
2032 return FAILURE;
2034 return SUCCESS;
2038 gfc_try
2039 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2041 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2042 return FAILURE;
2043 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2044 return FAILURE;
2046 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2047 return FAILURE;
2048 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2049 return FAILURE;
2051 return SUCCESS;
2055 gfc_try
2056 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2058 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2059 return FAILURE;
2060 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2061 return FAILURE;
2063 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2064 return FAILURE;
2065 if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
2066 return FAILURE;
2068 if (status == NULL)
2069 return SUCCESS;
2071 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2072 return FAILURE;
2074 if (scalar_check (status, 2) == FAILURE)
2075 return FAILURE;
2077 return SUCCESS;
2081 gfc_try
2082 gfc_check_loc (gfc_expr *expr)
2084 return variable_check (expr, 0, true);
2088 gfc_try
2089 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2091 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2092 return FAILURE;
2093 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2094 return FAILURE;
2096 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2097 return FAILURE;
2098 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2099 return FAILURE;
2101 return SUCCESS;
2105 gfc_try
2106 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2108 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2109 return FAILURE;
2110 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2111 return FAILURE;
2113 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2114 return FAILURE;
2115 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2116 return FAILURE;
2118 if (status == NULL)
2119 return SUCCESS;
2121 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2122 return FAILURE;
2124 if (scalar_check (status, 2) == FAILURE)
2125 return FAILURE;
2127 return SUCCESS;
2131 gfc_try
2132 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2134 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
2135 return FAILURE;
2136 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
2137 return FAILURE;
2139 return SUCCESS;
2143 /* Min/max family. */
2145 static gfc_try
2146 min_max_args (gfc_actual_arglist *arg)
2148 if (arg == NULL || arg->next == NULL)
2150 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2151 gfc_current_intrinsic, gfc_current_intrinsic_where);
2152 return FAILURE;
2155 return SUCCESS;
2159 static gfc_try
2160 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2162 gfc_actual_arglist *arg, *tmp;
2164 gfc_expr *x;
2165 int m, n;
2167 if (min_max_args (arglist) == FAILURE)
2168 return FAILURE;
2170 for (arg = arglist, n=1; arg; arg = arg->next, n++)
2172 x = arg->expr;
2173 if (x->ts.type != type || x->ts.kind != kind)
2175 if (x->ts.type == type)
2177 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
2178 "kinds at %L", &x->where) == FAILURE)
2179 return FAILURE;
2181 else
2183 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2184 "%s(%d)", n, gfc_current_intrinsic, &x->where,
2185 gfc_basic_typename (type), kind);
2186 return FAILURE;
2190 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2191 if (gfc_check_conformance (tmp->expr, x,
2192 "arguments 'a%d' and 'a%d' for "
2193 "intrinsic '%s'", m, n,
2194 gfc_current_intrinsic) == FAILURE)
2195 return FAILURE;
2198 return SUCCESS;
2202 gfc_try
2203 gfc_check_min_max (gfc_actual_arglist *arg)
2205 gfc_expr *x;
2207 if (min_max_args (arg) == FAILURE)
2208 return FAILURE;
2210 x = arg->expr;
2212 if (x->ts.type == BT_CHARACTER)
2214 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2215 "with CHARACTER argument at %L",
2216 gfc_current_intrinsic, &x->where) == FAILURE)
2217 return FAILURE;
2219 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2221 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2222 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2223 return FAILURE;
2226 return check_rest (x->ts.type, x->ts.kind, arg);
2230 gfc_try
2231 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2233 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2237 gfc_try
2238 gfc_check_min_max_real (gfc_actual_arglist *arg)
2240 return check_rest (BT_REAL, gfc_default_real_kind, arg);
2244 gfc_try
2245 gfc_check_min_max_double (gfc_actual_arglist *arg)
2247 return check_rest (BT_REAL, gfc_default_double_kind, arg);
2251 /* End of min/max family. */
2253 gfc_try
2254 gfc_check_malloc (gfc_expr *size)
2256 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2257 return FAILURE;
2259 if (scalar_check (size, 0) == FAILURE)
2260 return FAILURE;
2262 return SUCCESS;
2266 gfc_try
2267 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2269 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2271 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2272 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2273 gfc_current_intrinsic, &matrix_a->where);
2274 return FAILURE;
2277 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2279 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2280 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2281 gfc_current_intrinsic, &matrix_b->where);
2282 return FAILURE;
2285 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2286 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2288 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2289 gfc_current_intrinsic, &matrix_a->where,
2290 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2291 return FAILURE;
2294 switch (matrix_a->rank)
2296 case 1:
2297 if (rank_check (matrix_b, 1, 2) == FAILURE)
2298 return FAILURE;
2299 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2300 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2302 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2303 "and '%s' at %L for intrinsic matmul",
2304 gfc_current_intrinsic_arg[0]->name,
2305 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2306 return FAILURE;
2308 break;
2310 case 2:
2311 if (matrix_b->rank != 2)
2313 if (rank_check (matrix_b, 1, 1) == FAILURE)
2314 return FAILURE;
2316 /* matrix_b has rank 1 or 2 here. Common check for the cases
2317 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2318 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2319 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2321 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2322 "dimension 1 for argument '%s' at %L for intrinsic "
2323 "matmul", gfc_current_intrinsic_arg[0]->name,
2324 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2325 return FAILURE;
2327 break;
2329 default:
2330 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2331 "1 or 2", gfc_current_intrinsic_arg[0]->name,
2332 gfc_current_intrinsic, &matrix_a->where);
2333 return FAILURE;
2336 return SUCCESS;
2340 /* Whoever came up with this interface was probably on something.
2341 The possibilities for the occupation of the second and third
2342 parameters are:
2344 Arg #2 Arg #3
2345 NULL NULL
2346 DIM NULL
2347 MASK NULL
2348 NULL MASK minloc(array, mask=m)
2349 DIM MASK
2351 I.e. in the case of minloc(array,mask), mask will be in the second
2352 position of the argument list and we'll have to fix that up. */
2354 gfc_try
2355 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
2357 gfc_expr *a, *m, *d;
2359 a = ap->expr;
2360 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
2361 return FAILURE;
2363 d = ap->next->expr;
2364 m = ap->next->next->expr;
2366 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2367 && ap->next->name == NULL)
2369 m = d;
2370 d = NULL;
2371 ap->next->expr = NULL;
2372 ap->next->next->expr = m;
2375 if (dim_check (d, 1, false) == FAILURE)
2376 return FAILURE;
2378 if (dim_rank_check (d, a, 0) == FAILURE)
2379 return FAILURE;
2381 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2382 return FAILURE;
2384 if (m != NULL
2385 && gfc_check_conformance (a, m,
2386 "arguments '%s' and '%s' for intrinsic %s",
2387 gfc_current_intrinsic_arg[0]->name,
2388 gfc_current_intrinsic_arg[2]->name,
2389 gfc_current_intrinsic ) == FAILURE)
2390 return FAILURE;
2392 return SUCCESS;
2396 /* Similar to minloc/maxloc, the argument list might need to be
2397 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2398 difference is that MINLOC/MAXLOC take an additional KIND argument.
2399 The possibilities are:
2401 Arg #2 Arg #3
2402 NULL NULL
2403 DIM NULL
2404 MASK NULL
2405 NULL MASK minval(array, mask=m)
2406 DIM MASK
2408 I.e. in the case of minval(array,mask), mask will be in the second
2409 position of the argument list and we'll have to fix that up. */
2411 static gfc_try
2412 check_reduction (gfc_actual_arglist *ap)
2414 gfc_expr *a, *m, *d;
2416 a = ap->expr;
2417 d = ap->next->expr;
2418 m = ap->next->next->expr;
2420 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2421 && ap->next->name == NULL)
2423 m = d;
2424 d = NULL;
2425 ap->next->expr = NULL;
2426 ap->next->next->expr = m;
2429 if (dim_check (d, 1, false) == FAILURE)
2430 return FAILURE;
2432 if (dim_rank_check (d, a, 0) == FAILURE)
2433 return FAILURE;
2435 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2436 return FAILURE;
2438 if (m != NULL
2439 && gfc_check_conformance (a, m,
2440 "arguments '%s' and '%s' for intrinsic %s",
2441 gfc_current_intrinsic_arg[0]->name,
2442 gfc_current_intrinsic_arg[2]->name,
2443 gfc_current_intrinsic) == FAILURE)
2444 return FAILURE;
2446 return SUCCESS;
2450 gfc_try
2451 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2453 if (int_or_real_check (ap->expr, 0) == FAILURE
2454 || array_check (ap->expr, 0) == FAILURE)
2455 return FAILURE;
2457 return check_reduction (ap);
2461 gfc_try
2462 gfc_check_product_sum (gfc_actual_arglist *ap)
2464 if (numeric_check (ap->expr, 0) == FAILURE
2465 || array_check (ap->expr, 0) == FAILURE)
2466 return FAILURE;
2468 return check_reduction (ap);
2472 /* For IANY, IALL and IPARITY. */
2474 gfc_try
2475 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
2477 int k;
2479 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2480 return FAILURE;
2482 if (nonnegative_check ("I", i) == FAILURE)
2483 return FAILURE;
2485 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2486 return FAILURE;
2488 if (kind)
2489 gfc_extract_int (kind, &k);
2490 else
2491 k = gfc_default_integer_kind;
2493 if (less_than_bitsizekind ("I", i, k) == FAILURE)
2494 return FAILURE;
2496 return SUCCESS;
2500 gfc_try
2501 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
2503 if (ap->expr->ts.type != BT_INTEGER)
2505 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2506 gfc_current_intrinsic_arg[0]->name,
2507 gfc_current_intrinsic, &ap->expr->where);
2508 return FAILURE;
2511 if (array_check (ap->expr, 0) == FAILURE)
2512 return FAILURE;
2514 return check_reduction (ap);
2518 gfc_try
2519 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2521 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2522 return FAILURE;
2524 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2525 return FAILURE;
2527 if (tsource->ts.type == BT_CHARACTER)
2528 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2530 return SUCCESS;
2534 gfc_try
2535 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
2537 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2538 return FAILURE;
2540 if (type_check (j, 1, BT_INTEGER) == FAILURE)
2541 return FAILURE;
2543 if (type_check (mask, 2, BT_INTEGER) == FAILURE)
2544 return FAILURE;
2546 if (same_type_check (i, 0, j, 1) == FAILURE)
2547 return FAILURE;
2549 if (same_type_check (i, 0, mask, 2) == FAILURE)
2550 return FAILURE;
2552 return SUCCESS;
2556 gfc_try
2557 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2559 if (variable_check (from, 0, false) == FAILURE)
2560 return FAILURE;
2561 if (allocatable_check (from, 0) == FAILURE)
2562 return FAILURE;
2564 if (variable_check (to, 1, false) == FAILURE)
2565 return FAILURE;
2566 if (allocatable_check (to, 1) == FAILURE)
2567 return FAILURE;
2569 if (same_type_check (to, 1, from, 0) == FAILURE)
2570 return FAILURE;
2572 if (to->rank != from->rank)
2574 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2575 "have the same rank %d/%d", gfc_current_intrinsic_arg[0]->name,
2576 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2577 &to->where, from->rank, to->rank);
2578 return FAILURE;
2581 if (to->ts.kind != from->ts.kind)
2583 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2584 "be of the same kind %d/%d",
2585 gfc_current_intrinsic_arg[0]->name,
2586 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2587 &to->where, from->ts.kind, to->ts.kind);
2588 return FAILURE;
2591 return SUCCESS;
2595 gfc_try
2596 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2598 if (type_check (x, 0, BT_REAL) == FAILURE)
2599 return FAILURE;
2601 if (type_check (s, 1, BT_REAL) == FAILURE)
2602 return FAILURE;
2604 return SUCCESS;
2608 gfc_try
2609 gfc_check_new_line (gfc_expr *a)
2611 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2612 return FAILURE;
2614 return SUCCESS;
2618 gfc_try
2619 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
2621 if (type_check (array, 0, BT_REAL) == FAILURE)
2622 return FAILURE;
2624 if (array_check (array, 0) == FAILURE)
2625 return FAILURE;
2627 if (dim_rank_check (dim, array, false) == FAILURE)
2628 return FAILURE;
2630 return SUCCESS;
2633 gfc_try
2634 gfc_check_null (gfc_expr *mold)
2636 symbol_attribute attr;
2638 if (mold == NULL)
2639 return SUCCESS;
2641 if (variable_check (mold, 0, true) == FAILURE)
2642 return FAILURE;
2644 attr = gfc_variable_attr (mold, NULL);
2646 if (!attr.pointer && !attr.proc_pointer)
2648 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2649 gfc_current_intrinsic_arg[0]->name,
2650 gfc_current_intrinsic, &mold->where);
2651 return FAILURE;
2654 return SUCCESS;
2658 gfc_try
2659 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2661 if (array_check (array, 0) == FAILURE)
2662 return FAILURE;
2664 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2665 return FAILURE;
2667 if (gfc_check_conformance (array, mask,
2668 "arguments '%s' and '%s' for intrinsic '%s'",
2669 gfc_current_intrinsic_arg[0]->name,
2670 gfc_current_intrinsic_arg[1]->name,
2671 gfc_current_intrinsic) == FAILURE)
2672 return FAILURE;
2674 if (vector != NULL)
2676 mpz_t array_size, vector_size;
2677 bool have_array_size, have_vector_size;
2679 if (same_type_check (array, 0, vector, 2) == FAILURE)
2680 return FAILURE;
2682 if (rank_check (vector, 2, 1) == FAILURE)
2683 return FAILURE;
2685 /* VECTOR requires at least as many elements as MASK
2686 has .TRUE. values. */
2687 have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2688 have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2690 if (have_vector_size
2691 && (mask->expr_type == EXPR_ARRAY
2692 || (mask->expr_type == EXPR_CONSTANT
2693 && have_array_size)))
2695 int mask_true_values = 0;
2697 if (mask->expr_type == EXPR_ARRAY)
2699 gfc_constructor *mask_ctor;
2700 mask_ctor = gfc_constructor_first (mask->value.constructor);
2701 while (mask_ctor)
2703 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2705 mask_true_values = 0;
2706 break;
2709 if (mask_ctor->expr->value.logical)
2710 mask_true_values++;
2712 mask_ctor = gfc_constructor_next (mask_ctor);
2715 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2716 mask_true_values = mpz_get_si (array_size);
2718 if (mpz_get_si (vector_size) < mask_true_values)
2720 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2721 "provide at least as many elements as there "
2722 "are .TRUE. values in '%s' (%ld/%d)",
2723 gfc_current_intrinsic_arg[2]->name,
2724 gfc_current_intrinsic, &vector->where,
2725 gfc_current_intrinsic_arg[1]->name,
2726 mpz_get_si (vector_size), mask_true_values);
2727 return FAILURE;
2731 if (have_array_size)
2732 mpz_clear (array_size);
2733 if (have_vector_size)
2734 mpz_clear (vector_size);
2737 return SUCCESS;
2741 gfc_try
2742 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
2744 if (type_check (mask, 0, BT_LOGICAL) == FAILURE)
2745 return FAILURE;
2747 if (array_check (mask, 0) == FAILURE)
2748 return FAILURE;
2750 if (dim_rank_check (dim, mask, false) == FAILURE)
2751 return FAILURE;
2753 return SUCCESS;
2757 gfc_try
2758 gfc_check_precision (gfc_expr *x)
2760 if (real_or_complex_check (x, 0) == FAILURE)
2761 return FAILURE;
2763 return SUCCESS;
2767 gfc_try
2768 gfc_check_present (gfc_expr *a)
2770 gfc_symbol *sym;
2772 if (variable_check (a, 0, true) == FAILURE)
2773 return FAILURE;
2775 sym = a->symtree->n.sym;
2776 if (!sym->attr.dummy)
2778 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2779 "dummy variable", gfc_current_intrinsic_arg[0]->name,
2780 gfc_current_intrinsic, &a->where);
2781 return FAILURE;
2784 if (!sym->attr.optional)
2786 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2787 "an OPTIONAL dummy variable",
2788 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
2789 &a->where);
2790 return FAILURE;
2793 /* 13.14.82 PRESENT(A)
2794 ......
2795 Argument. A shall be the name of an optional dummy argument that is
2796 accessible in the subprogram in which the PRESENT function reference
2797 appears... */
2799 if (a->ref != NULL
2800 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2801 && a->ref->u.ar.type == AR_FULL))
2803 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2804 "subobject of '%s'", gfc_current_intrinsic_arg[0]->name,
2805 gfc_current_intrinsic, &a->where, sym->name);
2806 return FAILURE;
2809 return SUCCESS;
2813 gfc_try
2814 gfc_check_radix (gfc_expr *x)
2816 if (int_or_real_check (x, 0) == FAILURE)
2817 return FAILURE;
2819 return SUCCESS;
2823 gfc_try
2824 gfc_check_range (gfc_expr *x)
2826 if (numeric_check (x, 0) == FAILURE)
2827 return FAILURE;
2829 return SUCCESS;
2833 /* real, float, sngl. */
2834 gfc_try
2835 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2837 if (numeric_check (a, 0) == FAILURE)
2838 return FAILURE;
2840 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2841 return FAILURE;
2843 return SUCCESS;
2847 gfc_try
2848 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2850 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2851 return FAILURE;
2852 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2853 return FAILURE;
2855 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2856 return FAILURE;
2857 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2858 return FAILURE;
2860 return SUCCESS;
2864 gfc_try
2865 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2867 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2868 return FAILURE;
2869 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2870 return FAILURE;
2872 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2873 return FAILURE;
2874 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2875 return FAILURE;
2877 if (status == NULL)
2878 return SUCCESS;
2880 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2881 return FAILURE;
2883 if (scalar_check (status, 2) == FAILURE)
2884 return FAILURE;
2886 return SUCCESS;
2890 gfc_try
2891 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2893 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2894 return FAILURE;
2896 if (scalar_check (x, 0) == FAILURE)
2897 return FAILURE;
2899 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2900 return FAILURE;
2902 if (scalar_check (y, 1) == FAILURE)
2903 return FAILURE;
2905 return SUCCESS;
2909 gfc_try
2910 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2911 gfc_expr *pad, gfc_expr *order)
2913 mpz_t size;
2914 mpz_t nelems;
2915 int shape_size;
2917 if (array_check (source, 0) == FAILURE)
2918 return FAILURE;
2920 if (rank_check (shape, 1, 1) == FAILURE)
2921 return FAILURE;
2923 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2924 return FAILURE;
2926 if (gfc_array_size (shape, &size) != SUCCESS)
2928 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2929 "array of constant size", &shape->where);
2930 return FAILURE;
2933 shape_size = mpz_get_ui (size);
2934 mpz_clear (size);
2936 if (shape_size <= 0)
2938 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
2939 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2940 &shape->where);
2941 return FAILURE;
2943 else if (shape_size > GFC_MAX_DIMENSIONS)
2945 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2946 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2947 return FAILURE;
2949 else if (shape->expr_type == EXPR_ARRAY)
2951 gfc_expr *e;
2952 int i, extent;
2953 for (i = 0; i < shape_size; ++i)
2955 e = gfc_constructor_lookup_expr (shape->value.constructor, i);
2956 if (e->expr_type != EXPR_CONSTANT)
2957 continue;
2959 gfc_extract_int (e, &extent);
2960 if (extent < 0)
2962 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
2963 "negative element (%d)",
2964 gfc_current_intrinsic_arg[1]->name,
2965 gfc_current_intrinsic, &e->where, extent);
2966 return FAILURE;
2971 if (pad != NULL)
2973 if (same_type_check (source, 0, pad, 2) == FAILURE)
2974 return FAILURE;
2976 if (array_check (pad, 2) == FAILURE)
2977 return FAILURE;
2980 if (order != NULL)
2982 if (array_check (order, 3) == FAILURE)
2983 return FAILURE;
2985 if (type_check (order, 3, BT_INTEGER) == FAILURE)
2986 return FAILURE;
2988 if (order->expr_type == EXPR_ARRAY)
2990 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
2991 gfc_expr *e;
2993 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
2994 perm[i] = 0;
2996 gfc_array_size (order, &size);
2997 order_size = mpz_get_ui (size);
2998 mpz_clear (size);
3000 if (order_size != shape_size)
3002 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3003 "has wrong number of elements (%d/%d)",
3004 gfc_current_intrinsic_arg[3]->name,
3005 gfc_current_intrinsic, &order->where,
3006 order_size, shape_size);
3007 return FAILURE;
3010 for (i = 1; i <= order_size; ++i)
3012 e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3013 if (e->expr_type != EXPR_CONSTANT)
3014 continue;
3016 gfc_extract_int (e, &dim);
3018 if (dim < 1 || dim > order_size)
3020 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3021 "has out-of-range dimension (%d)",
3022 gfc_current_intrinsic_arg[3]->name,
3023 gfc_current_intrinsic, &e->where, dim);
3024 return FAILURE;
3027 if (perm[dim-1] != 0)
3029 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3030 "invalid permutation of dimensions (dimension "
3031 "'%d' duplicated)",
3032 gfc_current_intrinsic_arg[3]->name,
3033 gfc_current_intrinsic, &e->where, dim);
3034 return FAILURE;
3037 perm[dim-1] = 1;
3042 if (pad == NULL && shape->expr_type == EXPR_ARRAY
3043 && gfc_is_constant_expr (shape)
3044 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3045 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3047 /* Check the match in size between source and destination. */
3048 if (gfc_array_size (source, &nelems) == SUCCESS)
3050 gfc_constructor *c;
3051 bool test;
3054 mpz_init_set_ui (size, 1);
3055 for (c = gfc_constructor_first (shape->value.constructor);
3056 c; c = gfc_constructor_next (c))
3057 mpz_mul (size, size, c->expr->value.integer);
3059 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3060 mpz_clear (nelems);
3061 mpz_clear (size);
3063 if (test)
3065 gfc_error ("Without padding, there are not enough elements "
3066 "in the intrinsic RESHAPE source at %L to match "
3067 "the shape", &source->where);
3068 return FAILURE;
3073 return SUCCESS;
3077 gfc_try
3078 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3081 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3083 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3084 "must be of a derived type",
3085 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3086 &a->where);
3087 return FAILURE;
3090 if (!gfc_type_is_extensible (a->ts.u.derived))
3092 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3093 "must be of an extensible type",
3094 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3095 &a->where);
3096 return FAILURE;
3099 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3101 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3102 "must be of a derived type",
3103 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3104 &b->where);
3105 return FAILURE;
3108 if (!gfc_type_is_extensible (b->ts.u.derived))
3110 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3111 "must be of an extensible type",
3112 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3113 &b->where);
3114 return FAILURE;
3117 return SUCCESS;
3121 gfc_try
3122 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3124 if (type_check (x, 0, BT_REAL) == FAILURE)
3125 return FAILURE;
3127 if (type_check (i, 1, BT_INTEGER) == FAILURE)
3128 return FAILURE;
3130 return SUCCESS;
3134 gfc_try
3135 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3137 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3138 return FAILURE;
3140 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
3141 return FAILURE;
3143 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3144 return FAILURE;
3146 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3147 return FAILURE;
3148 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3149 "with KIND argument at %L",
3150 gfc_current_intrinsic, &kind->where) == FAILURE)
3151 return FAILURE;
3153 if (same_type_check (x, 0, y, 1) == FAILURE)
3154 return FAILURE;
3156 return SUCCESS;
3160 gfc_try
3161 gfc_check_secnds (gfc_expr *r)
3163 if (type_check (r, 0, BT_REAL) == FAILURE)
3164 return FAILURE;
3166 if (kind_value_check (r, 0, 4) == FAILURE)
3167 return FAILURE;
3169 if (scalar_check (r, 0) == FAILURE)
3170 return FAILURE;
3172 return SUCCESS;
3176 gfc_try
3177 gfc_check_selected_char_kind (gfc_expr *name)
3179 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3180 return FAILURE;
3182 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3183 return FAILURE;
3185 if (scalar_check (name, 0) == FAILURE)
3186 return FAILURE;
3188 return SUCCESS;
3192 gfc_try
3193 gfc_check_selected_int_kind (gfc_expr *r)
3195 if (type_check (r, 0, BT_INTEGER) == FAILURE)
3196 return FAILURE;
3198 if (scalar_check (r, 0) == FAILURE)
3199 return FAILURE;
3201 return SUCCESS;
3205 gfc_try
3206 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3208 if (p == NULL && r == NULL
3209 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: SELECTED_REAL_KIND with"
3210 " neither 'P' nor 'R' argument at %L",
3211 gfc_current_intrinsic_where) == FAILURE)
3212 return FAILURE;
3214 if (p)
3216 if (type_check (p, 0, BT_INTEGER) == FAILURE)
3217 return FAILURE;
3219 if (scalar_check (p, 0) == FAILURE)
3220 return FAILURE;
3223 if (r)
3225 if (type_check (r, 1, BT_INTEGER) == FAILURE)
3226 return FAILURE;
3228 if (scalar_check (r, 1) == FAILURE)
3229 return FAILURE;
3232 if (radix)
3234 if (type_check (radix, 1, BT_INTEGER) == FAILURE)
3235 return FAILURE;
3237 if (scalar_check (radix, 1) == FAILURE)
3238 return FAILURE;
3240 if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: '%s' intrinsic with "
3241 "RADIX argument at %L", gfc_current_intrinsic,
3242 &radix->where) == FAILURE)
3243 return FAILURE;
3246 return SUCCESS;
3250 gfc_try
3251 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3253 if (type_check (x, 0, BT_REAL) == FAILURE)
3254 return FAILURE;
3256 if (type_check (i, 1, BT_INTEGER) == FAILURE)
3257 return FAILURE;
3259 return SUCCESS;
3263 gfc_try
3264 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
3266 gfc_array_ref *ar;
3268 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
3269 return SUCCESS;
3271 ar = gfc_find_array_ref (source);
3273 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
3275 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3276 "an assumed size array", &source->where);
3277 return FAILURE;
3280 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
3281 return FAILURE;
3282 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3283 "with KIND argument at %L",
3284 gfc_current_intrinsic, &kind->where) == FAILURE)
3285 return FAILURE;
3287 return SUCCESS;
3291 gfc_try
3292 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
3294 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3295 return FAILURE;
3297 if (type_check (shift, 0, BT_INTEGER) == FAILURE)
3298 return FAILURE;
3300 if (nonnegative_check ("SHIFT", shift) == FAILURE)
3301 return FAILURE;
3303 if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
3304 return FAILURE;
3306 return SUCCESS;
3310 gfc_try
3311 gfc_check_sign (gfc_expr *a, gfc_expr *b)
3313 if (int_or_real_check (a, 0) == FAILURE)
3314 return FAILURE;
3316 if (same_type_check (a, 0, b, 1) == FAILURE)
3317 return FAILURE;
3319 return SUCCESS;
3323 gfc_try
3324 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3326 if (array_check (array, 0) == FAILURE)
3327 return FAILURE;
3329 if (dim_check (dim, 1, true) == FAILURE)
3330 return FAILURE;
3332 if (dim_rank_check (dim, array, 0) == FAILURE)
3333 return FAILURE;
3335 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3336 return FAILURE;
3337 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3338 "with KIND argument at %L",
3339 gfc_current_intrinsic, &kind->where) == FAILURE)
3340 return FAILURE;
3343 return SUCCESS;
3347 gfc_try
3348 gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED)
3350 return SUCCESS;
3354 gfc_try
3355 gfc_check_c_sizeof (gfc_expr *arg)
3357 if (verify_c_interop (&arg->ts) != SUCCESS)
3359 gfc_error ("'%s' argument of '%s' intrinsic at %L must be be an "
3360 "interoperable data entity",
3361 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3362 &arg->where);
3363 return FAILURE;
3365 return SUCCESS;
3369 gfc_try
3370 gfc_check_sleep_sub (gfc_expr *seconds)
3372 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3373 return FAILURE;
3375 if (scalar_check (seconds, 0) == FAILURE)
3376 return FAILURE;
3378 return SUCCESS;
3381 gfc_try
3382 gfc_check_sngl (gfc_expr *a)
3384 if (type_check (a, 0, BT_REAL) == FAILURE)
3385 return FAILURE;
3387 if ((a->ts.kind != gfc_default_double_kind)
3388 && gfc_notify_std (GFC_STD_GNU, "GNU extension: non double precision "
3389 "REAL argument to %s intrinsic at %L",
3390 gfc_current_intrinsic, &a->where) == FAILURE)
3391 return FAILURE;
3393 return SUCCESS;
3396 gfc_try
3397 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
3399 if (source->rank >= GFC_MAX_DIMENSIONS)
3401 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3402 "than rank %d", gfc_current_intrinsic_arg[0]->name,
3403 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
3405 return FAILURE;
3408 if (dim == NULL)
3409 return FAILURE;
3411 if (dim_check (dim, 1, false) == FAILURE)
3412 return FAILURE;
3414 /* dim_rank_check() does not apply here. */
3415 if (dim
3416 && dim->expr_type == EXPR_CONSTANT
3417 && (mpz_cmp_ui (dim->value.integer, 1) < 0
3418 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
3420 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3421 "dimension index", gfc_current_intrinsic_arg[1]->name,
3422 gfc_current_intrinsic, &dim->where);
3423 return FAILURE;
3426 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
3427 return FAILURE;
3429 if (scalar_check (ncopies, 2) == FAILURE)
3430 return FAILURE;
3432 return SUCCESS;
3436 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3437 functions). */
3439 gfc_try
3440 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
3442 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3443 return FAILURE;
3445 if (scalar_check (unit, 0) == FAILURE)
3446 return FAILURE;
3448 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
3449 return FAILURE;
3450 if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
3451 return FAILURE;
3453 if (status == NULL)
3454 return SUCCESS;
3456 if (type_check (status, 2, BT_INTEGER) == FAILURE
3457 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
3458 || scalar_check (status, 2) == FAILURE)
3459 return FAILURE;
3461 return SUCCESS;
3465 gfc_try
3466 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
3468 return gfc_check_fgetputc_sub (unit, c, NULL);
3472 gfc_try
3473 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
3475 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
3476 return FAILURE;
3477 if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
3478 return FAILURE;
3480 if (status == NULL)
3481 return SUCCESS;
3483 if (type_check (status, 1, BT_INTEGER) == FAILURE
3484 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
3485 || scalar_check (status, 1) == FAILURE)
3486 return FAILURE;
3488 return SUCCESS;
3492 gfc_try
3493 gfc_check_fgetput (gfc_expr *c)
3495 return gfc_check_fgetput_sub (c, NULL);
3499 gfc_try
3500 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
3502 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3503 return FAILURE;
3505 if (scalar_check (unit, 0) == FAILURE)
3506 return FAILURE;
3508 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3509 return FAILURE;
3511 if (scalar_check (offset, 1) == FAILURE)
3512 return FAILURE;
3514 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
3515 return FAILURE;
3517 if (scalar_check (whence, 2) == FAILURE)
3518 return FAILURE;
3520 if (status == NULL)
3521 return SUCCESS;
3523 if (type_check (status, 3, BT_INTEGER) == FAILURE)
3524 return FAILURE;
3526 if (kind_value_check (status, 3, 4) == FAILURE)
3527 return FAILURE;
3529 if (scalar_check (status, 3) == FAILURE)
3530 return FAILURE;
3532 return SUCCESS;
3537 gfc_try
3538 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
3540 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3541 return FAILURE;
3543 if (scalar_check (unit, 0) == FAILURE)
3544 return FAILURE;
3546 if (type_check (array, 1, BT_INTEGER) == FAILURE
3547 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
3548 return FAILURE;
3550 if (array_check (array, 1) == FAILURE)
3551 return FAILURE;
3553 return SUCCESS;
3557 gfc_try
3558 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
3560 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3561 return FAILURE;
3563 if (scalar_check (unit, 0) == FAILURE)
3564 return FAILURE;
3566 if (type_check (array, 1, BT_INTEGER) == FAILURE
3567 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3568 return FAILURE;
3570 if (array_check (array, 1) == FAILURE)
3571 return FAILURE;
3573 if (status == NULL)
3574 return SUCCESS;
3576 if (type_check (status, 2, BT_INTEGER) == FAILURE
3577 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3578 return FAILURE;
3580 if (scalar_check (status, 2) == FAILURE)
3581 return FAILURE;
3583 return SUCCESS;
3587 gfc_try
3588 gfc_check_ftell (gfc_expr *unit)
3590 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3591 return FAILURE;
3593 if (scalar_check (unit, 0) == FAILURE)
3594 return FAILURE;
3596 return SUCCESS;
3600 gfc_try
3601 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3603 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3604 return FAILURE;
3606 if (scalar_check (unit, 0) == FAILURE)
3607 return FAILURE;
3609 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3610 return FAILURE;
3612 if (scalar_check (offset, 1) == FAILURE)
3613 return FAILURE;
3615 return SUCCESS;
3619 gfc_try
3620 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3622 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3623 return FAILURE;
3624 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3625 return FAILURE;
3627 if (type_check (array, 1, BT_INTEGER) == FAILURE
3628 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3629 return FAILURE;
3631 if (array_check (array, 1) == FAILURE)
3632 return FAILURE;
3634 return SUCCESS;
3638 gfc_try
3639 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3641 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3642 return FAILURE;
3643 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3644 return FAILURE;
3646 if (type_check (array, 1, BT_INTEGER) == FAILURE
3647 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3648 return FAILURE;
3650 if (array_check (array, 1) == FAILURE)
3651 return FAILURE;
3653 if (status == NULL)
3654 return SUCCESS;
3656 if (type_check (status, 2, BT_INTEGER) == FAILURE
3657 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3658 return FAILURE;
3660 if (scalar_check (status, 2) == FAILURE)
3661 return FAILURE;
3663 return SUCCESS;
3667 gfc_try
3668 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
3670 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3672 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3673 return FAILURE;
3676 if (coarray_check (coarray, 0) == FAILURE)
3677 return FAILURE;
3679 if (sub->rank != 1)
3681 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3682 gfc_current_intrinsic_arg[1]->name, &sub->where);
3683 return FAILURE;
3686 return SUCCESS;
3690 gfc_try
3691 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim)
3693 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3695 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3696 return FAILURE;
3699 if (dim != NULL && coarray == NULL)
3701 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3702 "intrinsic at %L", &dim->where);
3703 return FAILURE;
3706 if (coarray == NULL)
3707 return SUCCESS;
3709 if (coarray_check (coarray, 0) == FAILURE)
3710 return FAILURE;
3712 if (dim != NULL)
3714 if (dim_check (dim, 1, false) == FAILURE)
3715 return FAILURE;
3717 if (dim_corank_check (dim, coarray) == FAILURE)
3718 return FAILURE;
3721 return SUCCESS;
3725 gfc_try
3726 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
3727 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
3729 if (mold->ts.type == BT_HOLLERITH)
3731 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3732 &mold->where, gfc_basic_typename (BT_HOLLERITH));
3733 return FAILURE;
3736 if (size != NULL)
3738 if (type_check (size, 2, BT_INTEGER) == FAILURE)
3739 return FAILURE;
3741 if (scalar_check (size, 2) == FAILURE)
3742 return FAILURE;
3744 if (nonoptional_check (size, 2) == FAILURE)
3745 return FAILURE;
3748 return SUCCESS;
3752 gfc_try
3753 gfc_check_transpose (gfc_expr *matrix)
3755 if (rank_check (matrix, 0, 2) == FAILURE)
3756 return FAILURE;
3758 return SUCCESS;
3762 gfc_try
3763 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3765 if (array_check (array, 0) == FAILURE)
3766 return FAILURE;
3768 if (dim_check (dim, 1, false) == FAILURE)
3769 return FAILURE;
3771 if (dim_rank_check (dim, array, 0) == FAILURE)
3772 return FAILURE;
3774 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3775 return FAILURE;
3776 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3777 "with KIND argument at %L",
3778 gfc_current_intrinsic, &kind->where) == FAILURE)
3779 return FAILURE;
3781 return SUCCESS;
3785 gfc_try
3786 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
3788 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3790 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3791 return FAILURE;
3794 if (coarray_check (coarray, 0) == FAILURE)
3795 return FAILURE;
3797 if (dim != NULL)
3799 if (dim_check (dim, 1, false) == FAILURE)
3800 return FAILURE;
3802 if (dim_corank_check (dim, coarray) == FAILURE)
3803 return FAILURE;
3806 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3807 return FAILURE;
3809 return SUCCESS;
3813 gfc_try
3814 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
3816 mpz_t vector_size;
3818 if (rank_check (vector, 0, 1) == FAILURE)
3819 return FAILURE;
3821 if (array_check (mask, 1) == FAILURE)
3822 return FAILURE;
3824 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
3825 return FAILURE;
3827 if (same_type_check (vector, 0, field, 2) == FAILURE)
3828 return FAILURE;
3830 if (mask->expr_type == EXPR_ARRAY
3831 && gfc_array_size (vector, &vector_size) == SUCCESS)
3833 int mask_true_count = 0;
3834 gfc_constructor *mask_ctor;
3835 mask_ctor = gfc_constructor_first (mask->value.constructor);
3836 while (mask_ctor)
3838 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
3840 mask_true_count = 0;
3841 break;
3844 if (mask_ctor->expr->value.logical)
3845 mask_true_count++;
3847 mask_ctor = gfc_constructor_next (mask_ctor);
3850 if (mpz_get_si (vector_size) < mask_true_count)
3852 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
3853 "provide at least as many elements as there "
3854 "are .TRUE. values in '%s' (%ld/%d)",
3855 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3856 &vector->where, gfc_current_intrinsic_arg[1]->name,
3857 mpz_get_si (vector_size), mask_true_count);
3858 return FAILURE;
3861 mpz_clear (vector_size);
3864 if (mask->rank != field->rank && field->rank != 0)
3866 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
3867 "the same rank as '%s' or be a scalar",
3868 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
3869 &field->where, gfc_current_intrinsic_arg[1]->name);
3870 return FAILURE;
3873 if (mask->rank == field->rank)
3875 int i;
3876 for (i = 0; i < field->rank; i++)
3877 if (! identical_dimen_shape (mask, i, field, i))
3879 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
3880 "must have identical shape.",
3881 gfc_current_intrinsic_arg[2]->name,
3882 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3883 &field->where);
3887 return SUCCESS;
3891 gfc_try
3892 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3894 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3895 return FAILURE;
3897 if (same_type_check (x, 0, y, 1) == FAILURE)
3898 return FAILURE;
3900 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3901 return FAILURE;
3903 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3904 return FAILURE;
3905 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3906 "with KIND argument at %L",
3907 gfc_current_intrinsic, &kind->where) == FAILURE)
3908 return FAILURE;
3910 return SUCCESS;
3914 gfc_try
3915 gfc_check_trim (gfc_expr *x)
3917 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3918 return FAILURE;
3920 if (scalar_check (x, 0) == FAILURE)
3921 return FAILURE;
3923 return SUCCESS;
3927 gfc_try
3928 gfc_check_ttynam (gfc_expr *unit)
3930 if (scalar_check (unit, 0) == FAILURE)
3931 return FAILURE;
3933 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3934 return FAILURE;
3936 return SUCCESS;
3940 /* Common check function for the half a dozen intrinsics that have a
3941 single real argument. */
3943 gfc_try
3944 gfc_check_x (gfc_expr *x)
3946 if (type_check (x, 0, BT_REAL) == FAILURE)
3947 return FAILURE;
3949 return SUCCESS;
3953 /************* Check functions for intrinsic subroutines *************/
3955 gfc_try
3956 gfc_check_cpu_time (gfc_expr *time)
3958 if (scalar_check (time, 0) == FAILURE)
3959 return FAILURE;
3961 if (type_check (time, 0, BT_REAL) == FAILURE)
3962 return FAILURE;
3964 if (variable_check (time, 0, false) == FAILURE)
3965 return FAILURE;
3967 return SUCCESS;
3971 gfc_try
3972 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
3973 gfc_expr *zone, gfc_expr *values)
3975 if (date != NULL)
3977 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3978 return FAILURE;
3979 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
3980 return FAILURE;
3981 if (scalar_check (date, 0) == FAILURE)
3982 return FAILURE;
3983 if (variable_check (date, 0, false) == FAILURE)
3984 return FAILURE;
3987 if (time != NULL)
3989 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
3990 return FAILURE;
3991 if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
3992 return FAILURE;
3993 if (scalar_check (time, 1) == FAILURE)
3994 return FAILURE;
3995 if (variable_check (time, 1, false) == FAILURE)
3996 return FAILURE;
3999 if (zone != NULL)
4001 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
4002 return FAILURE;
4003 if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
4004 return FAILURE;
4005 if (scalar_check (zone, 2) == FAILURE)
4006 return FAILURE;
4007 if (variable_check (zone, 2, false) == FAILURE)
4008 return FAILURE;
4011 if (values != NULL)
4013 if (type_check (values, 3, BT_INTEGER) == FAILURE)
4014 return FAILURE;
4015 if (array_check (values, 3) == FAILURE)
4016 return FAILURE;
4017 if (rank_check (values, 3, 1) == FAILURE)
4018 return FAILURE;
4019 if (variable_check (values, 3, false) == FAILURE)
4020 return FAILURE;
4023 return SUCCESS;
4027 gfc_try
4028 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
4029 gfc_expr *to, gfc_expr *topos)
4031 if (type_check (from, 0, BT_INTEGER) == FAILURE)
4032 return FAILURE;
4034 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
4035 return FAILURE;
4037 if (type_check (len, 2, BT_INTEGER) == FAILURE)
4038 return FAILURE;
4040 if (same_type_check (from, 0, to, 3) == FAILURE)
4041 return FAILURE;
4043 if (variable_check (to, 3, false) == FAILURE)
4044 return FAILURE;
4046 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
4047 return FAILURE;
4049 if (nonnegative_check ("frompos", frompos) == FAILURE)
4050 return FAILURE;
4052 if (nonnegative_check ("topos", topos) == FAILURE)
4053 return FAILURE;
4055 if (nonnegative_check ("len", len) == FAILURE)
4056 return FAILURE;
4058 if (less_than_bitsize2 ("from", from, "frompos", frompos, "len", len)
4059 == FAILURE)
4060 return FAILURE;
4062 if (less_than_bitsize2 ("to", to, "topos", topos, "len", len) == FAILURE)
4063 return FAILURE;
4065 return SUCCESS;
4069 gfc_try
4070 gfc_check_random_number (gfc_expr *harvest)
4072 if (type_check (harvest, 0, BT_REAL) == FAILURE)
4073 return FAILURE;
4075 if (variable_check (harvest, 0, false) == FAILURE)
4076 return FAILURE;
4078 return SUCCESS;
4082 gfc_try
4083 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
4085 unsigned int nargs = 0, kiss_size;
4086 locus *where = NULL;
4087 mpz_t put_size, get_size;
4088 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4090 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
4092 /* Keep the number of bytes in sync with kiss_size in
4093 libgfortran/intrinsics/random.c. */
4094 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
4096 if (size != NULL)
4098 if (size->expr_type != EXPR_VARIABLE
4099 || !size->symtree->n.sym->attr.optional)
4100 nargs++;
4102 if (scalar_check (size, 0) == FAILURE)
4103 return FAILURE;
4105 if (type_check (size, 0, BT_INTEGER) == FAILURE)
4106 return FAILURE;
4108 if (variable_check (size, 0, false) == FAILURE)
4109 return FAILURE;
4111 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
4112 return FAILURE;
4115 if (put != NULL)
4117 if (put->expr_type != EXPR_VARIABLE
4118 || !put->symtree->n.sym->attr.optional)
4120 nargs++;
4121 where = &put->where;
4124 if (array_check (put, 1) == FAILURE)
4125 return FAILURE;
4127 if (rank_check (put, 1, 1) == FAILURE)
4128 return FAILURE;
4130 if (type_check (put, 1, BT_INTEGER) == FAILURE)
4131 return FAILURE;
4133 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
4134 return FAILURE;
4136 if (gfc_array_size (put, &put_size) == SUCCESS
4137 && mpz_get_ui (put_size) < kiss_size)
4138 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4139 "too small (%i/%i)",
4140 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4141 where, (int) mpz_get_ui (put_size), kiss_size);
4144 if (get != NULL)
4146 if (get->expr_type != EXPR_VARIABLE
4147 || !get->symtree->n.sym->attr.optional)
4149 nargs++;
4150 where = &get->where;
4153 if (array_check (get, 2) == FAILURE)
4154 return FAILURE;
4156 if (rank_check (get, 2, 1) == FAILURE)
4157 return FAILURE;
4159 if (type_check (get, 2, BT_INTEGER) == FAILURE)
4160 return FAILURE;
4162 if (variable_check (get, 2, false) == FAILURE)
4163 return FAILURE;
4165 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
4166 return FAILURE;
4168 if (gfc_array_size (get, &get_size) == SUCCESS
4169 && mpz_get_ui (get_size) < kiss_size)
4170 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4171 "too small (%i/%i)",
4172 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
4173 where, (int) mpz_get_ui (get_size), kiss_size);
4176 /* RANDOM_SEED may not have more than one non-optional argument. */
4177 if (nargs > 1)
4178 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
4180 return SUCCESS;
4184 gfc_try
4185 gfc_check_second_sub (gfc_expr *time)
4187 if (scalar_check (time, 0) == FAILURE)
4188 return FAILURE;
4190 if (type_check (time, 0, BT_REAL) == FAILURE)
4191 return FAILURE;
4193 if (kind_value_check(time, 0, 4) == FAILURE)
4194 return FAILURE;
4196 return SUCCESS;
4200 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4201 count, count_rate, and count_max are all optional arguments */
4203 gfc_try
4204 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
4205 gfc_expr *count_max)
4207 if (count != NULL)
4209 if (scalar_check (count, 0) == FAILURE)
4210 return FAILURE;
4212 if (type_check (count, 0, BT_INTEGER) == FAILURE)
4213 return FAILURE;
4215 if (variable_check (count, 0, false) == FAILURE)
4216 return FAILURE;
4219 if (count_rate != NULL)
4221 if (scalar_check (count_rate, 1) == FAILURE)
4222 return FAILURE;
4224 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
4225 return FAILURE;
4227 if (variable_check (count_rate, 1, false) == FAILURE)
4228 return FAILURE;
4230 if (count != NULL
4231 && same_type_check (count, 0, count_rate, 1) == FAILURE)
4232 return FAILURE;
4236 if (count_max != NULL)
4238 if (scalar_check (count_max, 2) == FAILURE)
4239 return FAILURE;
4241 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
4242 return FAILURE;
4244 if (variable_check (count_max, 2, false) == FAILURE)
4245 return FAILURE;
4247 if (count != NULL
4248 && same_type_check (count, 0, count_max, 2) == FAILURE)
4249 return FAILURE;
4251 if (count_rate != NULL
4252 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
4253 return FAILURE;
4256 return SUCCESS;
4260 gfc_try
4261 gfc_check_irand (gfc_expr *x)
4263 if (x == NULL)
4264 return SUCCESS;
4266 if (scalar_check (x, 0) == FAILURE)
4267 return FAILURE;
4269 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4270 return FAILURE;
4272 if (kind_value_check(x, 0, 4) == FAILURE)
4273 return FAILURE;
4275 return SUCCESS;
4279 gfc_try
4280 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
4282 if (scalar_check (seconds, 0) == FAILURE)
4283 return FAILURE;
4284 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
4285 return FAILURE;
4287 if (int_or_proc_check (handler, 1) == FAILURE)
4288 return FAILURE;
4289 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4290 return FAILURE;
4292 if (status == NULL)
4293 return SUCCESS;
4295 if (scalar_check (status, 2) == FAILURE)
4296 return FAILURE;
4297 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4298 return FAILURE;
4299 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
4300 return FAILURE;
4302 return SUCCESS;
4306 gfc_try
4307 gfc_check_rand (gfc_expr *x)
4309 if (x == NULL)
4310 return SUCCESS;
4312 if (scalar_check (x, 0) == FAILURE)
4313 return FAILURE;
4315 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4316 return FAILURE;
4318 if (kind_value_check(x, 0, 4) == FAILURE)
4319 return FAILURE;
4321 return SUCCESS;
4325 gfc_try
4326 gfc_check_srand (gfc_expr *x)
4328 if (scalar_check (x, 0) == FAILURE)
4329 return FAILURE;
4331 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4332 return FAILURE;
4334 if (kind_value_check(x, 0, 4) == FAILURE)
4335 return FAILURE;
4337 return SUCCESS;
4341 gfc_try
4342 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
4344 if (scalar_check (time, 0) == FAILURE)
4345 return FAILURE;
4346 if (type_check (time, 0, BT_INTEGER) == FAILURE)
4347 return FAILURE;
4349 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
4350 return FAILURE;
4351 if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
4352 return FAILURE;
4354 return SUCCESS;
4358 gfc_try
4359 gfc_check_dtime_etime (gfc_expr *x)
4361 if (array_check (x, 0) == FAILURE)
4362 return FAILURE;
4364 if (rank_check (x, 0, 1) == FAILURE)
4365 return FAILURE;
4367 if (variable_check (x, 0, false) == FAILURE)
4368 return FAILURE;
4370 if (type_check (x, 0, BT_REAL) == FAILURE)
4371 return FAILURE;
4373 if (kind_value_check(x, 0, 4) == FAILURE)
4374 return FAILURE;
4376 return SUCCESS;
4380 gfc_try
4381 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
4383 if (array_check (values, 0) == FAILURE)
4384 return FAILURE;
4386 if (rank_check (values, 0, 1) == FAILURE)
4387 return FAILURE;
4389 if (variable_check (values, 0, false) == FAILURE)
4390 return FAILURE;
4392 if (type_check (values, 0, BT_REAL) == FAILURE)
4393 return FAILURE;
4395 if (kind_value_check(values, 0, 4) == FAILURE)
4396 return FAILURE;
4398 if (scalar_check (time, 1) == FAILURE)
4399 return FAILURE;
4401 if (type_check (time, 1, BT_REAL) == FAILURE)
4402 return FAILURE;
4404 if (kind_value_check(time, 1, 4) == FAILURE)
4405 return FAILURE;
4407 return SUCCESS;
4411 gfc_try
4412 gfc_check_fdate_sub (gfc_expr *date)
4414 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
4415 return FAILURE;
4416 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
4417 return FAILURE;
4419 return SUCCESS;
4423 gfc_try
4424 gfc_check_gerror (gfc_expr *msg)
4426 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4427 return FAILURE;
4428 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4429 return FAILURE;
4431 return SUCCESS;
4435 gfc_try
4436 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
4438 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
4439 return FAILURE;
4440 if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
4441 return FAILURE;
4443 if (status == NULL)
4444 return SUCCESS;
4446 if (scalar_check (status, 1) == FAILURE)
4447 return FAILURE;
4449 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4450 return FAILURE;
4452 return SUCCESS;
4456 gfc_try
4457 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
4459 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
4460 return FAILURE;
4462 if (pos->ts.kind > gfc_default_integer_kind)
4464 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4465 "not wider than the default kind (%d)",
4466 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4467 &pos->where, gfc_default_integer_kind);
4468 return FAILURE;
4471 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
4472 return FAILURE;
4473 if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
4474 return FAILURE;
4476 return SUCCESS;
4480 gfc_try
4481 gfc_check_getlog (gfc_expr *msg)
4483 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4484 return FAILURE;
4485 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4486 return FAILURE;
4488 return SUCCESS;
4492 gfc_try
4493 gfc_check_exit (gfc_expr *status)
4495 if (status == NULL)
4496 return SUCCESS;
4498 if (type_check (status, 0, BT_INTEGER) == FAILURE)
4499 return FAILURE;
4501 if (scalar_check (status, 0) == FAILURE)
4502 return FAILURE;
4504 return SUCCESS;
4508 gfc_try
4509 gfc_check_flush (gfc_expr *unit)
4511 if (unit == NULL)
4512 return SUCCESS;
4514 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4515 return FAILURE;
4517 if (scalar_check (unit, 0) == FAILURE)
4518 return FAILURE;
4520 return SUCCESS;
4524 gfc_try
4525 gfc_check_free (gfc_expr *i)
4527 if (type_check (i, 0, BT_INTEGER) == FAILURE)
4528 return FAILURE;
4530 if (scalar_check (i, 0) == FAILURE)
4531 return FAILURE;
4533 return SUCCESS;
4537 gfc_try
4538 gfc_check_hostnm (gfc_expr *name)
4540 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4541 return FAILURE;
4542 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4543 return FAILURE;
4545 return SUCCESS;
4549 gfc_try
4550 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
4552 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4553 return FAILURE;
4554 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4555 return FAILURE;
4557 if (status == NULL)
4558 return SUCCESS;
4560 if (scalar_check (status, 1) == FAILURE)
4561 return FAILURE;
4563 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4564 return FAILURE;
4566 return SUCCESS;
4570 gfc_try
4571 gfc_check_itime_idate (gfc_expr *values)
4573 if (array_check (values, 0) == FAILURE)
4574 return FAILURE;
4576 if (rank_check (values, 0, 1) == FAILURE)
4577 return FAILURE;
4579 if (variable_check (values, 0, false) == FAILURE)
4580 return FAILURE;
4582 if (type_check (values, 0, BT_INTEGER) == FAILURE)
4583 return FAILURE;
4585 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
4586 return FAILURE;
4588 return SUCCESS;
4592 gfc_try
4593 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
4595 if (type_check (time, 0, BT_INTEGER) == FAILURE)
4596 return FAILURE;
4598 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
4599 return FAILURE;
4601 if (scalar_check (time, 0) == FAILURE)
4602 return FAILURE;
4604 if (array_check (values, 1) == FAILURE)
4605 return FAILURE;
4607 if (rank_check (values, 1, 1) == FAILURE)
4608 return FAILURE;
4610 if (variable_check (values, 1, false) == FAILURE)
4611 return FAILURE;
4613 if (type_check (values, 1, BT_INTEGER) == FAILURE)
4614 return FAILURE;
4616 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
4617 return FAILURE;
4619 return SUCCESS;
4623 gfc_try
4624 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
4626 if (scalar_check (unit, 0) == FAILURE)
4627 return FAILURE;
4629 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4630 return FAILURE;
4632 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
4633 return FAILURE;
4634 if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
4635 return FAILURE;
4637 return SUCCESS;
4641 gfc_try
4642 gfc_check_isatty (gfc_expr *unit)
4644 if (unit == NULL)
4645 return FAILURE;
4647 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4648 return FAILURE;
4650 if (scalar_check (unit, 0) == FAILURE)
4651 return FAILURE;
4653 return SUCCESS;
4657 gfc_try
4658 gfc_check_isnan (gfc_expr *x)
4660 if (type_check (x, 0, BT_REAL) == FAILURE)
4661 return FAILURE;
4663 return SUCCESS;
4667 gfc_try
4668 gfc_check_perror (gfc_expr *string)
4670 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
4671 return FAILURE;
4672 if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
4673 return FAILURE;
4675 return SUCCESS;
4679 gfc_try
4680 gfc_check_umask (gfc_expr *mask)
4682 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4683 return FAILURE;
4685 if (scalar_check (mask, 0) == FAILURE)
4686 return FAILURE;
4688 return SUCCESS;
4692 gfc_try
4693 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
4695 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4696 return FAILURE;
4698 if (scalar_check (mask, 0) == FAILURE)
4699 return FAILURE;
4701 if (old == NULL)
4702 return SUCCESS;
4704 if (scalar_check (old, 1) == FAILURE)
4705 return FAILURE;
4707 if (type_check (old, 1, BT_INTEGER) == FAILURE)
4708 return FAILURE;
4710 return SUCCESS;
4714 gfc_try
4715 gfc_check_unlink (gfc_expr *name)
4717 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4718 return FAILURE;
4719 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4720 return FAILURE;
4722 return SUCCESS;
4726 gfc_try
4727 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
4729 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4730 return FAILURE;
4731 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4732 return FAILURE;
4734 if (status == NULL)
4735 return SUCCESS;
4737 if (scalar_check (status, 1) == FAILURE)
4738 return FAILURE;
4740 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4741 return FAILURE;
4743 return SUCCESS;
4747 gfc_try
4748 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
4750 if (scalar_check (number, 0) == FAILURE)
4751 return FAILURE;
4752 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4753 return FAILURE;
4755 if (int_or_proc_check (handler, 1) == FAILURE)
4756 return FAILURE;
4757 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4758 return FAILURE;
4760 return SUCCESS;
4764 gfc_try
4765 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
4767 if (scalar_check (number, 0) == FAILURE)
4768 return FAILURE;
4769 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4770 return FAILURE;
4772 if (int_or_proc_check (handler, 1) == FAILURE)
4773 return FAILURE;
4774 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4775 return FAILURE;
4777 if (status == NULL)
4778 return SUCCESS;
4780 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4781 return FAILURE;
4782 if (scalar_check (status, 2) == FAILURE)
4783 return FAILURE;
4785 return SUCCESS;
4789 gfc_try
4790 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
4792 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
4793 return FAILURE;
4794 if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
4795 return FAILURE;
4797 if (scalar_check (status, 1) == FAILURE)
4798 return FAILURE;
4800 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4801 return FAILURE;
4803 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
4804 return FAILURE;
4806 return SUCCESS;
4810 /* This is used for the GNU intrinsics AND, OR and XOR. */
4811 gfc_try
4812 gfc_check_and (gfc_expr *i, gfc_expr *j)
4814 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
4816 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4817 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
4818 gfc_current_intrinsic, &i->where);
4819 return FAILURE;
4822 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
4824 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
4825 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
4826 gfc_current_intrinsic, &j->where);
4827 return FAILURE;
4830 if (i->ts.type != j->ts.type)
4832 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
4833 "have the same type", gfc_current_intrinsic_arg[0]->name,
4834 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4835 &j->where);
4836 return FAILURE;
4839 if (scalar_check (i, 0) == FAILURE)
4840 return FAILURE;
4842 if (scalar_check (j, 1) == FAILURE)
4843 return FAILURE;
4845 return SUCCESS;
4849 gfc_try
4850 gfc_check_storage_size (gfc_expr *a ATTRIBUTE_UNUSED, gfc_expr *kind)
4852 if (kind == NULL)
4853 return SUCCESS;
4855 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
4856 return FAILURE;
4858 if (scalar_check (kind, 1) == FAILURE)
4859 return FAILURE;
4861 if (kind->expr_type != EXPR_CONSTANT)
4863 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
4864 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4865 &kind->where);
4866 return FAILURE;
4869 return SUCCESS;