2011-10-20 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / gcc / fortran / check.c
blob9aaad01ca36144d268ca2dae9402ea5baf837818
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"
35 #include "target-memory.h"
38 /* Make sure an expression is a scalar. */
40 static gfc_try
41 scalar_check (gfc_expr *e, int n)
43 if (e->rank == 0)
44 return SUCCESS;
46 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
47 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
48 &e->where);
50 return FAILURE;
54 /* Check the type of an expression. */
56 static gfc_try
57 type_check (gfc_expr *e, int n, bt type)
59 if (e->ts.type == type)
60 return SUCCESS;
62 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
63 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
64 &e->where, gfc_basic_typename (type));
66 return FAILURE;
70 /* Check that the expression is a numeric type. */
72 static gfc_try
73 numeric_check (gfc_expr *e, int n)
75 if (gfc_numeric_ts (&e->ts))
76 return SUCCESS;
78 /* If the expression has not got a type, check if its namespace can
79 offer a default type. */
80 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
81 && e->symtree->n.sym->ts.type == BT_UNKNOWN
82 && gfc_set_default_type (e->symtree->n.sym, 0,
83 e->symtree->n.sym->ns) == SUCCESS
84 && gfc_numeric_ts (&e->symtree->n.sym->ts))
86 e->ts = e->symtree->n.sym->ts;
87 return SUCCESS;
90 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
91 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
92 &e->where);
94 return FAILURE;
98 /* Check that an expression is integer or real. */
100 static gfc_try
101 int_or_real_check (gfc_expr *e, int n)
103 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
105 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
106 "or REAL", gfc_current_intrinsic_arg[n]->name,
107 gfc_current_intrinsic, &e->where);
108 return FAILURE;
111 return SUCCESS;
115 /* Check that an expression is real or complex. */
117 static gfc_try
118 real_or_complex_check (gfc_expr *e, int n)
120 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
122 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
123 "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
124 gfc_current_intrinsic, &e->where);
125 return FAILURE;
128 return SUCCESS;
132 /* Check that an expression is INTEGER or PROCEDURE. */
134 static gfc_try
135 int_or_proc_check (gfc_expr *e, int n)
137 if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
139 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
140 "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
141 gfc_current_intrinsic, &e->where);
142 return FAILURE;
145 return SUCCESS;
149 /* Check that the expression is an optional constant integer
150 and that it specifies a valid kind for that type. */
152 static gfc_try
153 kind_check (gfc_expr *k, int n, bt type)
155 int kind;
157 if (k == NULL)
158 return SUCCESS;
160 if (type_check (k, n, BT_INTEGER) == FAILURE)
161 return FAILURE;
163 if (scalar_check (k, n) == FAILURE)
164 return FAILURE;
166 if (k->expr_type != EXPR_CONSTANT)
168 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
169 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
170 &k->where);
171 return FAILURE;
174 if (gfc_extract_int (k, &kind) != NULL
175 || gfc_validate_kind (type, kind, true) < 0)
177 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
178 &k->where);
179 return FAILURE;
182 return SUCCESS;
186 /* Make sure the expression is a double precision real. */
188 static gfc_try
189 double_check (gfc_expr *d, int n)
191 if (type_check (d, n, BT_REAL) == FAILURE)
192 return FAILURE;
194 if (d->ts.kind != gfc_default_double_kind)
196 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
197 "precision", gfc_current_intrinsic_arg[n]->name,
198 gfc_current_intrinsic, &d->where);
199 return FAILURE;
202 return SUCCESS;
206 static gfc_try
207 coarray_check (gfc_expr *e, int n)
209 if (!gfc_is_coarray (e))
211 gfc_error ("Expected coarray variable as '%s' argument to the %s "
212 "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
213 gfc_current_intrinsic, &e->where);
214 return FAILURE;
217 return SUCCESS;
221 /* Make sure the expression is a logical array. */
223 static gfc_try
224 logical_array_check (gfc_expr *array, int n)
226 if (array->ts.type != BT_LOGICAL || array->rank == 0)
228 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
229 "array", gfc_current_intrinsic_arg[n]->name,
230 gfc_current_intrinsic, &array->where);
231 return FAILURE;
234 return SUCCESS;
238 /* Make sure an expression is an array. */
240 static gfc_try
241 array_check (gfc_expr *e, int n)
243 if (e->rank != 0)
244 return SUCCESS;
246 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
247 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
248 &e->where);
250 return FAILURE;
254 /* If expr is a constant, then check to ensure that it is greater than
255 of equal to zero. */
257 static gfc_try
258 nonnegative_check (const char *arg, gfc_expr *expr)
260 int i;
262 if (expr->expr_type == EXPR_CONSTANT)
264 gfc_extract_int (expr, &i);
265 if (i < 0)
267 gfc_error ("'%s' at %L must be nonnegative", arg, &expr->where);
268 return FAILURE;
272 return SUCCESS;
276 /* If expr2 is constant, then check that the value is less than
277 (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
279 static gfc_try
280 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
281 gfc_expr *expr2, bool or_equal)
283 int i2, i3;
285 if (expr2->expr_type == EXPR_CONSTANT)
287 gfc_extract_int (expr2, &i2);
288 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
290 /* For ISHFT[C], check that |shift| <= bit_size(i). */
291 if (arg2 == NULL)
293 if (i2 < 0)
294 i2 = -i2;
296 if (i2 > gfc_integer_kinds[i3].bit_size)
298 gfc_error ("The absolute value of SHIFT at %L must be less "
299 "than or equal to BIT_SIZE('%s')",
300 &expr2->where, arg1);
301 return FAILURE;
305 if (or_equal)
307 if (i2 > gfc_integer_kinds[i3].bit_size)
309 gfc_error ("'%s' at %L must be less than "
310 "or equal to BIT_SIZE('%s')",
311 arg2, &expr2->where, arg1);
312 return FAILURE;
315 else
317 if (i2 >= gfc_integer_kinds[i3].bit_size)
319 gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
320 arg2, &expr2->where, arg1);
321 return FAILURE;
326 return SUCCESS;
330 /* If expr is constant, then check that the value is less than or equal
331 to the bit_size of the kind k. */
333 static gfc_try
334 less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
336 int i, val;
338 if (expr->expr_type != EXPR_CONSTANT)
339 return SUCCESS;
341 i = gfc_validate_kind (BT_INTEGER, k, false);
342 gfc_extract_int (expr, &val);
344 if (val > gfc_integer_kinds[i].bit_size)
346 gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
347 "INTEGER(KIND=%d)", arg, &expr->where, k);
348 return FAILURE;
351 return SUCCESS;
355 /* If expr2 and expr3 are constants, then check that the value is less than
356 or equal to bit_size(expr1). */
358 static gfc_try
359 less_than_bitsize2 (const char *arg1, gfc_expr *expr1, const char *arg2,
360 gfc_expr *expr2, const char *arg3, gfc_expr *expr3)
362 int i2, i3;
364 if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
366 gfc_extract_int (expr2, &i2);
367 gfc_extract_int (expr3, &i3);
368 i2 += i3;
369 i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
370 if (i2 > gfc_integer_kinds[i3].bit_size)
372 gfc_error ("'%s + %s' at %L must be less than or equal "
373 "to BIT_SIZE('%s')",
374 arg2, arg3, &expr2->where, arg1);
375 return FAILURE;
379 return SUCCESS;
382 /* Make sure two expressions have the same type. */
384 static gfc_try
385 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
387 if (gfc_compare_types (&e->ts, &f->ts))
388 return SUCCESS;
390 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
391 "and kind as '%s'", gfc_current_intrinsic_arg[m]->name,
392 gfc_current_intrinsic, &f->where,
393 gfc_current_intrinsic_arg[n]->name);
395 return FAILURE;
399 /* Make sure that an expression has a certain (nonzero) rank. */
401 static gfc_try
402 rank_check (gfc_expr *e, int n, int rank)
404 if (e->rank == rank)
405 return SUCCESS;
407 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
408 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
409 &e->where, rank);
411 return FAILURE;
415 /* Make sure a variable expression is not an optional dummy argument. */
417 static gfc_try
418 nonoptional_check (gfc_expr *e, int n)
420 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
422 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
423 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
424 &e->where);
427 /* TODO: Recursive check on nonoptional variables? */
429 return SUCCESS;
433 /* Check for ALLOCATABLE attribute. */
435 static gfc_try
436 allocatable_check (gfc_expr *e, int n)
438 symbol_attribute attr;
440 attr = gfc_variable_attr (e, NULL);
441 if (!attr.allocatable)
443 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
444 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
445 &e->where);
446 return FAILURE;
449 return SUCCESS;
453 /* Check that an expression has a particular kind. */
455 static gfc_try
456 kind_value_check (gfc_expr *e, int n, int k)
458 if (e->ts.kind == k)
459 return SUCCESS;
461 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
462 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
463 &e->where, k);
465 return FAILURE;
469 /* Make sure an expression is a variable. */
471 static gfc_try
472 variable_check (gfc_expr *e, int n, bool allow_proc)
474 if (e->expr_type == EXPR_VARIABLE
475 && e->symtree->n.sym->attr.intent == INTENT_IN
476 && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
477 || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
479 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
480 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
481 &e->where);
482 return FAILURE;
485 if (e->expr_type == EXPR_VARIABLE
486 && e->symtree->n.sym->attr.flavor != FL_PARAMETER
487 && (allow_proc
488 || !e->symtree->n.sym->attr.function
489 || (e->symtree->n.sym == e->symtree->n.sym->result
490 && (e->symtree->n.sym == gfc_current_ns->proc_name
491 || (gfc_current_ns->parent
492 && e->symtree->n.sym
493 == gfc_current_ns->parent->proc_name)))))
494 return SUCCESS;
496 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
497 gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
499 return FAILURE;
503 /* Check the common DIM parameter for correctness. */
505 static gfc_try
506 dim_check (gfc_expr *dim, int n, bool optional)
508 if (dim == NULL)
509 return SUCCESS;
511 if (type_check (dim, n, BT_INTEGER) == FAILURE)
512 return FAILURE;
514 if (scalar_check (dim, n) == FAILURE)
515 return FAILURE;
517 if (!optional && nonoptional_check (dim, n) == FAILURE)
518 return FAILURE;
520 return SUCCESS;
524 /* If a coarray DIM parameter is a constant, make sure that it is greater than
525 zero and less than or equal to the corank of the given array. */
527 static gfc_try
528 dim_corank_check (gfc_expr *dim, gfc_expr *array)
530 int corank;
532 gcc_assert (array->expr_type == EXPR_VARIABLE);
534 if (dim->expr_type != EXPR_CONSTANT)
535 return SUCCESS;
537 corank = gfc_get_corank (array);
539 if (mpz_cmp_ui (dim->value.integer, 1) < 0
540 || mpz_cmp_ui (dim->value.integer, corank) > 0)
542 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
543 "codimension index", gfc_current_intrinsic, &dim->where);
545 return FAILURE;
548 return SUCCESS;
552 /* If a DIM parameter is a constant, make sure that it is greater than
553 zero and less than or equal to the rank of the given array. If
554 allow_assumed is zero then dim must be less than the rank of the array
555 for assumed size arrays. */
557 static gfc_try
558 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
560 gfc_array_ref *ar;
561 int rank;
563 if (dim == NULL)
564 return SUCCESS;
566 if (dim->expr_type != EXPR_CONSTANT)
567 return SUCCESS;
569 if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
570 && array->value.function.isym->id == GFC_ISYM_SPREAD)
571 rank = array->rank + 1;
572 else
573 rank = array->rank;
575 if (array->expr_type == EXPR_VARIABLE)
577 ar = gfc_find_array_ref (array);
578 if (ar->as->type == AS_ASSUMED_SIZE
579 && !allow_assumed
580 && ar->type != AR_ELEMENT
581 && ar->type != AR_SECTION)
582 rank--;
585 if (mpz_cmp_ui (dim->value.integer, 1) < 0
586 || mpz_cmp_ui (dim->value.integer, rank) > 0)
588 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
589 "dimension index", gfc_current_intrinsic, &dim->where);
591 return FAILURE;
594 return SUCCESS;
598 /* Compare the size of a along dimension ai with the size of b along
599 dimension bi, returning 0 if they are known not to be identical,
600 and 1 if they are identical, or if this cannot be determined. */
602 static int
603 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
605 mpz_t a_size, b_size;
606 int ret;
608 gcc_assert (a->rank > ai);
609 gcc_assert (b->rank > bi);
611 ret = 1;
613 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
615 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
617 if (mpz_cmp (a_size, b_size) != 0)
618 ret = 0;
620 mpz_clear (b_size);
622 mpz_clear (a_size);
624 return ret;
627 /* Calculate the length of a character variable, including substrings.
628 Strip away parentheses if necessary. Return -1 if no length could
629 be determined. */
631 static long
632 gfc_var_strlen (const gfc_expr *a)
634 gfc_ref *ra;
636 while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
637 a = a->value.op.op1;
639 for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
642 if (ra)
644 long start_a, end_a;
646 if (ra->u.ss.start->expr_type == EXPR_CONSTANT
647 && ra->u.ss.end->expr_type == EXPR_CONSTANT)
649 start_a = mpz_get_si (ra->u.ss.start->value.integer);
650 end_a = mpz_get_si (ra->u.ss.end->value.integer);
651 return end_a - start_a + 1;
653 else if (gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
654 return 1;
655 else
656 return -1;
659 if (a->ts.u.cl && a->ts.u.cl->length
660 && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
661 return mpz_get_si (a->ts.u.cl->length->value.integer);
662 else if (a->expr_type == EXPR_CONSTANT
663 && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
664 return a->value.character.length;
665 else
666 return -1;
670 /* Check whether two character expressions have the same length;
671 returns SUCCESS if they have or if the length cannot be determined,
672 otherwise return FAILURE and raise a gfc_error. */
674 gfc_try
675 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
677 long len_a, len_b;
679 len_a = gfc_var_strlen(a);
680 len_b = gfc_var_strlen(b);
682 if (len_a == -1 || len_b == -1 || len_a == len_b)
683 return SUCCESS;
684 else
686 gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
687 len_a, len_b, name, &a->where);
688 return FAILURE;
693 /***** Check functions *****/
695 /* Check subroutine suitable for intrinsics taking a real argument and
696 a kind argument for the result. */
698 static gfc_try
699 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
701 if (type_check (a, 0, BT_REAL) == FAILURE)
702 return FAILURE;
703 if (kind_check (kind, 1, type) == FAILURE)
704 return FAILURE;
706 return SUCCESS;
710 /* Check subroutine suitable for ceiling, floor and nint. */
712 gfc_try
713 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
715 return check_a_kind (a, kind, BT_INTEGER);
719 /* Check subroutine suitable for aint, anint. */
721 gfc_try
722 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
724 return check_a_kind (a, kind, BT_REAL);
728 gfc_try
729 gfc_check_abs (gfc_expr *a)
731 if (numeric_check (a, 0) == FAILURE)
732 return FAILURE;
734 return SUCCESS;
738 gfc_try
739 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
741 if (type_check (a, 0, BT_INTEGER) == FAILURE)
742 return FAILURE;
743 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
744 return FAILURE;
746 return SUCCESS;
750 gfc_try
751 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
753 if (type_check (name, 0, BT_CHARACTER) == FAILURE
754 || scalar_check (name, 0) == FAILURE)
755 return FAILURE;
756 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
757 return FAILURE;
759 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
760 || scalar_check (mode, 1) == FAILURE)
761 return FAILURE;
762 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
763 return FAILURE;
765 return SUCCESS;
769 gfc_try
770 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
772 if (logical_array_check (mask, 0) == FAILURE)
773 return FAILURE;
775 if (dim_check (dim, 1, false) == FAILURE)
776 return FAILURE;
778 if (dim_rank_check (dim, mask, 0) == FAILURE)
779 return FAILURE;
781 return SUCCESS;
785 gfc_try
786 gfc_check_allocated (gfc_expr *array)
788 if (variable_check (array, 0, false) == FAILURE)
789 return FAILURE;
790 if (allocatable_check (array, 0) == FAILURE)
791 return FAILURE;
793 return SUCCESS;
797 /* Common check function where the first argument must be real or
798 integer and the second argument must be the same as the first. */
800 gfc_try
801 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
803 if (int_or_real_check (a, 0) == FAILURE)
804 return FAILURE;
806 if (a->ts.type != p->ts.type)
808 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
809 "have the same type", gfc_current_intrinsic_arg[0]->name,
810 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
811 &p->where);
812 return FAILURE;
815 if (a->ts.kind != p->ts.kind)
817 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
818 &p->where) == FAILURE)
819 return FAILURE;
822 return SUCCESS;
826 gfc_try
827 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
829 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
830 return FAILURE;
832 return SUCCESS;
836 gfc_try
837 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
839 symbol_attribute attr1, attr2;
840 int i;
841 gfc_try t;
842 locus *where;
844 where = &pointer->where;
846 if (pointer->expr_type == EXPR_VARIABLE || pointer->expr_type == EXPR_FUNCTION)
847 attr1 = gfc_expr_attr (pointer);
848 else if (pointer->expr_type == EXPR_NULL)
849 goto null_arg;
850 else
851 gcc_assert (0); /* Pointer must be a variable or a function. */
853 if (!attr1.pointer && !attr1.proc_pointer)
855 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
856 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
857 &pointer->where);
858 return FAILURE;
861 /* F2008, C1242. */
862 if (attr1.pointer && gfc_is_coindexed (pointer))
864 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
865 "conindexed", gfc_current_intrinsic_arg[0]->name,
866 gfc_current_intrinsic, &pointer->where);
867 return FAILURE;
870 /* Target argument is optional. */
871 if (target == NULL)
872 return SUCCESS;
874 where = &target->where;
875 if (target->expr_type == EXPR_NULL)
876 goto null_arg;
878 if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
879 attr2 = gfc_expr_attr (target);
880 else
882 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
883 "or target VARIABLE or FUNCTION",
884 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
885 &target->where);
886 return FAILURE;
889 if (attr1.pointer && !attr2.pointer && !attr2.target)
891 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
892 "or a TARGET", gfc_current_intrinsic_arg[1]->name,
893 gfc_current_intrinsic, &target->where);
894 return FAILURE;
897 /* F2008, C1242. */
898 if (attr1.pointer && gfc_is_coindexed (target))
900 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
901 "conindexed", gfc_current_intrinsic_arg[1]->name,
902 gfc_current_intrinsic, &target->where);
903 return FAILURE;
906 t = SUCCESS;
907 if (same_type_check (pointer, 0, target, 1) == FAILURE)
908 t = FAILURE;
909 if (rank_check (target, 0, pointer->rank) == FAILURE)
910 t = FAILURE;
911 if (target->rank > 0)
913 for (i = 0; i < target->rank; i++)
914 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
916 gfc_error ("Array section with a vector subscript at %L shall not "
917 "be the target of a pointer",
918 &target->where);
919 t = FAILURE;
920 break;
923 return t;
925 null_arg:
927 gfc_error ("NULL pointer at %L is not permitted as actual argument "
928 "of '%s' intrinsic function", where, gfc_current_intrinsic);
929 return FAILURE;
934 gfc_try
935 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
937 /* gfc_notify_std would be a wast of time as the return value
938 is seemingly used only for the generic resolution. The error
939 will be: Too many arguments. */
940 if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
941 return FAILURE;
943 return gfc_check_atan2 (y, x);
947 gfc_try
948 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
950 if (type_check (y, 0, BT_REAL) == FAILURE)
951 return FAILURE;
952 if (same_type_check (y, 0, x, 1) == FAILURE)
953 return FAILURE;
955 return SUCCESS;
959 static gfc_try
960 gfc_check_atomic (gfc_expr *atom, gfc_expr *value)
962 if (!(atom->ts.type == BT_INTEGER && atom->ts.kind == gfc_atomic_int_kind)
963 && !(atom->ts.type == BT_LOGICAL
964 && atom->ts.kind == gfc_atomic_logical_kind))
966 gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
967 "integer of ATOMIC_INT_KIND or a logical of "
968 "ATOMIC_LOGICAL_KIND", &atom->where, gfc_current_intrinsic);
969 return FAILURE;
972 if (!gfc_expr_attr (atom).codimension)
974 gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
975 "coarray or coindexed", &atom->where, gfc_current_intrinsic);
976 return FAILURE;
979 if (atom->ts.type != value->ts.type)
981 gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
982 "have the same type at %L", gfc_current_intrinsic,
983 &value->where);
984 return FAILURE;
987 return SUCCESS;
991 gfc_try
992 gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value)
994 if (scalar_check (atom, 0) == FAILURE || scalar_check (value, 1) == FAILURE)
995 return FAILURE;
997 if (gfc_check_vardef_context (atom, false, false, NULL) == FAILURE)
999 gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1000 "definable", gfc_current_intrinsic, &atom->where);
1001 return FAILURE;
1004 return gfc_check_atomic (atom, value);
1008 gfc_try
1009 gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom)
1011 if (scalar_check (value, 0) == FAILURE || scalar_check (atom, 1) == FAILURE)
1012 return FAILURE;
1014 if (gfc_check_vardef_context (value, false, false, NULL) == FAILURE)
1016 gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1017 "definable", gfc_current_intrinsic, &value->where);
1018 return FAILURE;
1021 return gfc_check_atomic (atom, value);
1025 /* BESJN and BESYN functions. */
1027 gfc_try
1028 gfc_check_besn (gfc_expr *n, gfc_expr *x)
1030 if (type_check (n, 0, BT_INTEGER) == FAILURE)
1031 return FAILURE;
1032 if (n->expr_type == EXPR_CONSTANT)
1034 int i;
1035 gfc_extract_int (n, &i);
1036 if (i < 0 && gfc_notify_std (GFC_STD_GNU, "Extension: Negative argument "
1037 "N at %L", &n->where) == FAILURE)
1038 return FAILURE;
1041 if (type_check (x, 1, BT_REAL) == FAILURE)
1042 return FAILURE;
1044 return SUCCESS;
1048 /* Transformational version of the Bessel JN and YN functions. */
1050 gfc_try
1051 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
1053 if (type_check (n1, 0, BT_INTEGER) == FAILURE)
1054 return FAILURE;
1055 if (scalar_check (n1, 0) == FAILURE)
1056 return FAILURE;
1057 if (nonnegative_check("N1", n1) == FAILURE)
1058 return FAILURE;
1060 if (type_check (n2, 1, BT_INTEGER) == FAILURE)
1061 return FAILURE;
1062 if (scalar_check (n2, 1) == FAILURE)
1063 return FAILURE;
1064 if (nonnegative_check("N2", n2) == FAILURE)
1065 return FAILURE;
1067 if (type_check (x, 2, BT_REAL) == FAILURE)
1068 return FAILURE;
1069 if (scalar_check (x, 2) == FAILURE)
1070 return FAILURE;
1072 return SUCCESS;
1076 gfc_try
1077 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1079 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1080 return FAILURE;
1082 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1083 return FAILURE;
1085 return SUCCESS;
1089 gfc_try
1090 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1092 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1093 return FAILURE;
1095 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1096 return FAILURE;
1098 if (nonnegative_check ("pos", pos) == FAILURE)
1099 return FAILURE;
1101 if (less_than_bitsize1 ("i", i, "pos", pos, false) == FAILURE)
1102 return FAILURE;
1104 return SUCCESS;
1108 gfc_try
1109 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1111 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1112 return FAILURE;
1113 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
1114 return FAILURE;
1116 return SUCCESS;
1120 gfc_try
1121 gfc_check_chdir (gfc_expr *dir)
1123 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1124 return FAILURE;
1125 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1126 return FAILURE;
1128 return SUCCESS;
1132 gfc_try
1133 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1135 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1136 return FAILURE;
1137 if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1138 return FAILURE;
1140 if (status == NULL)
1141 return SUCCESS;
1143 if (type_check (status, 1, BT_INTEGER) == FAILURE)
1144 return FAILURE;
1145 if (scalar_check (status, 1) == FAILURE)
1146 return FAILURE;
1148 return SUCCESS;
1152 gfc_try
1153 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
1155 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1156 return FAILURE;
1157 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1158 return FAILURE;
1160 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1161 return FAILURE;
1162 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1163 return FAILURE;
1165 return SUCCESS;
1169 gfc_try
1170 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
1172 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1173 return FAILURE;
1174 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1175 return FAILURE;
1177 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1178 return FAILURE;
1179 if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1180 return FAILURE;
1182 if (status == NULL)
1183 return SUCCESS;
1185 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1186 return FAILURE;
1188 if (scalar_check (status, 2) == FAILURE)
1189 return FAILURE;
1191 return SUCCESS;
1195 gfc_try
1196 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1198 if (numeric_check (x, 0) == FAILURE)
1199 return FAILURE;
1201 if (y != NULL)
1203 if (numeric_check (y, 1) == FAILURE)
1204 return FAILURE;
1206 if (x->ts.type == BT_COMPLEX)
1208 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1209 "present if 'x' is COMPLEX",
1210 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1211 &y->where);
1212 return FAILURE;
1215 if (y->ts.type == BT_COMPLEX)
1217 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1218 "of either REAL or INTEGER",
1219 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1220 &y->where);
1221 return FAILURE;
1226 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
1227 return FAILURE;
1229 return SUCCESS;
1233 gfc_try
1234 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1236 if (int_or_real_check (x, 0) == FAILURE)
1237 return FAILURE;
1238 if (scalar_check (x, 0) == FAILURE)
1239 return FAILURE;
1241 if (int_or_real_check (y, 1) == FAILURE)
1242 return FAILURE;
1243 if (scalar_check (y, 1) == FAILURE)
1244 return FAILURE;
1246 return SUCCESS;
1250 gfc_try
1251 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1253 if (logical_array_check (mask, 0) == FAILURE)
1254 return FAILURE;
1255 if (dim_check (dim, 1, false) == FAILURE)
1256 return FAILURE;
1257 if (dim_rank_check (dim, mask, 0) == FAILURE)
1258 return FAILURE;
1259 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1260 return FAILURE;
1261 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1262 "with KIND argument at %L",
1263 gfc_current_intrinsic, &kind->where) == FAILURE)
1264 return FAILURE;
1266 return SUCCESS;
1270 gfc_try
1271 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1273 if (array_check (array, 0) == FAILURE)
1274 return FAILURE;
1276 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1277 return FAILURE;
1279 if (dim_check (dim, 2, true) == FAILURE)
1280 return FAILURE;
1282 if (dim_rank_check (dim, array, false) == FAILURE)
1283 return FAILURE;
1285 if (array->rank == 1 || shift->rank == 0)
1287 if (scalar_check (shift, 1) == FAILURE)
1288 return FAILURE;
1290 else if (shift->rank == array->rank - 1)
1292 int d;
1293 if (!dim)
1294 d = 1;
1295 else if (dim->expr_type == EXPR_CONSTANT)
1296 gfc_extract_int (dim, &d);
1297 else
1298 d = -1;
1300 if (d > 0)
1302 int i, j;
1303 for (i = 0, j = 0; i < array->rank; i++)
1304 if (i != d - 1)
1306 if (!identical_dimen_shape (array, i, shift, j))
1308 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1309 "invalid shape in dimension %d (%ld/%ld)",
1310 gfc_current_intrinsic_arg[1]->name,
1311 gfc_current_intrinsic, &shift->where, i + 1,
1312 mpz_get_si (array->shape[i]),
1313 mpz_get_si (shift->shape[j]));
1314 return FAILURE;
1317 j += 1;
1321 else
1323 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1324 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1325 gfc_current_intrinsic, &shift->where, array->rank - 1);
1326 return FAILURE;
1329 return SUCCESS;
1333 gfc_try
1334 gfc_check_ctime (gfc_expr *time)
1336 if (scalar_check (time, 0) == FAILURE)
1337 return FAILURE;
1339 if (type_check (time, 0, BT_INTEGER) == FAILURE)
1340 return FAILURE;
1342 return SUCCESS;
1346 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1348 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
1349 return FAILURE;
1351 return SUCCESS;
1354 gfc_try
1355 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1357 if (numeric_check (x, 0) == FAILURE)
1358 return FAILURE;
1360 if (y != NULL)
1362 if (numeric_check (y, 1) == FAILURE)
1363 return FAILURE;
1365 if (x->ts.type == BT_COMPLEX)
1367 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1368 "present if 'x' is COMPLEX",
1369 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1370 &y->where);
1371 return FAILURE;
1374 if (y->ts.type == BT_COMPLEX)
1376 gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1377 "of either REAL or INTEGER",
1378 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1379 &y->where);
1380 return FAILURE;
1384 return SUCCESS;
1388 gfc_try
1389 gfc_check_dble (gfc_expr *x)
1391 if (numeric_check (x, 0) == FAILURE)
1392 return FAILURE;
1394 return SUCCESS;
1398 gfc_try
1399 gfc_check_digits (gfc_expr *x)
1401 if (int_or_real_check (x, 0) == FAILURE)
1402 return FAILURE;
1404 return SUCCESS;
1408 gfc_try
1409 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1411 switch (vector_a->ts.type)
1413 case BT_LOGICAL:
1414 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1415 return FAILURE;
1416 break;
1418 case BT_INTEGER:
1419 case BT_REAL:
1420 case BT_COMPLEX:
1421 if (numeric_check (vector_b, 1) == FAILURE)
1422 return FAILURE;
1423 break;
1425 default:
1426 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1427 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1428 gfc_current_intrinsic, &vector_a->where);
1429 return FAILURE;
1432 if (rank_check (vector_a, 0, 1) == FAILURE)
1433 return FAILURE;
1435 if (rank_check (vector_b, 1, 1) == FAILURE)
1436 return FAILURE;
1438 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1440 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1441 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0]->name,
1442 gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1443 return FAILURE;
1446 return SUCCESS;
1450 gfc_try
1451 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1453 if (type_check (x, 0, BT_REAL) == FAILURE
1454 || type_check (y, 1, BT_REAL) == FAILURE)
1455 return FAILURE;
1457 if (x->ts.kind != gfc_default_real_kind)
1459 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1460 "real", gfc_current_intrinsic_arg[0]->name,
1461 gfc_current_intrinsic, &x->where);
1462 return FAILURE;
1465 if (y->ts.kind != gfc_default_real_kind)
1467 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1468 "real", gfc_current_intrinsic_arg[1]->name,
1469 gfc_current_intrinsic, &y->where);
1470 return FAILURE;
1473 return SUCCESS;
1477 gfc_try
1478 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1480 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1481 return FAILURE;
1483 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1484 return FAILURE;
1486 if (same_type_check (i, 0, j, 1) == FAILURE)
1487 return FAILURE;
1489 if (type_check (shift, 2, BT_INTEGER) == FAILURE)
1490 return FAILURE;
1492 if (nonnegative_check ("SHIFT", shift) == FAILURE)
1493 return FAILURE;
1495 if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
1496 return FAILURE;
1498 return SUCCESS;
1502 gfc_try
1503 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1504 gfc_expr *dim)
1506 if (array_check (array, 0) == FAILURE)
1507 return FAILURE;
1509 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1510 return FAILURE;
1512 if (dim_check (dim, 3, true) == FAILURE)
1513 return FAILURE;
1515 if (dim_rank_check (dim, array, false) == FAILURE)
1516 return FAILURE;
1518 if (array->rank == 1 || shift->rank == 0)
1520 if (scalar_check (shift, 1) == FAILURE)
1521 return FAILURE;
1523 else if (shift->rank == array->rank - 1)
1525 int d;
1526 if (!dim)
1527 d = 1;
1528 else if (dim->expr_type == EXPR_CONSTANT)
1529 gfc_extract_int (dim, &d);
1530 else
1531 d = -1;
1533 if (d > 0)
1535 int i, j;
1536 for (i = 0, j = 0; i < array->rank; i++)
1537 if (i != d - 1)
1539 if (!identical_dimen_shape (array, i, shift, j))
1541 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1542 "invalid shape in dimension %d (%ld/%ld)",
1543 gfc_current_intrinsic_arg[1]->name,
1544 gfc_current_intrinsic, &shift->where, i + 1,
1545 mpz_get_si (array->shape[i]),
1546 mpz_get_si (shift->shape[j]));
1547 return FAILURE;
1550 j += 1;
1554 else
1556 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1557 "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1558 gfc_current_intrinsic, &shift->where, array->rank - 1);
1559 return FAILURE;
1562 if (boundary != NULL)
1564 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1565 return FAILURE;
1567 if (array->rank == 1 || boundary->rank == 0)
1569 if (scalar_check (boundary, 2) == FAILURE)
1570 return FAILURE;
1572 else if (boundary->rank == array->rank - 1)
1574 if (gfc_check_conformance (shift, boundary,
1575 "arguments '%s' and '%s' for "
1576 "intrinsic %s",
1577 gfc_current_intrinsic_arg[1]->name,
1578 gfc_current_intrinsic_arg[2]->name,
1579 gfc_current_intrinsic ) == FAILURE)
1580 return FAILURE;
1582 else
1584 gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1585 "rank %d or be a scalar",
1586 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1587 &shift->where, array->rank - 1);
1588 return FAILURE;
1592 return SUCCESS;
1595 gfc_try
1596 gfc_check_float (gfc_expr *a)
1598 if (type_check (a, 0, BT_INTEGER) == FAILURE)
1599 return FAILURE;
1601 if ((a->ts.kind != gfc_default_integer_kind)
1602 && gfc_notify_std (GFC_STD_GNU, "GNU extension: non-default INTEGER "
1603 "kind argument to %s intrinsic at %L",
1604 gfc_current_intrinsic, &a->where) == FAILURE )
1605 return FAILURE;
1607 return SUCCESS;
1610 /* A single complex argument. */
1612 gfc_try
1613 gfc_check_fn_c (gfc_expr *a)
1615 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1616 return FAILURE;
1618 return SUCCESS;
1621 /* A single real argument. */
1623 gfc_try
1624 gfc_check_fn_r (gfc_expr *a)
1626 if (type_check (a, 0, BT_REAL) == FAILURE)
1627 return FAILURE;
1629 return SUCCESS;
1632 /* A single double argument. */
1634 gfc_try
1635 gfc_check_fn_d (gfc_expr *a)
1637 if (double_check (a, 0) == FAILURE)
1638 return FAILURE;
1640 return SUCCESS;
1643 /* A single real or complex argument. */
1645 gfc_try
1646 gfc_check_fn_rc (gfc_expr *a)
1648 if (real_or_complex_check (a, 0) == FAILURE)
1649 return FAILURE;
1651 return SUCCESS;
1655 gfc_try
1656 gfc_check_fn_rc2008 (gfc_expr *a)
1658 if (real_or_complex_check (a, 0) == FAILURE)
1659 return FAILURE;
1661 if (a->ts.type == BT_COMPLEX
1662 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: COMPLEX argument '%s' "
1663 "argument of '%s' intrinsic at %L",
1664 gfc_current_intrinsic_arg[0]->name,
1665 gfc_current_intrinsic, &a->where) == FAILURE)
1666 return FAILURE;
1668 return SUCCESS;
1672 gfc_try
1673 gfc_check_fnum (gfc_expr *unit)
1675 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1676 return FAILURE;
1678 if (scalar_check (unit, 0) == FAILURE)
1679 return FAILURE;
1681 return SUCCESS;
1685 gfc_try
1686 gfc_check_huge (gfc_expr *x)
1688 if (int_or_real_check (x, 0) == FAILURE)
1689 return FAILURE;
1691 return SUCCESS;
1695 gfc_try
1696 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1698 if (type_check (x, 0, BT_REAL) == FAILURE)
1699 return FAILURE;
1700 if (same_type_check (x, 0, y, 1) == FAILURE)
1701 return FAILURE;
1703 return SUCCESS;
1707 /* Check that the single argument is an integer. */
1709 gfc_try
1710 gfc_check_i (gfc_expr *i)
1712 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1713 return FAILURE;
1715 return SUCCESS;
1719 gfc_try
1720 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1722 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1723 return FAILURE;
1725 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1726 return FAILURE;
1728 if (i->ts.kind != j->ts.kind)
1730 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1731 &i->where) == FAILURE)
1732 return FAILURE;
1735 return SUCCESS;
1739 gfc_try
1740 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1742 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1743 return FAILURE;
1745 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1746 return FAILURE;
1748 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1749 return FAILURE;
1751 if (nonnegative_check ("pos", pos) == FAILURE)
1752 return FAILURE;
1754 if (nonnegative_check ("len", len) == FAILURE)
1755 return FAILURE;
1757 if (less_than_bitsize2 ("i", i, "pos", pos, "len", len) == FAILURE)
1758 return FAILURE;
1760 return SUCCESS;
1764 gfc_try
1765 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1767 int i;
1769 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1770 return FAILURE;
1772 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1773 return FAILURE;
1775 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1776 "with KIND argument at %L",
1777 gfc_current_intrinsic, &kind->where) == FAILURE)
1778 return FAILURE;
1780 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1782 gfc_expr *start;
1783 gfc_expr *end;
1784 gfc_ref *ref;
1786 /* Substring references don't have the charlength set. */
1787 ref = c->ref;
1788 while (ref && ref->type != REF_SUBSTRING)
1789 ref = ref->next;
1791 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1793 if (!ref)
1795 /* Check that the argument is length one. Non-constant lengths
1796 can't be checked here, so assume they are ok. */
1797 if (c->ts.u.cl && c->ts.u.cl->length)
1799 /* If we already have a length for this expression then use it. */
1800 if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
1801 return SUCCESS;
1802 i = mpz_get_si (c->ts.u.cl->length->value.integer);
1804 else
1805 return SUCCESS;
1807 else
1809 start = ref->u.ss.start;
1810 end = ref->u.ss.end;
1812 gcc_assert (start);
1813 if (end == NULL || end->expr_type != EXPR_CONSTANT
1814 || start->expr_type != EXPR_CONSTANT)
1815 return SUCCESS;
1817 i = mpz_get_si (end->value.integer) + 1
1818 - mpz_get_si (start->value.integer);
1821 else
1822 return SUCCESS;
1824 if (i != 1)
1826 gfc_error ("Argument of %s at %L must be of length one",
1827 gfc_current_intrinsic, &c->where);
1828 return FAILURE;
1831 return SUCCESS;
1835 gfc_try
1836 gfc_check_idnint (gfc_expr *a)
1838 if (double_check (a, 0) == FAILURE)
1839 return FAILURE;
1841 return SUCCESS;
1845 gfc_try
1846 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1848 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1849 return FAILURE;
1851 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1852 return FAILURE;
1854 if (i->ts.kind != j->ts.kind)
1856 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1857 &i->where) == FAILURE)
1858 return FAILURE;
1861 return SUCCESS;
1865 gfc_try
1866 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1867 gfc_expr *kind)
1869 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1870 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1871 return FAILURE;
1873 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1874 return FAILURE;
1876 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1877 return FAILURE;
1878 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1879 "with KIND argument at %L",
1880 gfc_current_intrinsic, &kind->where) == FAILURE)
1881 return FAILURE;
1883 if (string->ts.kind != substring->ts.kind)
1885 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1886 "kind as '%s'", gfc_current_intrinsic_arg[1]->name,
1887 gfc_current_intrinsic, &substring->where,
1888 gfc_current_intrinsic_arg[0]->name);
1889 return FAILURE;
1892 return SUCCESS;
1896 gfc_try
1897 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1899 if (numeric_check (x, 0) == FAILURE)
1900 return FAILURE;
1902 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1903 return FAILURE;
1905 return SUCCESS;
1909 gfc_try
1910 gfc_check_intconv (gfc_expr *x)
1912 if (numeric_check (x, 0) == FAILURE)
1913 return FAILURE;
1915 return SUCCESS;
1919 gfc_try
1920 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1922 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1923 return FAILURE;
1925 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1926 return FAILURE;
1928 if (i->ts.kind != j->ts.kind)
1930 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1931 &i->where) == FAILURE)
1932 return FAILURE;
1935 return SUCCESS;
1939 gfc_try
1940 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1942 if (type_check (i, 0, BT_INTEGER) == FAILURE
1943 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1944 return FAILURE;
1946 if (less_than_bitsize1 ("I", i, NULL, shift, true) == FAILURE)
1947 return FAILURE;
1949 return SUCCESS;
1953 gfc_try
1954 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1956 if (type_check (i, 0, BT_INTEGER) == FAILURE
1957 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1958 return FAILURE;
1960 if (size != NULL)
1962 int i2, i3;
1964 if (type_check (size, 2, BT_INTEGER) == FAILURE)
1965 return FAILURE;
1967 if (less_than_bitsize1 ("I", i, "SIZE", size, true) == FAILURE)
1968 return FAILURE;
1970 gfc_extract_int (size, &i3);
1971 if (i3 <= 0)
1973 gfc_error ("SIZE at %L must be positive", &size->where);
1974 return FAILURE;
1977 gfc_extract_int (shift, &i2);
1978 if (i2 < 0)
1979 i2 = -i2;
1981 if (i2 > i3)
1983 gfc_error ("The absolute value of SHIFT at %L must be less than "
1984 "or equal to SIZE at %L", &shift->where, &size->where);
1985 return FAILURE;
1988 else if (less_than_bitsize1 ("I", i, NULL, shift, true) == FAILURE)
1989 return FAILURE;
1991 return SUCCESS;
1995 gfc_try
1996 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1998 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1999 return FAILURE;
2001 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
2002 return FAILURE;
2004 return SUCCESS;
2008 gfc_try
2009 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
2011 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
2012 return FAILURE;
2014 if (scalar_check (pid, 0) == FAILURE)
2015 return FAILURE;
2017 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
2018 return FAILURE;
2020 if (scalar_check (sig, 1) == FAILURE)
2021 return FAILURE;
2023 if (status == NULL)
2024 return SUCCESS;
2026 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2027 return FAILURE;
2029 if (scalar_check (status, 2) == FAILURE)
2030 return FAILURE;
2032 return SUCCESS;
2036 gfc_try
2037 gfc_check_kind (gfc_expr *x)
2039 if (x->ts.type == BT_DERIVED)
2041 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2042 "non-derived type", gfc_current_intrinsic_arg[0]->name,
2043 gfc_current_intrinsic, &x->where);
2044 return FAILURE;
2047 return SUCCESS;
2051 gfc_try
2052 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2054 if (array_check (array, 0) == FAILURE)
2055 return FAILURE;
2057 if (dim_check (dim, 1, false) == FAILURE)
2058 return FAILURE;
2060 if (dim_rank_check (dim, array, 1) == FAILURE)
2061 return FAILURE;
2063 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2064 return FAILURE;
2065 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2066 "with KIND argument at %L",
2067 gfc_current_intrinsic, &kind->where) == FAILURE)
2068 return FAILURE;
2070 return SUCCESS;
2074 gfc_try
2075 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
2077 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
2079 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2080 return FAILURE;
2083 if (coarray_check (coarray, 0) == FAILURE)
2084 return FAILURE;
2086 if (dim != NULL)
2088 if (dim_check (dim, 1, false) == FAILURE)
2089 return FAILURE;
2091 if (dim_corank_check (dim, coarray) == FAILURE)
2092 return FAILURE;
2095 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2096 return FAILURE;
2098 return SUCCESS;
2102 gfc_try
2103 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2105 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
2106 return FAILURE;
2108 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2109 return FAILURE;
2110 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2111 "with KIND argument at %L",
2112 gfc_current_intrinsic, &kind->where) == FAILURE)
2113 return FAILURE;
2115 return SUCCESS;
2119 gfc_try
2120 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2122 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2123 return FAILURE;
2124 if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
2125 return FAILURE;
2127 if (type_check (b, 1, BT_CHARACTER) == FAILURE)
2128 return FAILURE;
2129 if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
2130 return FAILURE;
2132 return SUCCESS;
2136 gfc_try
2137 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2139 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2140 return FAILURE;
2141 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2142 return FAILURE;
2144 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2145 return FAILURE;
2146 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2147 return FAILURE;
2149 return SUCCESS;
2153 gfc_try
2154 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2156 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2157 return FAILURE;
2158 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2159 return FAILURE;
2161 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2162 return FAILURE;
2163 if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
2164 return FAILURE;
2166 if (status == NULL)
2167 return SUCCESS;
2169 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2170 return FAILURE;
2172 if (scalar_check (status, 2) == FAILURE)
2173 return FAILURE;
2175 return SUCCESS;
2179 gfc_try
2180 gfc_check_loc (gfc_expr *expr)
2182 return variable_check (expr, 0, true);
2186 gfc_try
2187 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2189 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2190 return FAILURE;
2191 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2192 return FAILURE;
2194 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2195 return FAILURE;
2196 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2197 return FAILURE;
2199 return SUCCESS;
2203 gfc_try
2204 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2206 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2207 return FAILURE;
2208 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2209 return FAILURE;
2211 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2212 return FAILURE;
2213 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2214 return FAILURE;
2216 if (status == NULL)
2217 return SUCCESS;
2219 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2220 return FAILURE;
2222 if (scalar_check (status, 2) == FAILURE)
2223 return FAILURE;
2225 return SUCCESS;
2229 gfc_try
2230 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2232 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
2233 return FAILURE;
2234 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
2235 return FAILURE;
2237 return SUCCESS;
2241 /* Min/max family. */
2243 static gfc_try
2244 min_max_args (gfc_actual_arglist *arg)
2246 if (arg == NULL || arg->next == NULL)
2248 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2249 gfc_current_intrinsic, gfc_current_intrinsic_where);
2250 return FAILURE;
2253 return SUCCESS;
2257 static gfc_try
2258 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2260 gfc_actual_arglist *arg, *tmp;
2262 gfc_expr *x;
2263 int m, n;
2265 if (min_max_args (arglist) == FAILURE)
2266 return FAILURE;
2268 for (arg = arglist, n=1; arg; arg = arg->next, n++)
2270 x = arg->expr;
2271 if (x->ts.type != type || x->ts.kind != kind)
2273 if (x->ts.type == type)
2275 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
2276 "kinds at %L", &x->where) == FAILURE)
2277 return FAILURE;
2279 else
2281 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2282 "%s(%d)", n, gfc_current_intrinsic, &x->where,
2283 gfc_basic_typename (type), kind);
2284 return FAILURE;
2288 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2289 if (gfc_check_conformance (tmp->expr, x,
2290 "arguments 'a%d' and 'a%d' for "
2291 "intrinsic '%s'", m, n,
2292 gfc_current_intrinsic) == FAILURE)
2293 return FAILURE;
2296 return SUCCESS;
2300 gfc_try
2301 gfc_check_min_max (gfc_actual_arglist *arg)
2303 gfc_expr *x;
2305 if (min_max_args (arg) == FAILURE)
2306 return FAILURE;
2308 x = arg->expr;
2310 if (x->ts.type == BT_CHARACTER)
2312 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2313 "with CHARACTER argument at %L",
2314 gfc_current_intrinsic, &x->where) == FAILURE)
2315 return FAILURE;
2317 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2319 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2320 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2321 return FAILURE;
2324 return check_rest (x->ts.type, x->ts.kind, arg);
2328 gfc_try
2329 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2331 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2335 gfc_try
2336 gfc_check_min_max_real (gfc_actual_arglist *arg)
2338 return check_rest (BT_REAL, gfc_default_real_kind, arg);
2342 gfc_try
2343 gfc_check_min_max_double (gfc_actual_arglist *arg)
2345 return check_rest (BT_REAL, gfc_default_double_kind, arg);
2349 /* End of min/max family. */
2351 gfc_try
2352 gfc_check_malloc (gfc_expr *size)
2354 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2355 return FAILURE;
2357 if (scalar_check (size, 0) == FAILURE)
2358 return FAILURE;
2360 return SUCCESS;
2364 gfc_try
2365 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2367 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2369 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2370 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2371 gfc_current_intrinsic, &matrix_a->where);
2372 return FAILURE;
2375 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2377 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2378 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2379 gfc_current_intrinsic, &matrix_b->where);
2380 return FAILURE;
2383 if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2384 || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2386 gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2387 gfc_current_intrinsic, &matrix_a->where,
2388 gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2389 return FAILURE;
2392 switch (matrix_a->rank)
2394 case 1:
2395 if (rank_check (matrix_b, 1, 2) == FAILURE)
2396 return FAILURE;
2397 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
2398 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2400 gfc_error ("Different shape on dimension 1 for arguments '%s' "
2401 "and '%s' at %L for intrinsic matmul",
2402 gfc_current_intrinsic_arg[0]->name,
2403 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2404 return FAILURE;
2406 break;
2408 case 2:
2409 if (matrix_b->rank != 2)
2411 if (rank_check (matrix_b, 1, 1) == FAILURE)
2412 return FAILURE;
2414 /* matrix_b has rank 1 or 2 here. Common check for the cases
2415 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2416 - matrix_a has shape (n,m) and matrix_b has shape (m). */
2417 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2419 gfc_error ("Different shape on dimension 2 for argument '%s' and "
2420 "dimension 1 for argument '%s' at %L for intrinsic "
2421 "matmul", gfc_current_intrinsic_arg[0]->name,
2422 gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2423 return FAILURE;
2425 break;
2427 default:
2428 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2429 "1 or 2", gfc_current_intrinsic_arg[0]->name,
2430 gfc_current_intrinsic, &matrix_a->where);
2431 return FAILURE;
2434 return SUCCESS;
2438 /* Whoever came up with this interface was probably on something.
2439 The possibilities for the occupation of the second and third
2440 parameters are:
2442 Arg #2 Arg #3
2443 NULL NULL
2444 DIM NULL
2445 MASK NULL
2446 NULL MASK minloc(array, mask=m)
2447 DIM MASK
2449 I.e. in the case of minloc(array,mask), mask will be in the second
2450 position of the argument list and we'll have to fix that up. */
2452 gfc_try
2453 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
2455 gfc_expr *a, *m, *d;
2457 a = ap->expr;
2458 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
2459 return FAILURE;
2461 d = ap->next->expr;
2462 m = ap->next->next->expr;
2464 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2465 && ap->next->name == NULL)
2467 m = d;
2468 d = NULL;
2469 ap->next->expr = NULL;
2470 ap->next->next->expr = m;
2473 if (dim_check (d, 1, false) == FAILURE)
2474 return FAILURE;
2476 if (dim_rank_check (d, a, 0) == FAILURE)
2477 return FAILURE;
2479 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2480 return FAILURE;
2482 if (m != NULL
2483 && gfc_check_conformance (a, m,
2484 "arguments '%s' and '%s' for intrinsic %s",
2485 gfc_current_intrinsic_arg[0]->name,
2486 gfc_current_intrinsic_arg[2]->name,
2487 gfc_current_intrinsic ) == FAILURE)
2488 return FAILURE;
2490 return SUCCESS;
2494 /* Similar to minloc/maxloc, the argument list might need to be
2495 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
2496 difference is that MINLOC/MAXLOC take an additional KIND argument.
2497 The possibilities are:
2499 Arg #2 Arg #3
2500 NULL NULL
2501 DIM NULL
2502 MASK NULL
2503 NULL MASK minval(array, mask=m)
2504 DIM MASK
2506 I.e. in the case of minval(array,mask), mask will be in the second
2507 position of the argument list and we'll have to fix that up. */
2509 static gfc_try
2510 check_reduction (gfc_actual_arglist *ap)
2512 gfc_expr *a, *m, *d;
2514 a = ap->expr;
2515 d = ap->next->expr;
2516 m = ap->next->next->expr;
2518 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2519 && ap->next->name == NULL)
2521 m = d;
2522 d = NULL;
2523 ap->next->expr = NULL;
2524 ap->next->next->expr = m;
2527 if (dim_check (d, 1, false) == FAILURE)
2528 return FAILURE;
2530 if (dim_rank_check (d, a, 0) == FAILURE)
2531 return FAILURE;
2533 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2534 return FAILURE;
2536 if (m != NULL
2537 && gfc_check_conformance (a, m,
2538 "arguments '%s' and '%s' for intrinsic %s",
2539 gfc_current_intrinsic_arg[0]->name,
2540 gfc_current_intrinsic_arg[2]->name,
2541 gfc_current_intrinsic) == FAILURE)
2542 return FAILURE;
2544 return SUCCESS;
2548 gfc_try
2549 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2551 if (int_or_real_check (ap->expr, 0) == FAILURE
2552 || array_check (ap->expr, 0) == FAILURE)
2553 return FAILURE;
2555 return check_reduction (ap);
2559 gfc_try
2560 gfc_check_product_sum (gfc_actual_arglist *ap)
2562 if (numeric_check (ap->expr, 0) == FAILURE
2563 || array_check (ap->expr, 0) == FAILURE)
2564 return FAILURE;
2566 return check_reduction (ap);
2570 /* For IANY, IALL and IPARITY. */
2572 gfc_try
2573 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
2575 int k;
2577 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2578 return FAILURE;
2580 if (nonnegative_check ("I", i) == FAILURE)
2581 return FAILURE;
2583 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2584 return FAILURE;
2586 if (kind)
2587 gfc_extract_int (kind, &k);
2588 else
2589 k = gfc_default_integer_kind;
2591 if (less_than_bitsizekind ("I", i, k) == FAILURE)
2592 return FAILURE;
2594 return SUCCESS;
2598 gfc_try
2599 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
2601 if (ap->expr->ts.type != BT_INTEGER)
2603 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2604 gfc_current_intrinsic_arg[0]->name,
2605 gfc_current_intrinsic, &ap->expr->where);
2606 return FAILURE;
2609 if (array_check (ap->expr, 0) == FAILURE)
2610 return FAILURE;
2612 return check_reduction (ap);
2616 gfc_try
2617 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2619 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2620 return FAILURE;
2622 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2623 return FAILURE;
2625 if (tsource->ts.type == BT_CHARACTER)
2626 return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2628 return SUCCESS;
2632 gfc_try
2633 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
2635 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2636 return FAILURE;
2638 if (type_check (j, 1, BT_INTEGER) == FAILURE)
2639 return FAILURE;
2641 if (type_check (mask, 2, BT_INTEGER) == FAILURE)
2642 return FAILURE;
2644 if (same_type_check (i, 0, j, 1) == FAILURE)
2645 return FAILURE;
2647 if (same_type_check (i, 0, mask, 2) == FAILURE)
2648 return FAILURE;
2650 return SUCCESS;
2654 gfc_try
2655 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2657 if (variable_check (from, 0, false) == FAILURE)
2658 return FAILURE;
2659 if (allocatable_check (from, 0) == FAILURE)
2660 return FAILURE;
2662 if (variable_check (to, 1, false) == FAILURE)
2663 return FAILURE;
2664 if (allocatable_check (to, 1) == FAILURE)
2665 return FAILURE;
2667 if (same_type_check (to, 1, from, 0) == FAILURE)
2668 return FAILURE;
2670 if (to->rank != from->rank)
2672 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2673 "have the same rank %d/%d", gfc_current_intrinsic_arg[0]->name,
2674 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2675 &to->where, from->rank, to->rank);
2676 return FAILURE;
2679 if (to->ts.kind != from->ts.kind)
2681 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2682 "be of the same kind %d/%d",
2683 gfc_current_intrinsic_arg[0]->name,
2684 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2685 &to->where, from->ts.kind, to->ts.kind);
2686 return FAILURE;
2689 /* CLASS arguments: Make sure the vtab is present. */
2690 if (to->ts.type == BT_CLASS)
2691 gfc_find_derived_vtab (from->ts.u.derived);
2693 return SUCCESS;
2697 gfc_try
2698 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2700 if (type_check (x, 0, BT_REAL) == FAILURE)
2701 return FAILURE;
2703 if (type_check (s, 1, BT_REAL) == FAILURE)
2704 return FAILURE;
2706 return SUCCESS;
2710 gfc_try
2711 gfc_check_new_line (gfc_expr *a)
2713 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2714 return FAILURE;
2716 return SUCCESS;
2720 gfc_try
2721 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
2723 if (type_check (array, 0, BT_REAL) == FAILURE)
2724 return FAILURE;
2726 if (array_check (array, 0) == FAILURE)
2727 return FAILURE;
2729 if (dim_rank_check (dim, array, false) == FAILURE)
2730 return FAILURE;
2732 return SUCCESS;
2735 gfc_try
2736 gfc_check_null (gfc_expr *mold)
2738 symbol_attribute attr;
2740 if (mold == NULL)
2741 return SUCCESS;
2743 if (variable_check (mold, 0, true) == FAILURE)
2744 return FAILURE;
2746 attr = gfc_variable_attr (mold, NULL);
2748 if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
2750 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2751 "ALLOCATABLE or procedure pointer",
2752 gfc_current_intrinsic_arg[0]->name,
2753 gfc_current_intrinsic, &mold->where);
2754 return FAILURE;
2757 if (attr.allocatable
2758 && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: NULL intrinsic with "
2759 "allocatable MOLD at %L", &mold->where) == FAILURE)
2760 return FAILURE;
2762 /* F2008, C1242. */
2763 if (gfc_is_coindexed (mold))
2765 gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2766 "conindexed", gfc_current_intrinsic_arg[0]->name,
2767 gfc_current_intrinsic, &mold->where);
2768 return FAILURE;
2771 return SUCCESS;
2775 gfc_try
2776 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2778 if (array_check (array, 0) == FAILURE)
2779 return FAILURE;
2781 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2782 return FAILURE;
2784 if (gfc_check_conformance (array, mask,
2785 "arguments '%s' and '%s' for intrinsic '%s'",
2786 gfc_current_intrinsic_arg[0]->name,
2787 gfc_current_intrinsic_arg[1]->name,
2788 gfc_current_intrinsic) == FAILURE)
2789 return FAILURE;
2791 if (vector != NULL)
2793 mpz_t array_size, vector_size;
2794 bool have_array_size, have_vector_size;
2796 if (same_type_check (array, 0, vector, 2) == FAILURE)
2797 return FAILURE;
2799 if (rank_check (vector, 2, 1) == FAILURE)
2800 return FAILURE;
2802 /* VECTOR requires at least as many elements as MASK
2803 has .TRUE. values. */
2804 have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2805 have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2807 if (have_vector_size
2808 && (mask->expr_type == EXPR_ARRAY
2809 || (mask->expr_type == EXPR_CONSTANT
2810 && have_array_size)))
2812 int mask_true_values = 0;
2814 if (mask->expr_type == EXPR_ARRAY)
2816 gfc_constructor *mask_ctor;
2817 mask_ctor = gfc_constructor_first (mask->value.constructor);
2818 while (mask_ctor)
2820 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2822 mask_true_values = 0;
2823 break;
2826 if (mask_ctor->expr->value.logical)
2827 mask_true_values++;
2829 mask_ctor = gfc_constructor_next (mask_ctor);
2832 else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2833 mask_true_values = mpz_get_si (array_size);
2835 if (mpz_get_si (vector_size) < mask_true_values)
2837 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2838 "provide at least as many elements as there "
2839 "are .TRUE. values in '%s' (%ld/%d)",
2840 gfc_current_intrinsic_arg[2]->name,
2841 gfc_current_intrinsic, &vector->where,
2842 gfc_current_intrinsic_arg[1]->name,
2843 mpz_get_si (vector_size), mask_true_values);
2844 return FAILURE;
2848 if (have_array_size)
2849 mpz_clear (array_size);
2850 if (have_vector_size)
2851 mpz_clear (vector_size);
2854 return SUCCESS;
2858 gfc_try
2859 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
2861 if (type_check (mask, 0, BT_LOGICAL) == FAILURE)
2862 return FAILURE;
2864 if (array_check (mask, 0) == FAILURE)
2865 return FAILURE;
2867 if (dim_rank_check (dim, mask, false) == FAILURE)
2868 return FAILURE;
2870 return SUCCESS;
2874 gfc_try
2875 gfc_check_precision (gfc_expr *x)
2877 if (real_or_complex_check (x, 0) == FAILURE)
2878 return FAILURE;
2880 return SUCCESS;
2884 gfc_try
2885 gfc_check_present (gfc_expr *a)
2887 gfc_symbol *sym;
2889 if (variable_check (a, 0, true) == FAILURE)
2890 return FAILURE;
2892 sym = a->symtree->n.sym;
2893 if (!sym->attr.dummy)
2895 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2896 "dummy variable", gfc_current_intrinsic_arg[0]->name,
2897 gfc_current_intrinsic, &a->where);
2898 return FAILURE;
2901 if (!sym->attr.optional)
2903 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2904 "an OPTIONAL dummy variable",
2905 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
2906 &a->where);
2907 return FAILURE;
2910 /* 13.14.82 PRESENT(A)
2911 ......
2912 Argument. A shall be the name of an optional dummy argument that is
2913 accessible in the subprogram in which the PRESENT function reference
2914 appears... */
2916 if (a->ref != NULL
2917 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2918 && (a->ref->u.ar.type == AR_FULL
2919 || (a->ref->u.ar.type == AR_ELEMENT
2920 && a->ref->u.ar.as->rank == 0))))
2922 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2923 "subobject of '%s'", gfc_current_intrinsic_arg[0]->name,
2924 gfc_current_intrinsic, &a->where, sym->name);
2925 return FAILURE;
2928 return SUCCESS;
2932 gfc_try
2933 gfc_check_radix (gfc_expr *x)
2935 if (int_or_real_check (x, 0) == FAILURE)
2936 return FAILURE;
2938 return SUCCESS;
2942 gfc_try
2943 gfc_check_range (gfc_expr *x)
2945 if (numeric_check (x, 0) == FAILURE)
2946 return FAILURE;
2948 return SUCCESS;
2952 gfc_try
2953 gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
2955 /* Any data object is allowed; a "data object" is a "constant (4.1.3),
2956 variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
2958 bool is_variable = true;
2960 /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
2961 if (a->expr_type == EXPR_FUNCTION)
2962 is_variable = a->value.function.esym
2963 ? a->value.function.esym->result->attr.pointer
2964 : a->symtree->n.sym->result->attr.pointer;
2966 if (a->expr_type == EXPR_OP || a->expr_type == EXPR_NULL
2967 || a->expr_type == EXPR_COMPCALL|| a->expr_type == EXPR_PPC
2968 || !is_variable)
2970 gfc_error ("The argument of the RANK intrinsic at %L must be a data "
2971 "object", &a->where);
2972 return FAILURE;
2975 return SUCCESS;
2979 /* real, float, sngl. */
2980 gfc_try
2981 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2983 if (numeric_check (a, 0) == FAILURE)
2984 return FAILURE;
2986 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2987 return FAILURE;
2989 return SUCCESS;
2993 gfc_try
2994 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2996 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2997 return FAILURE;
2998 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2999 return FAILURE;
3001 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
3002 return FAILURE;
3003 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
3004 return FAILURE;
3006 return SUCCESS;
3010 gfc_try
3011 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3013 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
3014 return FAILURE;
3015 if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
3016 return FAILURE;
3018 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
3019 return FAILURE;
3020 if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
3021 return FAILURE;
3023 if (status == NULL)
3024 return SUCCESS;
3026 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3027 return FAILURE;
3029 if (scalar_check (status, 2) == FAILURE)
3030 return FAILURE;
3032 return SUCCESS;
3036 gfc_try
3037 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
3039 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3040 return FAILURE;
3042 if (scalar_check (x, 0) == FAILURE)
3043 return FAILURE;
3045 if (type_check (y, 0, BT_INTEGER) == FAILURE)
3046 return FAILURE;
3048 if (scalar_check (y, 1) == FAILURE)
3049 return FAILURE;
3051 return SUCCESS;
3055 gfc_try
3056 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
3057 gfc_expr *pad, gfc_expr *order)
3059 mpz_t size;
3060 mpz_t nelems;
3061 int shape_size;
3063 if (array_check (source, 0) == FAILURE)
3064 return FAILURE;
3066 if (rank_check (shape, 1, 1) == FAILURE)
3067 return FAILURE;
3069 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
3070 return FAILURE;
3072 if (gfc_array_size (shape, &size) != SUCCESS)
3074 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3075 "array of constant size", &shape->where);
3076 return FAILURE;
3079 shape_size = mpz_get_ui (size);
3080 mpz_clear (size);
3082 if (shape_size <= 0)
3084 gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3085 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3086 &shape->where);
3087 return FAILURE;
3089 else if (shape_size > GFC_MAX_DIMENSIONS)
3091 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3092 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
3093 return FAILURE;
3095 else if (shape->expr_type == EXPR_ARRAY)
3097 gfc_expr *e;
3098 int i, extent;
3099 for (i = 0; i < shape_size; ++i)
3101 e = gfc_constructor_lookup_expr (shape->value.constructor, i);
3102 if (e->expr_type != EXPR_CONSTANT)
3103 continue;
3105 gfc_extract_int (e, &extent);
3106 if (extent < 0)
3108 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3109 "negative element (%d)",
3110 gfc_current_intrinsic_arg[1]->name,
3111 gfc_current_intrinsic, &e->where, extent);
3112 return FAILURE;
3117 if (pad != NULL)
3119 if (same_type_check (source, 0, pad, 2) == FAILURE)
3120 return FAILURE;
3122 if (array_check (pad, 2) == FAILURE)
3123 return FAILURE;
3126 if (order != NULL)
3128 if (array_check (order, 3) == FAILURE)
3129 return FAILURE;
3131 if (type_check (order, 3, BT_INTEGER) == FAILURE)
3132 return FAILURE;
3134 if (order->expr_type == EXPR_ARRAY)
3136 int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
3137 gfc_expr *e;
3139 for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
3140 perm[i] = 0;
3142 gfc_array_size (order, &size);
3143 order_size = mpz_get_ui (size);
3144 mpz_clear (size);
3146 if (order_size != shape_size)
3148 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3149 "has wrong number of elements (%d/%d)",
3150 gfc_current_intrinsic_arg[3]->name,
3151 gfc_current_intrinsic, &order->where,
3152 order_size, shape_size);
3153 return FAILURE;
3156 for (i = 1; i <= order_size; ++i)
3158 e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3159 if (e->expr_type != EXPR_CONSTANT)
3160 continue;
3162 gfc_extract_int (e, &dim);
3164 if (dim < 1 || dim > order_size)
3166 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3167 "has out-of-range dimension (%d)",
3168 gfc_current_intrinsic_arg[3]->name,
3169 gfc_current_intrinsic, &e->where, dim);
3170 return FAILURE;
3173 if (perm[dim-1] != 0)
3175 gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3176 "invalid permutation of dimensions (dimension "
3177 "'%d' duplicated)",
3178 gfc_current_intrinsic_arg[3]->name,
3179 gfc_current_intrinsic, &e->where, dim);
3180 return FAILURE;
3183 perm[dim-1] = 1;
3188 if (pad == NULL && shape->expr_type == EXPR_ARRAY
3189 && gfc_is_constant_expr (shape)
3190 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3191 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3193 /* Check the match in size between source and destination. */
3194 if (gfc_array_size (source, &nelems) == SUCCESS)
3196 gfc_constructor *c;
3197 bool test;
3200 mpz_init_set_ui (size, 1);
3201 for (c = gfc_constructor_first (shape->value.constructor);
3202 c; c = gfc_constructor_next (c))
3203 mpz_mul (size, size, c->expr->value.integer);
3205 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3206 mpz_clear (nelems);
3207 mpz_clear (size);
3209 if (test)
3211 gfc_error ("Without padding, there are not enough elements "
3212 "in the intrinsic RESHAPE source at %L to match "
3213 "the shape", &source->where);
3214 return FAILURE;
3219 return SUCCESS;
3223 gfc_try
3224 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3227 if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3229 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3230 "must be of a derived type",
3231 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3232 &a->where);
3233 return FAILURE;
3236 if (!gfc_type_is_extensible (a->ts.u.derived))
3238 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3239 "must be of an extensible type",
3240 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3241 &a->where);
3242 return FAILURE;
3245 if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3247 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3248 "must be of a derived type",
3249 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3250 &b->where);
3251 return FAILURE;
3254 if (!gfc_type_is_extensible (b->ts.u.derived))
3256 gfc_error ("'%s' argument of '%s' intrinsic at %L "
3257 "must be of an extensible type",
3258 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3259 &b->where);
3260 return FAILURE;
3263 return SUCCESS;
3267 gfc_try
3268 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3270 if (type_check (x, 0, BT_REAL) == FAILURE)
3271 return FAILURE;
3273 if (type_check (i, 1, BT_INTEGER) == FAILURE)
3274 return FAILURE;
3276 return SUCCESS;
3280 gfc_try
3281 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3283 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3284 return FAILURE;
3286 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
3287 return FAILURE;
3289 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3290 return FAILURE;
3292 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3293 return FAILURE;
3294 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3295 "with KIND argument at %L",
3296 gfc_current_intrinsic, &kind->where) == FAILURE)
3297 return FAILURE;
3299 if (same_type_check (x, 0, y, 1) == FAILURE)
3300 return FAILURE;
3302 return SUCCESS;
3306 gfc_try
3307 gfc_check_secnds (gfc_expr *r)
3309 if (type_check (r, 0, BT_REAL) == FAILURE)
3310 return FAILURE;
3312 if (kind_value_check (r, 0, 4) == FAILURE)
3313 return FAILURE;
3315 if (scalar_check (r, 0) == FAILURE)
3316 return FAILURE;
3318 return SUCCESS;
3322 gfc_try
3323 gfc_check_selected_char_kind (gfc_expr *name)
3325 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3326 return FAILURE;
3328 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3329 return FAILURE;
3331 if (scalar_check (name, 0) == FAILURE)
3332 return FAILURE;
3334 return SUCCESS;
3338 gfc_try
3339 gfc_check_selected_int_kind (gfc_expr *r)
3341 if (type_check (r, 0, BT_INTEGER) == FAILURE)
3342 return FAILURE;
3344 if (scalar_check (r, 0) == FAILURE)
3345 return FAILURE;
3347 return SUCCESS;
3351 gfc_try
3352 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3354 if (p == NULL && r == NULL
3355 && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: SELECTED_REAL_KIND with"
3356 " neither 'P' nor 'R' argument at %L",
3357 gfc_current_intrinsic_where) == FAILURE)
3358 return FAILURE;
3360 if (p)
3362 if (type_check (p, 0, BT_INTEGER) == FAILURE)
3363 return FAILURE;
3365 if (scalar_check (p, 0) == FAILURE)
3366 return FAILURE;
3369 if (r)
3371 if (type_check (r, 1, BT_INTEGER) == FAILURE)
3372 return FAILURE;
3374 if (scalar_check (r, 1) == FAILURE)
3375 return FAILURE;
3378 if (radix)
3380 if (type_check (radix, 1, BT_INTEGER) == FAILURE)
3381 return FAILURE;
3383 if (scalar_check (radix, 1) == FAILURE)
3384 return FAILURE;
3386 if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: '%s' intrinsic with "
3387 "RADIX argument at %L", gfc_current_intrinsic,
3388 &radix->where) == FAILURE)
3389 return FAILURE;
3392 return SUCCESS;
3396 gfc_try
3397 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3399 if (type_check (x, 0, BT_REAL) == FAILURE)
3400 return FAILURE;
3402 if (type_check (i, 1, BT_INTEGER) == FAILURE)
3403 return FAILURE;
3405 return SUCCESS;
3409 gfc_try
3410 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
3412 gfc_array_ref *ar;
3414 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
3415 return SUCCESS;
3417 ar = gfc_find_array_ref (source);
3419 if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
3421 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3422 "an assumed size array", &source->where);
3423 return FAILURE;
3426 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
3427 return FAILURE;
3428 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3429 "with KIND argument at %L",
3430 gfc_current_intrinsic, &kind->where) == FAILURE)
3431 return FAILURE;
3433 return SUCCESS;
3437 gfc_try
3438 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
3440 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3441 return FAILURE;
3443 if (type_check (shift, 0, BT_INTEGER) == FAILURE)
3444 return FAILURE;
3446 if (nonnegative_check ("SHIFT", shift) == FAILURE)
3447 return FAILURE;
3449 if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
3450 return FAILURE;
3452 return SUCCESS;
3456 gfc_try
3457 gfc_check_sign (gfc_expr *a, gfc_expr *b)
3459 if (int_or_real_check (a, 0) == FAILURE)
3460 return FAILURE;
3462 if (same_type_check (a, 0, b, 1) == FAILURE)
3463 return FAILURE;
3465 return SUCCESS;
3469 gfc_try
3470 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3472 if (array_check (array, 0) == FAILURE)
3473 return FAILURE;
3475 if (dim_check (dim, 1, true) == FAILURE)
3476 return FAILURE;
3478 if (dim_rank_check (dim, array, 0) == FAILURE)
3479 return FAILURE;
3481 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3482 return FAILURE;
3483 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3484 "with KIND argument at %L",
3485 gfc_current_intrinsic, &kind->where) == FAILURE)
3486 return FAILURE;
3489 return SUCCESS;
3493 gfc_try
3494 gfc_check_sizeof (gfc_expr *arg)
3496 if (arg->ts.type == BT_PROCEDURE)
3498 gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
3499 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3500 &arg->where);
3501 return FAILURE;
3503 return SUCCESS;
3507 gfc_try
3508 gfc_check_c_sizeof (gfc_expr *arg)
3510 if (gfc_verify_c_interop (&arg->ts) != SUCCESS)
3512 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3513 "interoperable data entity",
3514 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3515 &arg->where);
3516 return FAILURE;
3518 return SUCCESS;
3522 gfc_try
3523 gfc_check_sleep_sub (gfc_expr *seconds)
3525 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3526 return FAILURE;
3528 if (scalar_check (seconds, 0) == FAILURE)
3529 return FAILURE;
3531 return SUCCESS;
3534 gfc_try
3535 gfc_check_sngl (gfc_expr *a)
3537 if (type_check (a, 0, BT_REAL) == FAILURE)
3538 return FAILURE;
3540 if ((a->ts.kind != gfc_default_double_kind)
3541 && gfc_notify_std (GFC_STD_GNU, "GNU extension: non double precision "
3542 "REAL argument to %s intrinsic at %L",
3543 gfc_current_intrinsic, &a->where) == FAILURE)
3544 return FAILURE;
3546 return SUCCESS;
3549 gfc_try
3550 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
3552 if (source->rank >= GFC_MAX_DIMENSIONS)
3554 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3555 "than rank %d", gfc_current_intrinsic_arg[0]->name,
3556 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
3558 return FAILURE;
3561 if (dim == NULL)
3562 return FAILURE;
3564 if (dim_check (dim, 1, false) == FAILURE)
3565 return FAILURE;
3567 /* dim_rank_check() does not apply here. */
3568 if (dim
3569 && dim->expr_type == EXPR_CONSTANT
3570 && (mpz_cmp_ui (dim->value.integer, 1) < 0
3571 || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
3573 gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3574 "dimension index", gfc_current_intrinsic_arg[1]->name,
3575 gfc_current_intrinsic, &dim->where);
3576 return FAILURE;
3579 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
3580 return FAILURE;
3582 if (scalar_check (ncopies, 2) == FAILURE)
3583 return FAILURE;
3585 return SUCCESS;
3589 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3590 functions). */
3592 gfc_try
3593 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
3595 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3596 return FAILURE;
3598 if (scalar_check (unit, 0) == FAILURE)
3599 return FAILURE;
3601 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
3602 return FAILURE;
3603 if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
3604 return FAILURE;
3606 if (status == NULL)
3607 return SUCCESS;
3609 if (type_check (status, 2, BT_INTEGER) == FAILURE
3610 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
3611 || scalar_check (status, 2) == FAILURE)
3612 return FAILURE;
3614 return SUCCESS;
3618 gfc_try
3619 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
3621 return gfc_check_fgetputc_sub (unit, c, NULL);
3625 gfc_try
3626 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
3628 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
3629 return FAILURE;
3630 if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
3631 return FAILURE;
3633 if (status == NULL)
3634 return SUCCESS;
3636 if (type_check (status, 1, BT_INTEGER) == FAILURE
3637 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
3638 || scalar_check (status, 1) == FAILURE)
3639 return FAILURE;
3641 return SUCCESS;
3645 gfc_try
3646 gfc_check_fgetput (gfc_expr *c)
3648 return gfc_check_fgetput_sub (c, NULL);
3652 gfc_try
3653 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
3655 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3656 return FAILURE;
3658 if (scalar_check (unit, 0) == FAILURE)
3659 return FAILURE;
3661 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3662 return FAILURE;
3664 if (scalar_check (offset, 1) == FAILURE)
3665 return FAILURE;
3667 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
3668 return FAILURE;
3670 if (scalar_check (whence, 2) == FAILURE)
3671 return FAILURE;
3673 if (status == NULL)
3674 return SUCCESS;
3676 if (type_check (status, 3, BT_INTEGER) == FAILURE)
3677 return FAILURE;
3679 if (kind_value_check (status, 3, 4) == FAILURE)
3680 return FAILURE;
3682 if (scalar_check (status, 3) == FAILURE)
3683 return FAILURE;
3685 return SUCCESS;
3690 gfc_try
3691 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
3693 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3694 return FAILURE;
3696 if (scalar_check (unit, 0) == FAILURE)
3697 return FAILURE;
3699 if (type_check (array, 1, BT_INTEGER) == FAILURE
3700 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
3701 return FAILURE;
3703 if (array_check (array, 1) == FAILURE)
3704 return FAILURE;
3706 return SUCCESS;
3710 gfc_try
3711 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
3713 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3714 return FAILURE;
3716 if (scalar_check (unit, 0) == FAILURE)
3717 return FAILURE;
3719 if (type_check (array, 1, BT_INTEGER) == FAILURE
3720 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3721 return FAILURE;
3723 if (array_check (array, 1) == FAILURE)
3724 return FAILURE;
3726 if (status == NULL)
3727 return SUCCESS;
3729 if (type_check (status, 2, BT_INTEGER) == FAILURE
3730 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3731 return FAILURE;
3733 if (scalar_check (status, 2) == FAILURE)
3734 return FAILURE;
3736 return SUCCESS;
3740 gfc_try
3741 gfc_check_ftell (gfc_expr *unit)
3743 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3744 return FAILURE;
3746 if (scalar_check (unit, 0) == FAILURE)
3747 return FAILURE;
3749 return SUCCESS;
3753 gfc_try
3754 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3756 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3757 return FAILURE;
3759 if (scalar_check (unit, 0) == FAILURE)
3760 return FAILURE;
3762 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3763 return FAILURE;
3765 if (scalar_check (offset, 1) == FAILURE)
3766 return FAILURE;
3768 return SUCCESS;
3772 gfc_try
3773 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3775 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3776 return FAILURE;
3777 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3778 return FAILURE;
3780 if (type_check (array, 1, BT_INTEGER) == FAILURE
3781 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3782 return FAILURE;
3784 if (array_check (array, 1) == FAILURE)
3785 return FAILURE;
3787 return SUCCESS;
3791 gfc_try
3792 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3794 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3795 return FAILURE;
3796 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3797 return FAILURE;
3799 if (type_check (array, 1, BT_INTEGER) == FAILURE
3800 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3801 return FAILURE;
3803 if (array_check (array, 1) == FAILURE)
3804 return FAILURE;
3806 if (status == NULL)
3807 return SUCCESS;
3809 if (type_check (status, 2, BT_INTEGER) == FAILURE
3810 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3811 return FAILURE;
3813 if (scalar_check (status, 2) == FAILURE)
3814 return FAILURE;
3816 return SUCCESS;
3820 gfc_try
3821 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
3823 mpz_t nelems;
3825 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3827 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3828 return FAILURE;
3831 if (coarray_check (coarray, 0) == FAILURE)
3832 return FAILURE;
3834 if (sub->rank != 1)
3836 gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3837 gfc_current_intrinsic_arg[1]->name, &sub->where);
3838 return FAILURE;
3841 if (gfc_array_size (sub, &nelems) == SUCCESS)
3843 int corank = gfc_get_corank (coarray);
3845 if (mpz_cmp_ui (nelems, corank) != 0)
3847 gfc_error ("The number of array elements of the SUB argument to "
3848 "IMAGE_INDEX at %L shall be %d (corank) not %d",
3849 &sub->where, corank, (int) mpz_get_si (nelems));
3850 mpz_clear (nelems);
3851 return FAILURE;
3853 mpz_clear (nelems);
3856 return SUCCESS;
3860 gfc_try
3861 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim)
3863 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3865 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3866 return FAILURE;
3869 if (dim != NULL && coarray == NULL)
3871 gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3872 "intrinsic at %L", &dim->where);
3873 return FAILURE;
3876 if (coarray == NULL)
3877 return SUCCESS;
3879 if (coarray_check (coarray, 0) == FAILURE)
3880 return FAILURE;
3882 if (dim != NULL)
3884 if (dim_check (dim, 1, false) == FAILURE)
3885 return FAILURE;
3887 if (dim_corank_check (dim, coarray) == FAILURE)
3888 return FAILURE;
3891 return SUCCESS;
3894 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
3895 by gfc_simplify_transfer. Return FAILURE if we cannot do so. */
3897 gfc_try
3898 gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
3899 size_t *source_size, size_t *result_size,
3900 size_t *result_length_p)
3903 size_t result_elt_size;
3904 mpz_t tmp;
3905 gfc_expr *mold_element;
3907 if (source->expr_type == EXPR_FUNCTION)
3908 return FAILURE;
3910 /* Calculate the size of the source. */
3911 if (source->expr_type == EXPR_ARRAY
3912 && gfc_array_size (source, &tmp) == FAILURE)
3913 return FAILURE;
3915 *source_size = gfc_target_expr_size (source);
3917 mold_element = mold->expr_type == EXPR_ARRAY
3918 ? gfc_constructor_first (mold->value.constructor)->expr
3919 : mold;
3921 /* Determine the size of the element. */
3922 result_elt_size = gfc_target_expr_size (mold_element);
3923 if (result_elt_size == 0)
3924 return FAILURE;
3926 if (mold->expr_type == EXPR_ARRAY || mold->rank || size)
3928 int result_length;
3930 if (size)
3931 result_length = (size_t)mpz_get_ui (size->value.integer);
3932 else
3934 result_length = *source_size / result_elt_size;
3935 if (result_length * result_elt_size < *source_size)
3936 result_length += 1;
3939 *result_size = result_length * result_elt_size;
3940 if (result_length_p)
3941 *result_length_p = result_length;
3943 else
3944 *result_size = result_elt_size;
3946 return SUCCESS;
3950 gfc_try
3951 gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
3953 size_t source_size;
3954 size_t result_size;
3956 if (mold->ts.type == BT_HOLLERITH)
3958 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
3959 &mold->where, gfc_basic_typename (BT_HOLLERITH));
3960 return FAILURE;
3963 if (size != NULL)
3965 if (type_check (size, 2, BT_INTEGER) == FAILURE)
3966 return FAILURE;
3968 if (scalar_check (size, 2) == FAILURE)
3969 return FAILURE;
3971 if (nonoptional_check (size, 2) == FAILURE)
3972 return FAILURE;
3975 if (!gfc_option.warn_surprising)
3976 return SUCCESS;
3978 /* If we can't calculate the sizes, we cannot check any more.
3979 Return SUCCESS for that case. */
3981 if (gfc_calculate_transfer_sizes (source, mold, size, &source_size,
3982 &result_size, NULL) == FAILURE)
3983 return SUCCESS;
3985 if (source_size < result_size)
3986 gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
3987 "source size %ld < result size %ld", &source->where,
3988 (long) source_size, (long) result_size);
3990 return SUCCESS;
3994 gfc_try
3995 gfc_check_transpose (gfc_expr *matrix)
3997 if (rank_check (matrix, 0, 2) == FAILURE)
3998 return FAILURE;
4000 return SUCCESS;
4004 gfc_try
4005 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
4007 if (array_check (array, 0) == FAILURE)
4008 return FAILURE;
4010 if (dim_check (dim, 1, false) == FAILURE)
4011 return FAILURE;
4013 if (dim_rank_check (dim, array, 0) == FAILURE)
4014 return FAILURE;
4016 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
4017 return FAILURE;
4018 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
4019 "with KIND argument at %L",
4020 gfc_current_intrinsic, &kind->where) == FAILURE)
4021 return FAILURE;
4023 return SUCCESS;
4027 gfc_try
4028 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
4030 if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4032 gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4033 return FAILURE;
4036 if (coarray_check (coarray, 0) == FAILURE)
4037 return FAILURE;
4039 if (dim != NULL)
4041 if (dim_check (dim, 1, false) == FAILURE)
4042 return FAILURE;
4044 if (dim_corank_check (dim, coarray) == FAILURE)
4045 return FAILURE;
4048 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
4049 return FAILURE;
4051 return SUCCESS;
4055 gfc_try
4056 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
4058 mpz_t vector_size;
4060 if (rank_check (vector, 0, 1) == FAILURE)
4061 return FAILURE;
4063 if (array_check (mask, 1) == FAILURE)
4064 return FAILURE;
4066 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
4067 return FAILURE;
4069 if (same_type_check (vector, 0, field, 2) == FAILURE)
4070 return FAILURE;
4072 if (mask->expr_type == EXPR_ARRAY
4073 && gfc_array_size (vector, &vector_size) == SUCCESS)
4075 int mask_true_count = 0;
4076 gfc_constructor *mask_ctor;
4077 mask_ctor = gfc_constructor_first (mask->value.constructor);
4078 while (mask_ctor)
4080 if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
4082 mask_true_count = 0;
4083 break;
4086 if (mask_ctor->expr->value.logical)
4087 mask_true_count++;
4089 mask_ctor = gfc_constructor_next (mask_ctor);
4092 if (mpz_get_si (vector_size) < mask_true_count)
4094 gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4095 "provide at least as many elements as there "
4096 "are .TRUE. values in '%s' (%ld/%d)",
4097 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4098 &vector->where, gfc_current_intrinsic_arg[1]->name,
4099 mpz_get_si (vector_size), mask_true_count);
4100 return FAILURE;
4103 mpz_clear (vector_size);
4106 if (mask->rank != field->rank && field->rank != 0)
4108 gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4109 "the same rank as '%s' or be a scalar",
4110 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
4111 &field->where, gfc_current_intrinsic_arg[1]->name);
4112 return FAILURE;
4115 if (mask->rank == field->rank)
4117 int i;
4118 for (i = 0; i < field->rank; i++)
4119 if (! identical_dimen_shape (mask, i, field, i))
4121 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4122 "must have identical shape.",
4123 gfc_current_intrinsic_arg[2]->name,
4124 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4125 &field->where);
4129 return SUCCESS;
4133 gfc_try
4134 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
4136 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
4137 return FAILURE;
4139 if (same_type_check (x, 0, y, 1) == FAILURE)
4140 return FAILURE;
4142 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
4143 return FAILURE;
4145 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
4146 return FAILURE;
4147 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
4148 "with KIND argument at %L",
4149 gfc_current_intrinsic, &kind->where) == FAILURE)
4150 return FAILURE;
4152 return SUCCESS;
4156 gfc_try
4157 gfc_check_trim (gfc_expr *x)
4159 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
4160 return FAILURE;
4162 if (scalar_check (x, 0) == FAILURE)
4163 return FAILURE;
4165 return SUCCESS;
4169 gfc_try
4170 gfc_check_ttynam (gfc_expr *unit)
4172 if (scalar_check (unit, 0) == FAILURE)
4173 return FAILURE;
4175 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4176 return FAILURE;
4178 return SUCCESS;
4182 /* Common check function for the half a dozen intrinsics that have a
4183 single real argument. */
4185 gfc_try
4186 gfc_check_x (gfc_expr *x)
4188 if (type_check (x, 0, BT_REAL) == FAILURE)
4189 return FAILURE;
4191 return SUCCESS;
4195 /************* Check functions for intrinsic subroutines *************/
4197 gfc_try
4198 gfc_check_cpu_time (gfc_expr *time)
4200 if (scalar_check (time, 0) == FAILURE)
4201 return FAILURE;
4203 if (type_check (time, 0, BT_REAL) == FAILURE)
4204 return FAILURE;
4206 if (variable_check (time, 0, false) == FAILURE)
4207 return FAILURE;
4209 return SUCCESS;
4213 gfc_try
4214 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
4215 gfc_expr *zone, gfc_expr *values)
4217 if (date != NULL)
4219 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
4220 return FAILURE;
4221 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
4222 return FAILURE;
4223 if (scalar_check (date, 0) == FAILURE)
4224 return FAILURE;
4225 if (variable_check (date, 0, false) == FAILURE)
4226 return FAILURE;
4229 if (time != NULL)
4231 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
4232 return FAILURE;
4233 if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
4234 return FAILURE;
4235 if (scalar_check (time, 1) == FAILURE)
4236 return FAILURE;
4237 if (variable_check (time, 1, false) == FAILURE)
4238 return FAILURE;
4241 if (zone != NULL)
4243 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
4244 return FAILURE;
4245 if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
4246 return FAILURE;
4247 if (scalar_check (zone, 2) == FAILURE)
4248 return FAILURE;
4249 if (variable_check (zone, 2, false) == FAILURE)
4250 return FAILURE;
4253 if (values != NULL)
4255 if (type_check (values, 3, BT_INTEGER) == FAILURE)
4256 return FAILURE;
4257 if (array_check (values, 3) == FAILURE)
4258 return FAILURE;
4259 if (rank_check (values, 3, 1) == FAILURE)
4260 return FAILURE;
4261 if (variable_check (values, 3, false) == FAILURE)
4262 return FAILURE;
4265 return SUCCESS;
4269 gfc_try
4270 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
4271 gfc_expr *to, gfc_expr *topos)
4273 if (type_check (from, 0, BT_INTEGER) == FAILURE)
4274 return FAILURE;
4276 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
4277 return FAILURE;
4279 if (type_check (len, 2, BT_INTEGER) == FAILURE)
4280 return FAILURE;
4282 if (same_type_check (from, 0, to, 3) == FAILURE)
4283 return FAILURE;
4285 if (variable_check (to, 3, false) == FAILURE)
4286 return FAILURE;
4288 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
4289 return FAILURE;
4291 if (nonnegative_check ("frompos", frompos) == FAILURE)
4292 return FAILURE;
4294 if (nonnegative_check ("topos", topos) == FAILURE)
4295 return FAILURE;
4297 if (nonnegative_check ("len", len) == FAILURE)
4298 return FAILURE;
4300 if (less_than_bitsize2 ("from", from, "frompos", frompos, "len", len)
4301 == FAILURE)
4302 return FAILURE;
4304 if (less_than_bitsize2 ("to", to, "topos", topos, "len", len) == FAILURE)
4305 return FAILURE;
4307 return SUCCESS;
4311 gfc_try
4312 gfc_check_random_number (gfc_expr *harvest)
4314 if (type_check (harvest, 0, BT_REAL) == FAILURE)
4315 return FAILURE;
4317 if (variable_check (harvest, 0, false) == FAILURE)
4318 return FAILURE;
4320 return SUCCESS;
4324 gfc_try
4325 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
4327 unsigned int nargs = 0, kiss_size;
4328 locus *where = NULL;
4329 mpz_t put_size, get_size;
4330 bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */
4332 have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
4334 /* Keep the number of bytes in sync with kiss_size in
4335 libgfortran/intrinsics/random.c. */
4336 kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
4338 if (size != NULL)
4340 if (size->expr_type != EXPR_VARIABLE
4341 || !size->symtree->n.sym->attr.optional)
4342 nargs++;
4344 if (scalar_check (size, 0) == FAILURE)
4345 return FAILURE;
4347 if (type_check (size, 0, BT_INTEGER) == FAILURE)
4348 return FAILURE;
4350 if (variable_check (size, 0, false) == FAILURE)
4351 return FAILURE;
4353 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
4354 return FAILURE;
4357 if (put != NULL)
4359 if (put->expr_type != EXPR_VARIABLE
4360 || !put->symtree->n.sym->attr.optional)
4362 nargs++;
4363 where = &put->where;
4366 if (array_check (put, 1) == FAILURE)
4367 return FAILURE;
4369 if (rank_check (put, 1, 1) == FAILURE)
4370 return FAILURE;
4372 if (type_check (put, 1, BT_INTEGER) == FAILURE)
4373 return FAILURE;
4375 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
4376 return FAILURE;
4378 if (gfc_array_size (put, &put_size) == SUCCESS
4379 && mpz_get_ui (put_size) < kiss_size)
4380 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4381 "too small (%i/%i)",
4382 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4383 where, (int) mpz_get_ui (put_size), kiss_size);
4386 if (get != NULL)
4388 if (get->expr_type != EXPR_VARIABLE
4389 || !get->symtree->n.sym->attr.optional)
4391 nargs++;
4392 where = &get->where;
4395 if (array_check (get, 2) == FAILURE)
4396 return FAILURE;
4398 if (rank_check (get, 2, 1) == FAILURE)
4399 return FAILURE;
4401 if (type_check (get, 2, BT_INTEGER) == FAILURE)
4402 return FAILURE;
4404 if (variable_check (get, 2, false) == FAILURE)
4405 return FAILURE;
4407 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
4408 return FAILURE;
4410 if (gfc_array_size (get, &get_size) == SUCCESS
4411 && mpz_get_ui (get_size) < kiss_size)
4412 gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4413 "too small (%i/%i)",
4414 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
4415 where, (int) mpz_get_ui (get_size), kiss_size);
4418 /* RANDOM_SEED may not have more than one non-optional argument. */
4419 if (nargs > 1)
4420 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
4422 return SUCCESS;
4426 gfc_try
4427 gfc_check_second_sub (gfc_expr *time)
4429 if (scalar_check (time, 0) == FAILURE)
4430 return FAILURE;
4432 if (type_check (time, 0, BT_REAL) == FAILURE)
4433 return FAILURE;
4435 if (kind_value_check(time, 0, 4) == FAILURE)
4436 return FAILURE;
4438 return SUCCESS;
4442 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
4443 count, count_rate, and count_max are all optional arguments */
4445 gfc_try
4446 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
4447 gfc_expr *count_max)
4449 if (count != NULL)
4451 if (scalar_check (count, 0) == FAILURE)
4452 return FAILURE;
4454 if (type_check (count, 0, BT_INTEGER) == FAILURE)
4455 return FAILURE;
4457 if (variable_check (count, 0, false) == FAILURE)
4458 return FAILURE;
4461 if (count_rate != NULL)
4463 if (scalar_check (count_rate, 1) == FAILURE)
4464 return FAILURE;
4466 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
4467 return FAILURE;
4469 if (variable_check (count_rate, 1, false) == FAILURE)
4470 return FAILURE;
4472 if (count != NULL
4473 && same_type_check (count, 0, count_rate, 1) == FAILURE)
4474 return FAILURE;
4478 if (count_max != NULL)
4480 if (scalar_check (count_max, 2) == FAILURE)
4481 return FAILURE;
4483 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
4484 return FAILURE;
4486 if (variable_check (count_max, 2, false) == FAILURE)
4487 return FAILURE;
4489 if (count != NULL
4490 && same_type_check (count, 0, count_max, 2) == FAILURE)
4491 return FAILURE;
4493 if (count_rate != NULL
4494 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
4495 return FAILURE;
4498 return SUCCESS;
4502 gfc_try
4503 gfc_check_irand (gfc_expr *x)
4505 if (x == NULL)
4506 return SUCCESS;
4508 if (scalar_check (x, 0) == FAILURE)
4509 return FAILURE;
4511 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4512 return FAILURE;
4514 if (kind_value_check(x, 0, 4) == FAILURE)
4515 return FAILURE;
4517 return SUCCESS;
4521 gfc_try
4522 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
4524 if (scalar_check (seconds, 0) == FAILURE)
4525 return FAILURE;
4526 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
4527 return FAILURE;
4529 if (int_or_proc_check (handler, 1) == FAILURE)
4530 return FAILURE;
4531 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4532 return FAILURE;
4534 if (status == NULL)
4535 return SUCCESS;
4537 if (scalar_check (status, 2) == FAILURE)
4538 return FAILURE;
4539 if (type_check (status, 2, BT_INTEGER) == FAILURE)
4540 return FAILURE;
4541 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
4542 return FAILURE;
4544 return SUCCESS;
4548 gfc_try
4549 gfc_check_rand (gfc_expr *x)
4551 if (x == NULL)
4552 return SUCCESS;
4554 if (scalar_check (x, 0) == FAILURE)
4555 return FAILURE;
4557 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4558 return FAILURE;
4560 if (kind_value_check(x, 0, 4) == FAILURE)
4561 return FAILURE;
4563 return SUCCESS;
4567 gfc_try
4568 gfc_check_srand (gfc_expr *x)
4570 if (scalar_check (x, 0) == FAILURE)
4571 return FAILURE;
4573 if (type_check (x, 0, BT_INTEGER) == FAILURE)
4574 return FAILURE;
4576 if (kind_value_check(x, 0, 4) == FAILURE)
4577 return FAILURE;
4579 return SUCCESS;
4583 gfc_try
4584 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
4586 if (scalar_check (time, 0) == FAILURE)
4587 return FAILURE;
4588 if (type_check (time, 0, BT_INTEGER) == FAILURE)
4589 return FAILURE;
4591 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
4592 return FAILURE;
4593 if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
4594 return FAILURE;
4596 return SUCCESS;
4600 gfc_try
4601 gfc_check_dtime_etime (gfc_expr *x)
4603 if (array_check (x, 0) == FAILURE)
4604 return FAILURE;
4606 if (rank_check (x, 0, 1) == FAILURE)
4607 return FAILURE;
4609 if (variable_check (x, 0, false) == FAILURE)
4610 return FAILURE;
4612 if (type_check (x, 0, BT_REAL) == FAILURE)
4613 return FAILURE;
4615 if (kind_value_check(x, 0, 4) == FAILURE)
4616 return FAILURE;
4618 return SUCCESS;
4622 gfc_try
4623 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
4625 if (array_check (values, 0) == FAILURE)
4626 return FAILURE;
4628 if (rank_check (values, 0, 1) == FAILURE)
4629 return FAILURE;
4631 if (variable_check (values, 0, false) == FAILURE)
4632 return FAILURE;
4634 if (type_check (values, 0, BT_REAL) == FAILURE)
4635 return FAILURE;
4637 if (kind_value_check(values, 0, 4) == FAILURE)
4638 return FAILURE;
4640 if (scalar_check (time, 1) == FAILURE)
4641 return FAILURE;
4643 if (type_check (time, 1, BT_REAL) == FAILURE)
4644 return FAILURE;
4646 if (kind_value_check(time, 1, 4) == FAILURE)
4647 return FAILURE;
4649 return SUCCESS;
4653 gfc_try
4654 gfc_check_fdate_sub (gfc_expr *date)
4656 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
4657 return FAILURE;
4658 if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
4659 return FAILURE;
4661 return SUCCESS;
4665 gfc_try
4666 gfc_check_gerror (gfc_expr *msg)
4668 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4669 return FAILURE;
4670 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4671 return FAILURE;
4673 return SUCCESS;
4677 gfc_try
4678 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
4680 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
4681 return FAILURE;
4682 if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
4683 return FAILURE;
4685 if (status == NULL)
4686 return SUCCESS;
4688 if (scalar_check (status, 1) == FAILURE)
4689 return FAILURE;
4691 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4692 return FAILURE;
4694 return SUCCESS;
4698 gfc_try
4699 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
4701 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
4702 return FAILURE;
4704 if (pos->ts.kind > gfc_default_integer_kind)
4706 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4707 "not wider than the default kind (%d)",
4708 gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4709 &pos->where, gfc_default_integer_kind);
4710 return FAILURE;
4713 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
4714 return FAILURE;
4715 if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
4716 return FAILURE;
4718 return SUCCESS;
4722 gfc_try
4723 gfc_check_getlog (gfc_expr *msg)
4725 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4726 return FAILURE;
4727 if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4728 return FAILURE;
4730 return SUCCESS;
4734 gfc_try
4735 gfc_check_exit (gfc_expr *status)
4737 if (status == NULL)
4738 return SUCCESS;
4740 if (type_check (status, 0, BT_INTEGER) == FAILURE)
4741 return FAILURE;
4743 if (scalar_check (status, 0) == FAILURE)
4744 return FAILURE;
4746 return SUCCESS;
4750 gfc_try
4751 gfc_check_flush (gfc_expr *unit)
4753 if (unit == NULL)
4754 return SUCCESS;
4756 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4757 return FAILURE;
4759 if (scalar_check (unit, 0) == FAILURE)
4760 return FAILURE;
4762 return SUCCESS;
4766 gfc_try
4767 gfc_check_free (gfc_expr *i)
4769 if (type_check (i, 0, BT_INTEGER) == FAILURE)
4770 return FAILURE;
4772 if (scalar_check (i, 0) == FAILURE)
4773 return FAILURE;
4775 return SUCCESS;
4779 gfc_try
4780 gfc_check_hostnm (gfc_expr *name)
4782 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4783 return FAILURE;
4784 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4785 return FAILURE;
4787 return SUCCESS;
4791 gfc_try
4792 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
4794 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4795 return FAILURE;
4796 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4797 return FAILURE;
4799 if (status == NULL)
4800 return SUCCESS;
4802 if (scalar_check (status, 1) == FAILURE)
4803 return FAILURE;
4805 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4806 return FAILURE;
4808 return SUCCESS;
4812 gfc_try
4813 gfc_check_itime_idate (gfc_expr *values)
4815 if (array_check (values, 0) == FAILURE)
4816 return FAILURE;
4818 if (rank_check (values, 0, 1) == FAILURE)
4819 return FAILURE;
4821 if (variable_check (values, 0, false) == FAILURE)
4822 return FAILURE;
4824 if (type_check (values, 0, BT_INTEGER) == FAILURE)
4825 return FAILURE;
4827 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
4828 return FAILURE;
4830 return SUCCESS;
4834 gfc_try
4835 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
4837 if (type_check (time, 0, BT_INTEGER) == FAILURE)
4838 return FAILURE;
4840 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
4841 return FAILURE;
4843 if (scalar_check (time, 0) == FAILURE)
4844 return FAILURE;
4846 if (array_check (values, 1) == FAILURE)
4847 return FAILURE;
4849 if (rank_check (values, 1, 1) == FAILURE)
4850 return FAILURE;
4852 if (variable_check (values, 1, false) == FAILURE)
4853 return FAILURE;
4855 if (type_check (values, 1, BT_INTEGER) == FAILURE)
4856 return FAILURE;
4858 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
4859 return FAILURE;
4861 return SUCCESS;
4865 gfc_try
4866 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
4868 if (scalar_check (unit, 0) == FAILURE)
4869 return FAILURE;
4871 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4872 return FAILURE;
4874 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
4875 return FAILURE;
4876 if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
4877 return FAILURE;
4879 return SUCCESS;
4883 gfc_try
4884 gfc_check_isatty (gfc_expr *unit)
4886 if (unit == NULL)
4887 return FAILURE;
4889 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4890 return FAILURE;
4892 if (scalar_check (unit, 0) == FAILURE)
4893 return FAILURE;
4895 return SUCCESS;
4899 gfc_try
4900 gfc_check_isnan (gfc_expr *x)
4902 if (type_check (x, 0, BT_REAL) == FAILURE)
4903 return FAILURE;
4905 return SUCCESS;
4909 gfc_try
4910 gfc_check_perror (gfc_expr *string)
4912 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
4913 return FAILURE;
4914 if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
4915 return FAILURE;
4917 return SUCCESS;
4921 gfc_try
4922 gfc_check_umask (gfc_expr *mask)
4924 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4925 return FAILURE;
4927 if (scalar_check (mask, 0) == FAILURE)
4928 return FAILURE;
4930 return SUCCESS;
4934 gfc_try
4935 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
4937 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
4938 return FAILURE;
4940 if (scalar_check (mask, 0) == FAILURE)
4941 return FAILURE;
4943 if (old == NULL)
4944 return SUCCESS;
4946 if (scalar_check (old, 1) == FAILURE)
4947 return FAILURE;
4949 if (type_check (old, 1, BT_INTEGER) == FAILURE)
4950 return FAILURE;
4952 return SUCCESS;
4956 gfc_try
4957 gfc_check_unlink (gfc_expr *name)
4959 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4960 return FAILURE;
4961 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4962 return FAILURE;
4964 return SUCCESS;
4968 gfc_try
4969 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
4971 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4972 return FAILURE;
4973 if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4974 return FAILURE;
4976 if (status == NULL)
4977 return SUCCESS;
4979 if (scalar_check (status, 1) == FAILURE)
4980 return FAILURE;
4982 if (type_check (status, 1, BT_INTEGER) == FAILURE)
4983 return FAILURE;
4985 return SUCCESS;
4989 gfc_try
4990 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
4992 if (scalar_check (number, 0) == FAILURE)
4993 return FAILURE;
4994 if (type_check (number, 0, BT_INTEGER) == FAILURE)
4995 return FAILURE;
4997 if (int_or_proc_check (handler, 1) == FAILURE)
4998 return FAILURE;
4999 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
5000 return FAILURE;
5002 return SUCCESS;
5006 gfc_try
5007 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
5009 if (scalar_check (number, 0) == FAILURE)
5010 return FAILURE;
5011 if (type_check (number, 0, BT_INTEGER) == FAILURE)
5012 return FAILURE;
5014 if (int_or_proc_check (handler, 1) == FAILURE)
5015 return FAILURE;
5016 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
5017 return FAILURE;
5019 if (status == NULL)
5020 return SUCCESS;
5022 if (type_check (status, 2, BT_INTEGER) == FAILURE)
5023 return FAILURE;
5024 if (scalar_check (status, 2) == FAILURE)
5025 return FAILURE;
5027 return SUCCESS;
5031 gfc_try
5032 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
5034 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
5035 return FAILURE;
5036 if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
5037 return FAILURE;
5039 if (scalar_check (status, 1) == FAILURE)
5040 return FAILURE;
5042 if (type_check (status, 1, BT_INTEGER) == FAILURE)
5043 return FAILURE;
5045 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
5046 return FAILURE;
5048 return SUCCESS;
5052 /* This is used for the GNU intrinsics AND, OR and XOR. */
5053 gfc_try
5054 gfc_check_and (gfc_expr *i, gfc_expr *j)
5056 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
5058 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5059 "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
5060 gfc_current_intrinsic, &i->where);
5061 return FAILURE;
5064 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
5066 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5067 "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
5068 gfc_current_intrinsic, &j->where);
5069 return FAILURE;
5072 if (i->ts.type != j->ts.type)
5074 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5075 "have the same type", gfc_current_intrinsic_arg[0]->name,
5076 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5077 &j->where);
5078 return FAILURE;
5081 if (scalar_check (i, 0) == FAILURE)
5082 return FAILURE;
5084 if (scalar_check (j, 1) == FAILURE)
5085 return FAILURE;
5087 return SUCCESS;
5091 gfc_try
5092 gfc_check_storage_size (gfc_expr *a ATTRIBUTE_UNUSED, gfc_expr *kind)
5094 if (kind == NULL)
5095 return SUCCESS;
5097 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
5098 return FAILURE;
5100 if (scalar_check (kind, 1) == FAILURE)
5101 return FAILURE;
5103 if (kind->expr_type != EXPR_CONSTANT)
5105 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5106 gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5107 &kind->where);
5108 return FAILURE;
5111 return SUCCESS;