pr 33870
[official-gcc.git] / gcc / fortran / check.c
blob96ddfcdff859600f24655c3ffd298e396f4517b8
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
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"
36 /* Make sure an expression is a scalar. */
38 static try
39 scalar_check (gfc_expr *e, int n)
41 if (e->rank == 0)
42 return SUCCESS;
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
47 return FAILURE;
51 /* Check the type of an expression. */
53 static try
54 type_check (gfc_expr *e, int n, bt type)
56 if (e->ts.type == type)
57 return SUCCESS;
59 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
60 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
61 gfc_basic_typename (type));
63 return FAILURE;
67 /* Check that the expression is a numeric type. */
69 static try
70 numeric_check (gfc_expr *e, int n)
72 if (gfc_numeric_ts (&e->ts))
73 return SUCCESS;
75 /* If the expression has not got a type, check if its namespace can
76 offer a default type. */
77 if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
78 && e->symtree->n.sym->ts.type == BT_UNKNOWN
79 && gfc_set_default_type (e->symtree->n.sym, 0,
80 e->symtree->n.sym->ns) == SUCCESS
81 && gfc_numeric_ts (&e->symtree->n.sym->ts))
83 e->ts = e->symtree->n.sym->ts;
84 return SUCCESS;
87 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
88 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
90 return FAILURE;
94 /* Check that an expression is integer or real. */
96 static try
97 int_or_real_check (gfc_expr *e, int n)
99 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
101 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
102 "or REAL", gfc_current_intrinsic_arg[n],
103 gfc_current_intrinsic, &e->where);
104 return FAILURE;
107 return SUCCESS;
111 /* Check that an expression is real or complex. */
113 static try
114 real_or_complex_check (gfc_expr *e, int n)
116 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
119 "or COMPLEX", gfc_current_intrinsic_arg[n],
120 gfc_current_intrinsic, &e->where);
121 return FAILURE;
124 return SUCCESS;
128 /* Check that the expression is an optional constant integer
129 and that it specifies a valid kind for that type. */
131 static try
132 kind_check (gfc_expr *k, int n, bt type)
134 int kind;
136 if (k == NULL)
137 return SUCCESS;
139 if (type_check (k, n, BT_INTEGER) == FAILURE)
140 return FAILURE;
142 if (scalar_check (k, n) == FAILURE)
143 return FAILURE;
145 if (k->expr_type != EXPR_CONSTANT)
147 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
148 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
149 &k->where);
150 return FAILURE;
153 if (gfc_extract_int (k, &kind) != NULL
154 || gfc_validate_kind (type, kind, true) < 0)
156 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
157 &k->where);
158 return FAILURE;
161 return SUCCESS;
165 /* Make sure the expression is a double precision real. */
167 static try
168 double_check (gfc_expr *d, int n)
170 if (type_check (d, n, BT_REAL) == FAILURE)
171 return FAILURE;
173 if (d->ts.kind != gfc_default_double_kind)
175 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
176 "precision", gfc_current_intrinsic_arg[n],
177 gfc_current_intrinsic, &d->where);
178 return FAILURE;
181 return SUCCESS;
185 /* Make sure the expression is a logical array. */
187 static try
188 logical_array_check (gfc_expr *array, int n)
190 if (array->ts.type != BT_LOGICAL || array->rank == 0)
192 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
193 "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
194 &array->where);
195 return FAILURE;
198 return SUCCESS;
202 /* Make sure an expression is an array. */
204 static try
205 array_check (gfc_expr *e, int n)
207 if (e->rank != 0)
208 return SUCCESS;
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
211 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
213 return FAILURE;
217 /* Make sure two expressions have the same type. */
219 static try
220 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
222 if (gfc_compare_types (&e->ts, &f->ts))
223 return SUCCESS;
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
226 "and kind as '%s'", gfc_current_intrinsic_arg[m],
227 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
229 return FAILURE;
233 /* Make sure that an expression has a certain (nonzero) rank. */
235 static try
236 rank_check (gfc_expr *e, int n, int rank)
238 if (e->rank == rank)
239 return SUCCESS;
241 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
242 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
243 &e->where, rank);
245 return FAILURE;
249 /* Make sure a variable expression is not an optional dummy argument. */
251 static try
252 nonoptional_check (gfc_expr *e, int n)
254 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
256 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
257 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
258 &e->where);
261 /* TODO: Recursive check on nonoptional variables? */
263 return SUCCESS;
267 /* Check that an expression has a particular kind. */
269 static try
270 kind_value_check (gfc_expr *e, int n, int k)
272 if (e->ts.kind == k)
273 return SUCCESS;
275 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
276 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
277 &e->where, k);
279 return FAILURE;
283 /* Make sure an expression is a variable. */
285 static try
286 variable_check (gfc_expr *e, int n)
288 if ((e->expr_type == EXPR_VARIABLE
289 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
290 || (e->expr_type == EXPR_FUNCTION
291 && e->symtree->n.sym->result == e->symtree->n.sym))
292 return SUCCESS;
294 if (e->expr_type == EXPR_VARIABLE
295 && e->symtree->n.sym->attr.intent == INTENT_IN)
297 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
298 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
299 &e->where);
300 return FAILURE;
303 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
304 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
306 return FAILURE;
310 /* Check the common DIM parameter for correctness. */
312 static try
313 dim_check (gfc_expr *dim, int n, bool optional)
315 if (dim == NULL)
316 return SUCCESS;
318 if (dim == NULL)
320 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
321 gfc_current_intrinsic, gfc_current_intrinsic_where);
322 return FAILURE;
325 if (type_check (dim, n, BT_INTEGER) == FAILURE)
326 return FAILURE;
328 if (scalar_check (dim, n) == FAILURE)
329 return FAILURE;
331 if (!optional && nonoptional_check (dim, n) == FAILURE)
332 return FAILURE;
334 return SUCCESS;
338 /* If a DIM parameter is a constant, make sure that it is greater than
339 zero and less than or equal to the rank of the given array. If
340 allow_assumed is zero then dim must be less than the rank of the array
341 for assumed size arrays. */
343 static try
344 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
346 gfc_array_ref *ar;
347 int rank;
349 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
350 return SUCCESS;
352 ar = gfc_find_array_ref (array);
353 rank = array->rank;
354 if (ar->as->type == AS_ASSUMED_SIZE
355 && !allow_assumed
356 && ar->type != AR_ELEMENT
357 && ar->type != AR_SECTION)
358 rank--;
360 if (mpz_cmp_ui (dim->value.integer, 1) < 0
361 || mpz_cmp_ui (dim->value.integer, rank) > 0)
363 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
364 "dimension index", gfc_current_intrinsic, &dim->where);
366 return FAILURE;
369 return SUCCESS;
373 /* Compare the size of a along dimension ai with the size of b along
374 dimension bi, returning 0 if they are known not to be identical,
375 and 1 if they are identical, or if this cannot be determined. */
377 static int
378 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
380 mpz_t a_size, b_size;
381 int ret;
383 gcc_assert (a->rank > ai);
384 gcc_assert (b->rank > bi);
386 ret = 1;
388 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
390 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
392 if (mpz_cmp (a_size, b_size) != 0)
393 ret = 0;
395 mpz_clear (b_size);
397 mpz_clear (a_size);
399 return ret;
403 /* Check whether two character expressions have the same length;
404 returns SUCCESS if they have or if the length cannot be determined. */
406 static try
407 check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
409 long len_a, len_b;
410 len_a = len_b = -1;
412 if (a->ts.cl && a->ts.cl->length
413 && a->ts.cl->length->expr_type == EXPR_CONSTANT)
414 len_a = mpz_get_si (a->ts.cl->length->value.integer);
415 else if (a->expr_type == EXPR_CONSTANT
416 && (a->ts.cl == NULL || a->ts.cl->length == NULL))
417 len_a = a->value.character.length;
418 else
419 return SUCCESS;
421 if (b->ts.cl && b->ts.cl->length
422 && b->ts.cl->length->expr_type == EXPR_CONSTANT)
423 len_b = mpz_get_si (b->ts.cl->length->value.integer);
424 else if (b->expr_type == EXPR_CONSTANT
425 && (b->ts.cl == NULL || b->ts.cl->length == NULL))
426 len_b = b->value.character.length;
427 else
428 return SUCCESS;
430 if (len_a == len_b)
431 return SUCCESS;
433 gfc_error ("Unequal character lengths (%ld and %ld) in %s intrinsic "
434 "at %L", len_a, len_b, name, &a->where);
435 return FAILURE;
439 /***** Check functions *****/
441 /* Check subroutine suitable for intrinsics taking a real argument and
442 a kind argument for the result. */
444 static try
445 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
447 if (type_check (a, 0, BT_REAL) == FAILURE)
448 return FAILURE;
449 if (kind_check (kind, 1, type) == FAILURE)
450 return FAILURE;
452 return SUCCESS;
456 /* Check subroutine suitable for ceiling, floor and nint. */
459 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
461 return check_a_kind (a, kind, BT_INTEGER);
465 /* Check subroutine suitable for aint, anint. */
468 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
470 return check_a_kind (a, kind, BT_REAL);
475 gfc_check_abs (gfc_expr *a)
477 if (numeric_check (a, 0) == FAILURE)
478 return FAILURE;
480 return SUCCESS;
485 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
487 if (type_check (a, 0, BT_INTEGER) == FAILURE)
488 return FAILURE;
489 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
490 return FAILURE;
492 return SUCCESS;
497 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
499 if (type_check (name, 0, BT_CHARACTER) == FAILURE
500 || scalar_check (name, 0) == FAILURE)
501 return FAILURE;
503 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
504 || scalar_check (mode, 1) == FAILURE)
505 return FAILURE;
507 return SUCCESS;
512 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
514 if (logical_array_check (mask, 0) == FAILURE)
515 return FAILURE;
517 if (dim_check (dim, 1, false) == FAILURE)
518 return FAILURE;
520 return SUCCESS;
525 gfc_check_allocated (gfc_expr *array)
527 symbol_attribute attr;
529 if (variable_check (array, 0) == FAILURE)
530 return FAILURE;
532 attr = gfc_variable_attr (array, NULL);
533 if (!attr.allocatable)
535 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
536 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
537 &array->where);
538 return FAILURE;
541 if (array_check (array, 0) == FAILURE)
542 return FAILURE;
544 return SUCCESS;
548 /* Common check function where the first argument must be real or
549 integer and the second argument must be the same as the first. */
552 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
554 if (int_or_real_check (a, 0) == FAILURE)
555 return FAILURE;
557 if (a->ts.type != p->ts.type)
559 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
560 "have the same type", gfc_current_intrinsic_arg[0],
561 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
562 &p->where);
563 return FAILURE;
566 if (a->ts.kind != p->ts.kind)
568 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
569 &p->where) == FAILURE)
570 return FAILURE;
573 return SUCCESS;
578 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
580 if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
581 return FAILURE;
583 return SUCCESS;
588 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
590 symbol_attribute attr;
591 int i;
592 try t;
593 locus *where;
595 where = &pointer->where;
597 if (pointer->expr_type == EXPR_VARIABLE)
598 attr = gfc_variable_attr (pointer, NULL);
599 else if (pointer->expr_type == EXPR_FUNCTION)
600 attr = pointer->symtree->n.sym->attr;
601 else if (pointer->expr_type == EXPR_NULL)
602 goto null_arg;
603 else
604 gcc_assert (0); /* Pointer must be a variable or a function. */
606 if (!attr.pointer)
608 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
609 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
610 &pointer->where);
611 return FAILURE;
614 /* Target argument is optional. */
615 if (target == NULL)
616 return SUCCESS;
618 where = &target->where;
619 if (target->expr_type == EXPR_NULL)
620 goto null_arg;
622 if (target->expr_type == EXPR_VARIABLE)
623 attr = gfc_variable_attr (target, NULL);
624 else if (target->expr_type == EXPR_FUNCTION)
625 attr = target->symtree->n.sym->attr;
626 else
628 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
629 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
630 gfc_current_intrinsic, &target->where);
631 return FAILURE;
634 if (!attr.pointer && !attr.target)
636 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
637 "or a TARGET", gfc_current_intrinsic_arg[1],
638 gfc_current_intrinsic, &target->where);
639 return FAILURE;
642 t = SUCCESS;
643 if (same_type_check (pointer, 0, target, 1) == FAILURE)
644 t = FAILURE;
645 if (rank_check (target, 0, pointer->rank) == FAILURE)
646 t = FAILURE;
647 if (target->rank > 0)
649 for (i = 0; i < target->rank; i++)
650 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
652 gfc_error ("Array section with a vector subscript at %L shall not "
653 "be the target of a pointer",
654 &target->where);
655 t = FAILURE;
656 break;
659 return t;
661 null_arg:
663 gfc_error ("NULL pointer at %L is not permitted as actual argument "
664 "of '%s' intrinsic function", where, gfc_current_intrinsic);
665 return FAILURE;
671 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
673 if (type_check (y, 0, BT_REAL) == FAILURE)
674 return FAILURE;
675 if (same_type_check (y, 0, x, 1) == FAILURE)
676 return FAILURE;
678 return SUCCESS;
682 /* BESJN and BESYN functions. */
685 gfc_check_besn (gfc_expr *n, gfc_expr *x)
687 if (type_check (n, 0, BT_INTEGER) == FAILURE)
688 return FAILURE;
690 if (type_check (x, 1, BT_REAL) == FAILURE)
691 return FAILURE;
693 return SUCCESS;
698 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
700 if (type_check (i, 0, BT_INTEGER) == FAILURE)
701 return FAILURE;
702 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
703 return FAILURE;
705 return SUCCESS;
710 gfc_check_char (gfc_expr *i, gfc_expr *kind)
712 if (type_check (i, 0, BT_INTEGER) == FAILURE)
713 return FAILURE;
714 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
715 return FAILURE;
717 return SUCCESS;
722 gfc_check_chdir (gfc_expr *dir)
724 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
725 return FAILURE;
727 return SUCCESS;
732 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
734 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
735 return FAILURE;
737 if (status == NULL)
738 return SUCCESS;
740 if (type_check (status, 1, BT_INTEGER) == FAILURE)
741 return FAILURE;
743 if (scalar_check (status, 1) == FAILURE)
744 return FAILURE;
746 return SUCCESS;
751 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
753 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
754 return FAILURE;
756 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
757 return FAILURE;
759 return SUCCESS;
764 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
766 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
767 return FAILURE;
769 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
770 return FAILURE;
772 if (status == NULL)
773 return SUCCESS;
775 if (type_check (status, 2, BT_INTEGER) == FAILURE)
776 return FAILURE;
778 if (scalar_check (status, 2) == FAILURE)
779 return FAILURE;
781 return SUCCESS;
786 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
788 if (numeric_check (x, 0) == FAILURE)
789 return FAILURE;
791 if (y != NULL)
793 if (numeric_check (y, 1) == FAILURE)
794 return FAILURE;
796 if (x->ts.type == BT_COMPLEX)
798 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
799 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
800 gfc_current_intrinsic, &y->where);
801 return FAILURE;
805 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
806 return FAILURE;
808 return SUCCESS;
813 gfc_check_complex (gfc_expr *x, gfc_expr *y)
815 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
817 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
818 "or REAL", gfc_current_intrinsic_arg[0],
819 gfc_current_intrinsic, &x->where);
820 return FAILURE;
822 if (scalar_check (x, 0) == FAILURE)
823 return FAILURE;
825 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
827 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
828 "or REAL", gfc_current_intrinsic_arg[1],
829 gfc_current_intrinsic, &y->where);
830 return FAILURE;
832 if (scalar_check (y, 1) == FAILURE)
833 return FAILURE;
835 return SUCCESS;
840 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
842 if (logical_array_check (mask, 0) == FAILURE)
843 return FAILURE;
844 if (dim_check (dim, 1, false) == FAILURE)
845 return FAILURE;
846 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
847 return FAILURE;
848 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
849 "with KIND argument at %L",
850 gfc_current_intrinsic, &kind->where) == FAILURE)
851 return FAILURE;
853 return SUCCESS;
858 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
860 if (array_check (array, 0) == FAILURE)
861 return FAILURE;
863 if (array->rank == 1)
865 if (scalar_check (shift, 1) == FAILURE)
866 return FAILURE;
868 else
870 /* TODO: more requirements on shift parameter. */
873 /* FIXME (PR33317): Allow optional DIM=. */
874 if (dim_check (dim, 2, false) == FAILURE)
875 return FAILURE;
877 return SUCCESS;
882 gfc_check_ctime (gfc_expr *time)
884 if (scalar_check (time, 0) == FAILURE)
885 return FAILURE;
887 if (type_check (time, 0, BT_INTEGER) == FAILURE)
888 return FAILURE;
890 return SUCCESS;
894 try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
896 if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
897 return FAILURE;
899 return SUCCESS;
903 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
905 if (numeric_check (x, 0) == FAILURE)
906 return FAILURE;
908 if (y != NULL)
910 if (numeric_check (y, 1) == FAILURE)
911 return FAILURE;
913 if (x->ts.type == BT_COMPLEX)
915 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
916 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
917 gfc_current_intrinsic, &y->where);
918 return FAILURE;
922 return SUCCESS;
927 gfc_check_dble (gfc_expr *x)
929 if (numeric_check (x, 0) == FAILURE)
930 return FAILURE;
932 return SUCCESS;
937 gfc_check_digits (gfc_expr *x)
939 if (int_or_real_check (x, 0) == FAILURE)
940 return FAILURE;
942 return SUCCESS;
947 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
949 switch (vector_a->ts.type)
951 case BT_LOGICAL:
952 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
953 return FAILURE;
954 break;
956 case BT_INTEGER:
957 case BT_REAL:
958 case BT_COMPLEX:
959 if (numeric_check (vector_b, 1) == FAILURE)
960 return FAILURE;
961 break;
963 default:
964 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
965 "or LOGICAL", gfc_current_intrinsic_arg[0],
966 gfc_current_intrinsic, &vector_a->where);
967 return FAILURE;
970 if (rank_check (vector_a, 0, 1) == FAILURE)
971 return FAILURE;
973 if (rank_check (vector_b, 1, 1) == FAILURE)
974 return FAILURE;
976 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
978 gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
979 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
980 gfc_current_intrinsic_arg[1], &vector_a->where);
981 return FAILURE;
984 return SUCCESS;
989 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
991 if (type_check (x, 0, BT_REAL) == FAILURE
992 || type_check (y, 1, BT_REAL) == FAILURE)
993 return FAILURE;
995 if (x->ts.kind != gfc_default_real_kind)
997 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
998 "real", gfc_current_intrinsic_arg[0],
999 gfc_current_intrinsic, &x->where);
1000 return FAILURE;
1003 if (y->ts.kind != gfc_default_real_kind)
1005 gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1006 "real", gfc_current_intrinsic_arg[1],
1007 gfc_current_intrinsic, &y->where);
1008 return FAILURE;
1011 return SUCCESS;
1016 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1017 gfc_expr *dim)
1019 if (array_check (array, 0) == FAILURE)
1020 return FAILURE;
1022 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1023 return FAILURE;
1025 if (array->rank == 1)
1027 if (scalar_check (shift, 2) == FAILURE)
1028 return FAILURE;
1030 else
1032 /* TODO: more weird restrictions on shift. */
1035 if (boundary != NULL)
1037 if (same_type_check (array, 0, boundary, 2) == FAILURE)
1038 return FAILURE;
1040 /* TODO: more restrictions on boundary. */
1043 /* FIXME (PR33317): Allow optional DIM=. */
1044 if (dim_check (dim, 4, false) == FAILURE)
1045 return FAILURE;
1047 return SUCCESS;
1051 /* A single complex argument. */
1054 gfc_check_fn_c (gfc_expr *a)
1056 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1057 return FAILURE;
1059 return SUCCESS;
1063 /* A single real argument. */
1066 gfc_check_fn_r (gfc_expr *a)
1068 if (type_check (a, 0, BT_REAL) == FAILURE)
1069 return FAILURE;
1071 return SUCCESS;
1074 /* A single double argument. */
1077 gfc_check_fn_d (gfc_expr *a)
1079 if (double_check (a, 0) == FAILURE)
1080 return FAILURE;
1082 return SUCCESS;
1085 /* A single real or complex argument. */
1088 gfc_check_fn_rc (gfc_expr *a)
1090 if (real_or_complex_check (a, 0) == FAILURE)
1091 return FAILURE;
1093 return SUCCESS;
1098 gfc_check_fnum (gfc_expr *unit)
1100 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1101 return FAILURE;
1103 if (scalar_check (unit, 0) == FAILURE)
1104 return FAILURE;
1106 return SUCCESS;
1111 gfc_check_huge (gfc_expr *x)
1113 if (int_or_real_check (x, 0) == FAILURE)
1114 return FAILURE;
1116 return SUCCESS;
1120 /* Check that the single argument is an integer. */
1123 gfc_check_i (gfc_expr *i)
1125 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1126 return FAILURE;
1128 return SUCCESS;
1133 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1135 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1136 return FAILURE;
1138 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1139 return FAILURE;
1141 if (i->ts.kind != j->ts.kind)
1143 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1144 &i->where) == FAILURE)
1145 return FAILURE;
1148 return SUCCESS;
1153 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1155 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1156 return FAILURE;
1158 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1159 return FAILURE;
1161 return SUCCESS;
1166 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1168 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1169 return FAILURE;
1171 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1172 return FAILURE;
1174 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1175 return FAILURE;
1177 return SUCCESS;
1182 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1184 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1185 return FAILURE;
1187 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1188 return FAILURE;
1190 return SUCCESS;
1195 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1197 int i;
1199 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1200 return FAILURE;
1202 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1203 return FAILURE;
1205 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1206 "with KIND argument at %L",
1207 gfc_current_intrinsic, &kind->where) == FAILURE)
1208 return FAILURE;
1210 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1212 gfc_expr *start;
1213 gfc_expr *end;
1214 gfc_ref *ref;
1216 /* Substring references don't have the charlength set. */
1217 ref = c->ref;
1218 while (ref && ref->type != REF_SUBSTRING)
1219 ref = ref->next;
1221 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1223 if (!ref)
1225 /* Check that the argument is length one. Non-constant lengths
1226 can't be checked here, so assume they are ok. */
1227 if (c->ts.cl && c->ts.cl->length)
1229 /* If we already have a length for this expression then use it. */
1230 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1231 return SUCCESS;
1232 i = mpz_get_si (c->ts.cl->length->value.integer);
1234 else
1235 return SUCCESS;
1237 else
1239 start = ref->u.ss.start;
1240 end = ref->u.ss.end;
1242 gcc_assert (start);
1243 if (end == NULL || end->expr_type != EXPR_CONSTANT
1244 || start->expr_type != EXPR_CONSTANT)
1245 return SUCCESS;
1247 i = mpz_get_si (end->value.integer) + 1
1248 - mpz_get_si (start->value.integer);
1251 else
1252 return SUCCESS;
1254 if (i != 1)
1256 gfc_error ("Argument of %s at %L must be of length one",
1257 gfc_current_intrinsic, &c->where);
1258 return FAILURE;
1261 return SUCCESS;
1266 gfc_check_idnint (gfc_expr *a)
1268 if (double_check (a, 0) == FAILURE)
1269 return FAILURE;
1271 return SUCCESS;
1276 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1278 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1279 return FAILURE;
1281 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1282 return FAILURE;
1284 if (i->ts.kind != j->ts.kind)
1286 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1287 &i->where) == FAILURE)
1288 return FAILURE;
1291 return SUCCESS;
1296 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1297 gfc_expr *kind)
1299 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1300 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1301 return FAILURE;
1303 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1304 return FAILURE;
1306 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1307 return FAILURE;
1308 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1309 "with KIND argument at %L",
1310 gfc_current_intrinsic, &kind->where) == FAILURE)
1311 return FAILURE;
1313 if (string->ts.kind != substring->ts.kind)
1315 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1316 "kind as '%s'", gfc_current_intrinsic_arg[1],
1317 gfc_current_intrinsic, &substring->where,
1318 gfc_current_intrinsic_arg[0]);
1319 return FAILURE;
1322 return SUCCESS;
1327 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1329 if (numeric_check (x, 0) == FAILURE)
1330 return FAILURE;
1332 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1333 return FAILURE;
1335 return SUCCESS;
1340 gfc_check_intconv (gfc_expr *x)
1342 if (numeric_check (x, 0) == FAILURE)
1343 return FAILURE;
1345 return SUCCESS;
1350 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1352 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1353 return FAILURE;
1355 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1356 return FAILURE;
1358 if (i->ts.kind != j->ts.kind)
1360 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1361 &i->where) == FAILURE)
1362 return FAILURE;
1365 return SUCCESS;
1370 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1372 if (type_check (i, 0, BT_INTEGER) == FAILURE
1373 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1374 return FAILURE;
1376 return SUCCESS;
1381 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1383 if (type_check (i, 0, BT_INTEGER) == FAILURE
1384 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1385 return FAILURE;
1387 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1388 return FAILURE;
1390 return SUCCESS;
1395 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1397 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1398 return FAILURE;
1400 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1401 return FAILURE;
1403 return SUCCESS;
1408 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1410 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1411 return FAILURE;
1413 if (scalar_check (pid, 0) == FAILURE)
1414 return FAILURE;
1416 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1417 return FAILURE;
1419 if (scalar_check (sig, 1) == FAILURE)
1420 return FAILURE;
1422 if (status == NULL)
1423 return SUCCESS;
1425 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1426 return FAILURE;
1428 if (scalar_check (status, 2) == FAILURE)
1429 return FAILURE;
1431 return SUCCESS;
1436 gfc_check_kind (gfc_expr *x)
1438 if (x->ts.type == BT_DERIVED)
1440 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1441 "non-derived type", gfc_current_intrinsic_arg[0],
1442 gfc_current_intrinsic, &x->where);
1443 return FAILURE;
1446 return SUCCESS;
1451 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
1453 if (array_check (array, 0) == FAILURE)
1454 return FAILURE;
1456 if (dim != NULL)
1458 if (dim_check (dim, 1, false) == FAILURE)
1459 return FAILURE;
1461 if (dim_rank_check (dim, array, 1) == FAILURE)
1462 return FAILURE;
1465 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1466 return FAILURE;
1467 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1468 "with KIND argument at %L",
1469 gfc_current_intrinsic, &kind->where) == FAILURE)
1470 return FAILURE;
1472 return SUCCESS;
1477 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
1479 if (type_check (s, 0, BT_CHARACTER) == FAILURE)
1480 return FAILURE;
1482 if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1483 return FAILURE;
1484 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1485 "with KIND argument at %L",
1486 gfc_current_intrinsic, &kind->where) == FAILURE)
1487 return FAILURE;
1489 return SUCCESS;
1494 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1496 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1497 return FAILURE;
1499 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1500 return FAILURE;
1502 return SUCCESS;
1507 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1509 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1510 return FAILURE;
1512 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1513 return FAILURE;
1515 if (status == NULL)
1516 return SUCCESS;
1518 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1519 return FAILURE;
1521 if (scalar_check (status, 2) == FAILURE)
1522 return FAILURE;
1524 return SUCCESS;
1529 gfc_check_loc (gfc_expr *expr)
1531 return variable_check (expr, 0);
1536 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1538 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1539 return FAILURE;
1541 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1542 return FAILURE;
1544 return SUCCESS;
1549 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1551 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1552 return FAILURE;
1554 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1555 return FAILURE;
1557 if (status == NULL)
1558 return SUCCESS;
1560 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1561 return FAILURE;
1563 if (scalar_check (status, 2) == FAILURE)
1564 return FAILURE;
1566 return SUCCESS;
1571 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1573 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1574 return FAILURE;
1575 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1576 return FAILURE;
1578 return SUCCESS;
1582 /* Min/max family. */
1584 static try
1585 min_max_args (gfc_actual_arglist *arg)
1587 if (arg == NULL || arg->next == NULL)
1589 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1590 gfc_current_intrinsic, gfc_current_intrinsic_where);
1591 return FAILURE;
1594 return SUCCESS;
1598 static try
1599 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
1601 gfc_actual_arglist *arg, *tmp;
1603 gfc_expr *x;
1604 int m, n;
1606 if (min_max_args (arglist) == FAILURE)
1607 return FAILURE;
1609 for (arg = arglist, n=1; arg; arg = arg->next, n++)
1611 x = arg->expr;
1612 if (x->ts.type != type || x->ts.kind != kind)
1614 if (x->ts.type == type)
1616 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1617 "kinds at %L", &x->where) == FAILURE)
1618 return FAILURE;
1620 else
1622 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1623 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1624 gfc_basic_typename (type), kind);
1625 return FAILURE;
1629 for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
1631 char buffer[80];
1632 snprintf (buffer, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'",
1633 m, n, gfc_current_intrinsic);
1634 if (gfc_check_conformance (buffer, tmp->expr, x) == FAILURE)
1635 return FAILURE;
1639 return SUCCESS;
1644 gfc_check_min_max (gfc_actual_arglist *arg)
1646 gfc_expr *x;
1648 if (min_max_args (arg) == FAILURE)
1649 return FAILURE;
1651 x = arg->expr;
1653 if (x->ts.type == BT_CHARACTER)
1655 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1656 "with CHARACTER argument at %L",
1657 gfc_current_intrinsic, &x->where) == FAILURE)
1658 return FAILURE;
1660 else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1662 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
1663 "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
1664 return FAILURE;
1667 return check_rest (x->ts.type, x->ts.kind, arg);
1672 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1674 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1679 gfc_check_min_max_real (gfc_actual_arglist *arg)
1681 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1686 gfc_check_min_max_double (gfc_actual_arglist *arg)
1688 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1692 /* End of min/max family. */
1695 gfc_check_malloc (gfc_expr *size)
1697 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1698 return FAILURE;
1700 if (scalar_check (size, 0) == FAILURE)
1701 return FAILURE;
1703 return SUCCESS;
1708 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1710 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1712 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1713 "or LOGICAL", gfc_current_intrinsic_arg[0],
1714 gfc_current_intrinsic, &matrix_a->where);
1715 return FAILURE;
1718 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1720 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1721 "or LOGICAL", gfc_current_intrinsic_arg[1],
1722 gfc_current_intrinsic, &matrix_b->where);
1723 return FAILURE;
1726 switch (matrix_a->rank)
1728 case 1:
1729 if (rank_check (matrix_b, 1, 2) == FAILURE)
1730 return FAILURE;
1731 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1732 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1734 gfc_error ("Different shape on dimension 1 for arguments '%s' "
1735 "and '%s' at %L for intrinsic matmul",
1736 gfc_current_intrinsic_arg[0],
1737 gfc_current_intrinsic_arg[1], &matrix_a->where);
1738 return FAILURE;
1740 break;
1742 case 2:
1743 if (matrix_b->rank != 2)
1745 if (rank_check (matrix_b, 1, 1) == FAILURE)
1746 return FAILURE;
1748 /* matrix_b has rank 1 or 2 here. Common check for the cases
1749 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1750 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1751 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1753 gfc_error ("Different shape on dimension 2 for argument '%s' and "
1754 "dimension 1 for argument '%s' at %L for intrinsic "
1755 "matmul", gfc_current_intrinsic_arg[0],
1756 gfc_current_intrinsic_arg[1], &matrix_a->where);
1757 return FAILURE;
1759 break;
1761 default:
1762 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1763 "1 or 2", gfc_current_intrinsic_arg[0],
1764 gfc_current_intrinsic, &matrix_a->where);
1765 return FAILURE;
1768 return SUCCESS;
1772 /* Whoever came up with this interface was probably on something.
1773 The possibilities for the occupation of the second and third
1774 parameters are:
1776 Arg #2 Arg #3
1777 NULL NULL
1778 DIM NULL
1779 MASK NULL
1780 NULL MASK minloc(array, mask=m)
1781 DIM MASK
1783 I.e. in the case of minloc(array,mask), mask will be in the second
1784 position of the argument list and we'll have to fix that up. */
1787 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1789 gfc_expr *a, *m, *d;
1791 a = ap->expr;
1792 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1793 return FAILURE;
1795 d = ap->next->expr;
1796 m = ap->next->next->expr;
1798 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1799 && ap->next->name == NULL)
1801 m = d;
1802 d = NULL;
1803 ap->next->expr = NULL;
1804 ap->next->next->expr = m;
1807 if (d && dim_check (d, 1, false) == FAILURE)
1808 return FAILURE;
1810 if (d && dim_rank_check (d, a, 0) == FAILURE)
1811 return FAILURE;
1813 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1814 return FAILURE;
1816 if (m != NULL)
1818 char buffer[80];
1819 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1820 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1821 gfc_current_intrinsic);
1822 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1823 return FAILURE;
1826 return SUCCESS;
1830 /* Similar to minloc/maxloc, the argument list might need to be
1831 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1832 difference is that MINLOC/MAXLOC take an additional KIND argument.
1833 The possibilities are:
1835 Arg #2 Arg #3
1836 NULL NULL
1837 DIM NULL
1838 MASK NULL
1839 NULL MASK minval(array, mask=m)
1840 DIM MASK
1842 I.e. in the case of minval(array,mask), mask will be in the second
1843 position of the argument list and we'll have to fix that up. */
1845 static try
1846 check_reduction (gfc_actual_arglist *ap)
1848 gfc_expr *a, *m, *d;
1850 a = ap->expr;
1851 d = ap->next->expr;
1852 m = ap->next->next->expr;
1854 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1855 && ap->next->name == NULL)
1857 m = d;
1858 d = NULL;
1859 ap->next->expr = NULL;
1860 ap->next->next->expr = m;
1863 if (d && dim_check (d, 1, false) == FAILURE)
1864 return FAILURE;
1866 if (d && dim_rank_check (d, a, 0) == FAILURE)
1867 return FAILURE;
1869 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1870 return FAILURE;
1872 if (m != NULL)
1874 char buffer[80];
1875 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1876 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1877 gfc_current_intrinsic);
1878 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1879 return FAILURE;
1882 return SUCCESS;
1887 gfc_check_minval_maxval (gfc_actual_arglist *ap)
1889 if (int_or_real_check (ap->expr, 0) == FAILURE
1890 || array_check (ap->expr, 0) == FAILURE)
1891 return FAILURE;
1893 return check_reduction (ap);
1898 gfc_check_product_sum (gfc_actual_arglist *ap)
1900 if (numeric_check (ap->expr, 0) == FAILURE
1901 || array_check (ap->expr, 0) == FAILURE)
1902 return FAILURE;
1904 return check_reduction (ap);
1909 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
1911 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1912 return FAILURE;
1914 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1915 return FAILURE;
1917 if (tsource->ts.type == BT_CHARACTER)
1918 return check_same_strlen (tsource, fsource, "MERGE");
1920 return SUCCESS;
1925 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
1927 symbol_attribute attr;
1929 if (variable_check (from, 0) == FAILURE)
1930 return FAILURE;
1932 if (array_check (from, 0) == FAILURE)
1933 return FAILURE;
1935 attr = gfc_variable_attr (from, NULL);
1936 if (!attr.allocatable)
1938 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1939 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1940 &from->where);
1941 return FAILURE;
1944 if (variable_check (to, 0) == FAILURE)
1945 return FAILURE;
1947 if (array_check (to, 0) == FAILURE)
1948 return FAILURE;
1950 attr = gfc_variable_attr (to, NULL);
1951 if (!attr.allocatable)
1953 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1954 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1955 &to->where);
1956 return FAILURE;
1959 if (same_type_check (from, 0, to, 1) == FAILURE)
1960 return FAILURE;
1962 if (to->rank != from->rank)
1964 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1965 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
1966 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1967 &to->where, from->rank, to->rank);
1968 return FAILURE;
1971 if (to->ts.kind != from->ts.kind)
1973 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1974 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
1975 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1976 &to->where, from->ts.kind, to->ts.kind);
1977 return FAILURE;
1980 return SUCCESS;
1985 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
1987 if (type_check (x, 0, BT_REAL) == FAILURE)
1988 return FAILURE;
1990 if (type_check (s, 1, BT_REAL) == FAILURE)
1991 return FAILURE;
1993 return SUCCESS;
1998 gfc_check_new_line (gfc_expr *a)
2000 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2001 return FAILURE;
2003 return SUCCESS;
2008 gfc_check_null (gfc_expr *mold)
2010 symbol_attribute attr;
2012 if (mold == NULL)
2013 return SUCCESS;
2015 if (variable_check (mold, 0) == FAILURE)
2016 return FAILURE;
2018 attr = gfc_variable_attr (mold, NULL);
2020 if (!attr.pointer)
2022 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
2023 gfc_current_intrinsic_arg[0],
2024 gfc_current_intrinsic, &mold->where);
2025 return FAILURE;
2028 return SUCCESS;
2033 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2035 char buffer[80];
2037 if (array_check (array, 0) == FAILURE)
2038 return FAILURE;
2040 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2041 return FAILURE;
2043 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
2044 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
2045 gfc_current_intrinsic);
2046 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
2047 return FAILURE;
2049 if (vector != NULL)
2051 if (same_type_check (array, 0, vector, 2) == FAILURE)
2052 return FAILURE;
2054 if (rank_check (vector, 2, 1) == FAILURE)
2055 return FAILURE;
2057 /* TODO: More constraints here. */
2060 return SUCCESS;
2065 gfc_check_precision (gfc_expr *x)
2067 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
2069 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
2070 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
2071 gfc_current_intrinsic, &x->where);
2072 return FAILURE;
2075 return SUCCESS;
2080 gfc_check_present (gfc_expr *a)
2082 gfc_symbol *sym;
2084 if (variable_check (a, 0) == FAILURE)
2085 return FAILURE;
2087 sym = a->symtree->n.sym;
2088 if (!sym->attr.dummy)
2090 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2091 "dummy variable", gfc_current_intrinsic_arg[0],
2092 gfc_current_intrinsic, &a->where);
2093 return FAILURE;
2096 if (!sym->attr.optional)
2098 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2099 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2100 gfc_current_intrinsic, &a->where);
2101 return FAILURE;
2104 /* 13.14.82 PRESENT(A)
2105 ......
2106 Argument. A shall be the name of an optional dummy argument that is
2107 accessible in the subprogram in which the PRESENT function reference
2108 appears... */
2110 if (a->ref != NULL
2111 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2112 && a->ref->u.ar.type == AR_FULL))
2114 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2115 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2116 gfc_current_intrinsic, &a->where, sym->name);
2117 return FAILURE;
2120 return SUCCESS;
2125 gfc_check_radix (gfc_expr *x)
2127 if (int_or_real_check (x, 0) == FAILURE)
2128 return FAILURE;
2130 return SUCCESS;
2135 gfc_check_range (gfc_expr *x)
2137 if (numeric_check (x, 0) == FAILURE)
2138 return FAILURE;
2140 return SUCCESS;
2144 /* real, float, sngl. */
2146 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2148 if (numeric_check (a, 0) == FAILURE)
2149 return FAILURE;
2151 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2152 return FAILURE;
2154 return SUCCESS;
2159 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2161 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2162 return FAILURE;
2164 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2165 return FAILURE;
2167 return SUCCESS;
2172 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2174 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2175 return FAILURE;
2177 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2178 return FAILURE;
2180 if (status == NULL)
2181 return SUCCESS;
2183 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2184 return FAILURE;
2186 if (scalar_check (status, 2) == FAILURE)
2187 return FAILURE;
2189 return SUCCESS;
2194 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2196 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2197 return FAILURE;
2199 if (scalar_check (x, 0) == FAILURE)
2200 return FAILURE;
2202 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2203 return FAILURE;
2205 if (scalar_check (y, 1) == FAILURE)
2206 return FAILURE;
2208 return SUCCESS;
2213 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2214 gfc_expr *pad, gfc_expr *order)
2216 mpz_t size;
2217 mpz_t nelems;
2218 int m;
2220 if (array_check (source, 0) == FAILURE)
2221 return FAILURE;
2223 if (rank_check (shape, 1, 1) == FAILURE)
2224 return FAILURE;
2226 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2227 return FAILURE;
2229 if (gfc_array_size (shape, &size) != SUCCESS)
2231 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2232 "array of constant size", &shape->where);
2233 return FAILURE;
2236 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2237 mpz_clear (size);
2239 if (m > 0)
2241 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2242 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2243 return FAILURE;
2246 if (pad != NULL)
2248 if (same_type_check (source, 0, pad, 2) == FAILURE)
2249 return FAILURE;
2250 if (array_check (pad, 2) == FAILURE)
2251 return FAILURE;
2254 if (order != NULL && array_check (order, 3) == FAILURE)
2255 return FAILURE;
2257 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2258 && gfc_is_constant_expr (shape)
2259 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2260 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2262 /* Check the match in size between source and destination. */
2263 if (gfc_array_size (source, &nelems) == SUCCESS)
2265 gfc_constructor *c;
2266 bool test;
2268 c = shape->value.constructor;
2269 mpz_init_set_ui (size, 1);
2270 for (; c; c = c->next)
2271 mpz_mul (size, size, c->expr->value.integer);
2273 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2274 mpz_clear (nelems);
2275 mpz_clear (size);
2277 if (test)
2279 gfc_error ("Without padding, there are not enough elements "
2280 "in the intrinsic RESHAPE source at %L to match "
2281 "the shape", &source->where);
2282 return FAILURE;
2287 return SUCCESS;
2292 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2294 if (type_check (x, 0, BT_REAL) == FAILURE)
2295 return FAILURE;
2297 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2298 return FAILURE;
2300 return SUCCESS;
2305 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2307 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2308 return FAILURE;
2310 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2311 return FAILURE;
2313 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2314 return FAILURE;
2316 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2317 return FAILURE;
2318 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2319 "with KIND argument at %L",
2320 gfc_current_intrinsic, &kind->where) == FAILURE)
2321 return FAILURE;
2323 if (same_type_check (x, 0, y, 1) == FAILURE)
2324 return FAILURE;
2326 return SUCCESS;
2331 gfc_check_secnds (gfc_expr *r)
2333 if (type_check (r, 0, BT_REAL) == FAILURE)
2334 return FAILURE;
2336 if (kind_value_check (r, 0, 4) == FAILURE)
2337 return FAILURE;
2339 if (scalar_check (r, 0) == FAILURE)
2340 return FAILURE;
2342 return SUCCESS;
2347 gfc_check_selected_int_kind (gfc_expr *r)
2349 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2350 return FAILURE;
2352 if (scalar_check (r, 0) == FAILURE)
2353 return FAILURE;
2355 return SUCCESS;
2360 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2362 if (p == NULL && r == NULL)
2364 gfc_error ("Missing arguments to %s intrinsic at %L",
2365 gfc_current_intrinsic, gfc_current_intrinsic_where);
2367 return FAILURE;
2370 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2371 return FAILURE;
2373 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2374 return FAILURE;
2376 return SUCCESS;
2381 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2383 if (type_check (x, 0, BT_REAL) == FAILURE)
2384 return FAILURE;
2386 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2387 return FAILURE;
2389 return SUCCESS;
2394 gfc_check_shape (gfc_expr *source)
2396 gfc_array_ref *ar;
2398 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2399 return SUCCESS;
2401 ar = gfc_find_array_ref (source);
2403 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2405 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2406 "an assumed size array", &source->where);
2407 return FAILURE;
2410 return SUCCESS;
2415 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2417 if (int_or_real_check (a, 0) == FAILURE)
2418 return FAILURE;
2420 if (same_type_check (a, 0, b, 1) == FAILURE)
2421 return FAILURE;
2423 return SUCCESS;
2428 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2430 if (array_check (array, 0) == FAILURE)
2431 return FAILURE;
2433 if (dim != NULL)
2435 if (dim_check (dim, 1, true) == FAILURE)
2436 return FAILURE;
2438 if (dim_rank_check (dim, array, 0) == FAILURE)
2439 return FAILURE;
2442 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2443 return FAILURE;
2444 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2445 "with KIND argument at %L",
2446 gfc_current_intrinsic, &kind->where) == FAILURE)
2447 return FAILURE;
2450 return SUCCESS;
2455 gfc_check_sizeof (gfc_expr *arg __attribute__((unused)))
2457 return SUCCESS;
2462 gfc_check_sleep_sub (gfc_expr *seconds)
2464 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2465 return FAILURE;
2467 if (scalar_check (seconds, 0) == FAILURE)
2468 return FAILURE;
2470 return SUCCESS;
2475 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2477 if (source->rank >= GFC_MAX_DIMENSIONS)
2479 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2480 "than rank %d", gfc_current_intrinsic_arg[0],
2481 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2483 return FAILURE;
2486 if (dim == NULL)
2487 return FAILURE;
2489 if (dim_check (dim, 1, false) == FAILURE)
2490 return FAILURE;
2492 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2493 return FAILURE;
2495 if (scalar_check (ncopies, 2) == FAILURE)
2496 return FAILURE;
2498 return SUCCESS;
2502 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2503 functions). */
2506 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2508 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2509 return FAILURE;
2511 if (scalar_check (unit, 0) == FAILURE)
2512 return FAILURE;
2514 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2515 return FAILURE;
2517 if (status == NULL)
2518 return SUCCESS;
2520 if (type_check (status, 2, BT_INTEGER) == FAILURE
2521 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2522 || scalar_check (status, 2) == FAILURE)
2523 return FAILURE;
2525 return SUCCESS;
2530 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2532 return gfc_check_fgetputc_sub (unit, c, NULL);
2537 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2539 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2540 return FAILURE;
2542 if (status == NULL)
2543 return SUCCESS;
2545 if (type_check (status, 1, BT_INTEGER) == FAILURE
2546 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2547 || scalar_check (status, 1) == FAILURE)
2548 return FAILURE;
2550 return SUCCESS;
2555 gfc_check_fgetput (gfc_expr *c)
2557 return gfc_check_fgetput_sub (c, NULL);
2562 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
2564 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2565 return FAILURE;
2567 if (scalar_check (unit, 0) == FAILURE)
2568 return FAILURE;
2570 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2571 return FAILURE;
2573 if (scalar_check (offset, 1) == FAILURE)
2574 return FAILURE;
2576 if (type_check (whence, 2, BT_INTEGER) == FAILURE)
2577 return FAILURE;
2579 if (scalar_check (whence, 2) == FAILURE)
2580 return FAILURE;
2582 if (status == NULL)
2583 return SUCCESS;
2585 if (type_check (status, 3, BT_INTEGER) == FAILURE)
2586 return FAILURE;
2588 if (kind_value_check (status, 3, 4) == FAILURE)
2589 return FAILURE;
2591 if (scalar_check (status, 3) == FAILURE)
2592 return FAILURE;
2594 return SUCCESS;
2600 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2602 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2603 return FAILURE;
2605 if (scalar_check (unit, 0) == FAILURE)
2606 return FAILURE;
2608 if (type_check (array, 1, BT_INTEGER) == FAILURE
2609 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2610 return FAILURE;
2612 if (array_check (array, 1) == FAILURE)
2613 return FAILURE;
2615 return SUCCESS;
2620 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2622 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2623 return FAILURE;
2625 if (scalar_check (unit, 0) == FAILURE)
2626 return FAILURE;
2628 if (type_check (array, 1, BT_INTEGER) == FAILURE
2629 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2630 return FAILURE;
2632 if (array_check (array, 1) == FAILURE)
2633 return FAILURE;
2635 if (status == NULL)
2636 return SUCCESS;
2638 if (type_check (status, 2, BT_INTEGER) == FAILURE
2639 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2640 return FAILURE;
2642 if (scalar_check (status, 2) == FAILURE)
2643 return FAILURE;
2645 return SUCCESS;
2650 gfc_check_ftell (gfc_expr *unit)
2652 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2653 return FAILURE;
2655 if (scalar_check (unit, 0) == FAILURE)
2656 return FAILURE;
2658 return SUCCESS;
2663 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
2665 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2666 return FAILURE;
2668 if (scalar_check (unit, 0) == FAILURE)
2669 return FAILURE;
2671 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2672 return FAILURE;
2674 if (scalar_check (offset, 1) == FAILURE)
2675 return FAILURE;
2677 return SUCCESS;
2682 gfc_check_stat (gfc_expr *name, gfc_expr *array)
2684 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2685 return FAILURE;
2687 if (type_check (array, 1, BT_INTEGER) == FAILURE
2688 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2689 return FAILURE;
2691 if (array_check (array, 1) == FAILURE)
2692 return FAILURE;
2694 return SUCCESS;
2699 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
2701 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2702 return FAILURE;
2704 if (type_check (array, 1, BT_INTEGER) == FAILURE
2705 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2706 return FAILURE;
2708 if (array_check (array, 1) == FAILURE)
2709 return FAILURE;
2711 if (status == NULL)
2712 return SUCCESS;
2714 if (type_check (status, 2, BT_INTEGER) == FAILURE
2715 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2716 return FAILURE;
2718 if (scalar_check (status, 2) == FAILURE)
2719 return FAILURE;
2721 return SUCCESS;
2726 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
2727 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
2729 if (mold->ts.type == BT_HOLLERITH)
2731 gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
2732 &mold->where, gfc_basic_typename (BT_HOLLERITH));
2733 return FAILURE;
2736 if (size != NULL)
2738 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2739 return FAILURE;
2741 if (scalar_check (size, 2) == FAILURE)
2742 return FAILURE;
2744 if (nonoptional_check (size, 2) == FAILURE)
2745 return FAILURE;
2748 return SUCCESS;
2753 gfc_check_transpose (gfc_expr *matrix)
2755 if (rank_check (matrix, 0, 2) == FAILURE)
2756 return FAILURE;
2758 return SUCCESS;
2763 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2765 if (array_check (array, 0) == FAILURE)
2766 return FAILURE;
2768 if (dim != NULL)
2770 if (dim_check (dim, 1, false) == FAILURE)
2771 return FAILURE;
2773 if (dim_rank_check (dim, array, 0) == FAILURE)
2774 return FAILURE;
2777 if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2778 return FAILURE;
2779 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2780 "with KIND argument at %L",
2781 gfc_current_intrinsic, &kind->where) == FAILURE)
2782 return FAILURE;
2784 return SUCCESS;
2789 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
2791 if (rank_check (vector, 0, 1) == FAILURE)
2792 return FAILURE;
2794 if (array_check (mask, 1) == FAILURE)
2795 return FAILURE;
2797 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2798 return FAILURE;
2800 if (same_type_check (vector, 0, field, 2) == FAILURE)
2801 return FAILURE;
2803 return SUCCESS;
2808 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
2810 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2811 return FAILURE;
2813 if (same_type_check (x, 0, y, 1) == FAILURE)
2814 return FAILURE;
2816 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2817 return FAILURE;
2819 if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
2820 return FAILURE;
2821 if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2822 "with KIND argument at %L",
2823 gfc_current_intrinsic, &kind->where) == FAILURE)
2824 return FAILURE;
2826 return SUCCESS;
2831 gfc_check_trim (gfc_expr *x)
2833 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2834 return FAILURE;
2836 if (scalar_check (x, 0) == FAILURE)
2837 return FAILURE;
2839 return SUCCESS;
2844 gfc_check_ttynam (gfc_expr *unit)
2846 if (scalar_check (unit, 0) == FAILURE)
2847 return FAILURE;
2849 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2850 return FAILURE;
2852 return SUCCESS;
2856 /* Common check function for the half a dozen intrinsics that have a
2857 single real argument. */
2860 gfc_check_x (gfc_expr *x)
2862 if (type_check (x, 0, BT_REAL) == FAILURE)
2863 return FAILURE;
2865 return SUCCESS;
2869 /************* Check functions for intrinsic subroutines *************/
2872 gfc_check_cpu_time (gfc_expr *time)
2874 if (scalar_check (time, 0) == FAILURE)
2875 return FAILURE;
2877 if (type_check (time, 0, BT_REAL) == FAILURE)
2878 return FAILURE;
2880 if (variable_check (time, 0) == FAILURE)
2881 return FAILURE;
2883 return SUCCESS;
2888 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
2889 gfc_expr *zone, gfc_expr *values)
2891 if (date != NULL)
2893 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2894 return FAILURE;
2895 if (scalar_check (date, 0) == FAILURE)
2896 return FAILURE;
2897 if (variable_check (date, 0) == FAILURE)
2898 return FAILURE;
2901 if (time != NULL)
2903 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2904 return FAILURE;
2905 if (scalar_check (time, 1) == FAILURE)
2906 return FAILURE;
2907 if (variable_check (time, 1) == FAILURE)
2908 return FAILURE;
2911 if (zone != NULL)
2913 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2914 return FAILURE;
2915 if (scalar_check (zone, 2) == FAILURE)
2916 return FAILURE;
2917 if (variable_check (zone, 2) == FAILURE)
2918 return FAILURE;
2921 if (values != NULL)
2923 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2924 return FAILURE;
2925 if (array_check (values, 3) == FAILURE)
2926 return FAILURE;
2927 if (rank_check (values, 3, 1) == FAILURE)
2928 return FAILURE;
2929 if (variable_check (values, 3) == FAILURE)
2930 return FAILURE;
2933 return SUCCESS;
2938 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
2939 gfc_expr *to, gfc_expr *topos)
2941 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2942 return FAILURE;
2944 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2945 return FAILURE;
2947 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2948 return FAILURE;
2950 if (same_type_check (from, 0, to, 3) == FAILURE)
2951 return FAILURE;
2953 if (variable_check (to, 3) == FAILURE)
2954 return FAILURE;
2956 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2957 return FAILURE;
2959 return SUCCESS;
2964 gfc_check_random_number (gfc_expr *harvest)
2966 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2967 return FAILURE;
2969 if (variable_check (harvest, 0) == FAILURE)
2970 return FAILURE;
2972 return SUCCESS;
2977 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
2979 unsigned int nargs = 0;
2980 locus *where = NULL;
2982 if (size != NULL)
2984 if (size->expr_type != EXPR_VARIABLE
2985 || !size->symtree->n.sym->attr.optional)
2986 nargs++;
2988 if (scalar_check (size, 0) == FAILURE)
2989 return FAILURE;
2991 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2992 return FAILURE;
2994 if (variable_check (size, 0) == FAILURE)
2995 return FAILURE;
2997 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2998 return FAILURE;
3001 if (put != NULL)
3003 if (put->expr_type != EXPR_VARIABLE
3004 || !put->symtree->n.sym->attr.optional)
3006 nargs++;
3007 where = &put->where;
3010 if (array_check (put, 1) == FAILURE)
3011 return FAILURE;
3013 if (rank_check (put, 1, 1) == FAILURE)
3014 return FAILURE;
3016 if (type_check (put, 1, BT_INTEGER) == FAILURE)
3017 return FAILURE;
3019 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
3020 return FAILURE;
3023 if (get != NULL)
3025 if (get->expr_type != EXPR_VARIABLE
3026 || !get->symtree->n.sym->attr.optional)
3028 nargs++;
3029 where = &get->where;
3032 if (array_check (get, 2) == FAILURE)
3033 return FAILURE;
3035 if (rank_check (get, 2, 1) == FAILURE)
3036 return FAILURE;
3038 if (type_check (get, 2, BT_INTEGER) == FAILURE)
3039 return FAILURE;
3041 if (variable_check (get, 2) == FAILURE)
3042 return FAILURE;
3044 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
3045 return FAILURE;
3048 /* RANDOM_SEED may not have more than one non-optional argument. */
3049 if (nargs > 1)
3050 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
3052 return SUCCESS;
3057 gfc_check_second_sub (gfc_expr *time)
3059 if (scalar_check (time, 0) == FAILURE)
3060 return FAILURE;
3062 if (type_check (time, 0, BT_REAL) == FAILURE)
3063 return FAILURE;
3065 if (kind_value_check(time, 0, 4) == FAILURE)
3066 return FAILURE;
3068 return SUCCESS;
3072 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
3073 count, count_rate, and count_max are all optional arguments */
3076 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
3077 gfc_expr *count_max)
3079 if (count != NULL)
3081 if (scalar_check (count, 0) == FAILURE)
3082 return FAILURE;
3084 if (type_check (count, 0, BT_INTEGER) == FAILURE)
3085 return FAILURE;
3087 if (variable_check (count, 0) == FAILURE)
3088 return FAILURE;
3091 if (count_rate != NULL)
3093 if (scalar_check (count_rate, 1) == FAILURE)
3094 return FAILURE;
3096 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
3097 return FAILURE;
3099 if (variable_check (count_rate, 1) == FAILURE)
3100 return FAILURE;
3102 if (count != NULL
3103 && same_type_check (count, 0, count_rate, 1) == FAILURE)
3104 return FAILURE;
3108 if (count_max != NULL)
3110 if (scalar_check (count_max, 2) == FAILURE)
3111 return FAILURE;
3113 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
3114 return FAILURE;
3116 if (variable_check (count_max, 2) == FAILURE)
3117 return FAILURE;
3119 if (count != NULL
3120 && same_type_check (count, 0, count_max, 2) == FAILURE)
3121 return FAILURE;
3123 if (count_rate != NULL
3124 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
3125 return FAILURE;
3128 return SUCCESS;
3133 gfc_check_irand (gfc_expr *x)
3135 if (x == NULL)
3136 return SUCCESS;
3138 if (scalar_check (x, 0) == FAILURE)
3139 return FAILURE;
3141 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3142 return FAILURE;
3144 if (kind_value_check(x, 0, 4) == FAILURE)
3145 return FAILURE;
3147 return SUCCESS;
3152 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
3154 if (scalar_check (seconds, 0) == FAILURE)
3155 return FAILURE;
3157 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3158 return FAILURE;
3160 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3162 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3163 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3164 gfc_current_intrinsic, &handler->where);
3165 return FAILURE;
3168 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3169 return FAILURE;
3171 if (status == NULL)
3172 return SUCCESS;
3174 if (scalar_check (status, 2) == FAILURE)
3175 return FAILURE;
3177 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3178 return FAILURE;
3180 if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3181 return FAILURE;
3183 return SUCCESS;
3188 gfc_check_rand (gfc_expr *x)
3190 if (x == NULL)
3191 return SUCCESS;
3193 if (scalar_check (x, 0) == FAILURE)
3194 return FAILURE;
3196 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3197 return FAILURE;
3199 if (kind_value_check(x, 0, 4) == FAILURE)
3200 return FAILURE;
3202 return SUCCESS;
3207 gfc_check_srand (gfc_expr *x)
3209 if (scalar_check (x, 0) == FAILURE)
3210 return FAILURE;
3212 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3213 return FAILURE;
3215 if (kind_value_check(x, 0, 4) == FAILURE)
3216 return FAILURE;
3218 return SUCCESS;
3223 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3225 if (scalar_check (time, 0) == FAILURE)
3226 return FAILURE;
3228 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3229 return FAILURE;
3231 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3232 return FAILURE;
3234 return SUCCESS;
3239 gfc_check_etime (gfc_expr *x)
3241 if (array_check (x, 0) == FAILURE)
3242 return FAILURE;
3244 if (rank_check (x, 0, 1) == FAILURE)
3245 return FAILURE;
3247 if (variable_check (x, 0) == FAILURE)
3248 return FAILURE;
3250 if (type_check (x, 0, BT_REAL) == FAILURE)
3251 return FAILURE;
3253 if (kind_value_check(x, 0, 4) == FAILURE)
3254 return FAILURE;
3256 return SUCCESS;
3261 gfc_check_etime_sub (gfc_expr *values, gfc_expr *time)
3263 if (array_check (values, 0) == FAILURE)
3264 return FAILURE;
3266 if (rank_check (values, 0, 1) == FAILURE)
3267 return FAILURE;
3269 if (variable_check (values, 0) == FAILURE)
3270 return FAILURE;
3272 if (type_check (values, 0, BT_REAL) == FAILURE)
3273 return FAILURE;
3275 if (kind_value_check(values, 0, 4) == FAILURE)
3276 return FAILURE;
3278 if (scalar_check (time, 1) == FAILURE)
3279 return FAILURE;
3281 if (type_check (time, 1, BT_REAL) == FAILURE)
3282 return FAILURE;
3284 if (kind_value_check(time, 1, 4) == FAILURE)
3285 return FAILURE;
3287 return SUCCESS;
3292 gfc_check_fdate_sub (gfc_expr *date)
3294 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3295 return FAILURE;
3297 return SUCCESS;
3302 gfc_check_gerror (gfc_expr *msg)
3304 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3305 return FAILURE;
3307 return SUCCESS;
3312 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3314 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3315 return FAILURE;
3317 if (status == NULL)
3318 return SUCCESS;
3320 if (scalar_check (status, 1) == FAILURE)
3321 return FAILURE;
3323 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3324 return FAILURE;
3326 return SUCCESS;
3331 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
3333 if (type_check (pos, 0, BT_INTEGER) == FAILURE)
3334 return FAILURE;
3336 if (pos->ts.kind > gfc_default_integer_kind)
3338 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
3339 "not wider than the default kind (%d)",
3340 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
3341 &pos->where, gfc_default_integer_kind);
3342 return FAILURE;
3345 if (type_check (value, 1, BT_CHARACTER) == FAILURE)
3346 return FAILURE;
3348 return SUCCESS;
3353 gfc_check_getlog (gfc_expr *msg)
3355 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3356 return FAILURE;
3358 return SUCCESS;
3363 gfc_check_exit (gfc_expr *status)
3365 if (status == NULL)
3366 return SUCCESS;
3368 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3369 return FAILURE;
3371 if (scalar_check (status, 0) == FAILURE)
3372 return FAILURE;
3374 return SUCCESS;
3379 gfc_check_flush (gfc_expr *unit)
3381 if (unit == NULL)
3382 return SUCCESS;
3384 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3385 return FAILURE;
3387 if (scalar_check (unit, 0) == FAILURE)
3388 return FAILURE;
3390 return SUCCESS;
3395 gfc_check_free (gfc_expr *i)
3397 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3398 return FAILURE;
3400 if (scalar_check (i, 0) == FAILURE)
3401 return FAILURE;
3403 return SUCCESS;
3408 gfc_check_hostnm (gfc_expr *name)
3410 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3411 return FAILURE;
3413 return SUCCESS;
3418 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3420 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3421 return FAILURE;
3423 if (status == NULL)
3424 return SUCCESS;
3426 if (scalar_check (status, 1) == FAILURE)
3427 return FAILURE;
3429 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3430 return FAILURE;
3432 return SUCCESS;
3437 gfc_check_itime_idate (gfc_expr *values)
3439 if (array_check (values, 0) == FAILURE)
3440 return FAILURE;
3442 if (rank_check (values, 0, 1) == FAILURE)
3443 return FAILURE;
3445 if (variable_check (values, 0) == FAILURE)
3446 return FAILURE;
3448 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3449 return FAILURE;
3451 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3452 return FAILURE;
3454 return SUCCESS;
3459 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3461 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3462 return FAILURE;
3464 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3465 return FAILURE;
3467 if (scalar_check (time, 0) == FAILURE)
3468 return FAILURE;
3470 if (array_check (values, 1) == FAILURE)
3471 return FAILURE;
3473 if (rank_check (values, 1, 1) == FAILURE)
3474 return FAILURE;
3476 if (variable_check (values, 1) == FAILURE)
3477 return FAILURE;
3479 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3480 return FAILURE;
3482 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3483 return FAILURE;
3485 return SUCCESS;
3490 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3492 if (scalar_check (unit, 0) == FAILURE)
3493 return FAILURE;
3495 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3496 return FAILURE;
3498 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3499 return FAILURE;
3501 return SUCCESS;
3506 gfc_check_isatty (gfc_expr *unit)
3508 if (unit == NULL)
3509 return FAILURE;
3511 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3512 return FAILURE;
3514 if (scalar_check (unit, 0) == FAILURE)
3515 return FAILURE;
3517 return SUCCESS;
3522 gfc_check_isnan (gfc_expr *x)
3524 if (type_check (x, 0, BT_REAL) == FAILURE)
3525 return FAILURE;
3527 return SUCCESS;
3532 gfc_check_perror (gfc_expr *string)
3534 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3535 return FAILURE;
3537 return SUCCESS;
3542 gfc_check_umask (gfc_expr *mask)
3544 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3545 return FAILURE;
3547 if (scalar_check (mask, 0) == FAILURE)
3548 return FAILURE;
3550 return SUCCESS;
3555 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
3557 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3558 return FAILURE;
3560 if (scalar_check (mask, 0) == FAILURE)
3561 return FAILURE;
3563 if (old == NULL)
3564 return SUCCESS;
3566 if (scalar_check (old, 1) == FAILURE)
3567 return FAILURE;
3569 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3570 return FAILURE;
3572 return SUCCESS;
3577 gfc_check_unlink (gfc_expr *name)
3579 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3580 return FAILURE;
3582 return SUCCESS;
3587 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
3589 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3590 return FAILURE;
3592 if (status == NULL)
3593 return SUCCESS;
3595 if (scalar_check (status, 1) == FAILURE)
3596 return FAILURE;
3598 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3599 return FAILURE;
3601 return SUCCESS;
3606 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
3608 if (scalar_check (number, 0) == FAILURE)
3609 return FAILURE;
3611 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3612 return FAILURE;
3614 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3616 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3617 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3618 gfc_current_intrinsic, &handler->where);
3619 return FAILURE;
3622 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3623 return FAILURE;
3625 return SUCCESS;
3630 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
3632 if (scalar_check (number, 0) == FAILURE)
3633 return FAILURE;
3635 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3636 return FAILURE;
3638 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3640 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3641 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3642 gfc_current_intrinsic, &handler->where);
3643 return FAILURE;
3646 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3647 return FAILURE;
3649 if (status == NULL)
3650 return SUCCESS;
3652 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3653 return FAILURE;
3655 if (scalar_check (status, 2) == FAILURE)
3656 return FAILURE;
3658 return SUCCESS;
3663 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
3665 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3666 return FAILURE;
3668 if (scalar_check (status, 1) == FAILURE)
3669 return FAILURE;
3671 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3672 return FAILURE;
3674 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3675 return FAILURE;
3677 return SUCCESS;
3681 /* This is used for the GNU intrinsics AND, OR and XOR. */
3683 gfc_check_and (gfc_expr *i, gfc_expr *j)
3685 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3687 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3688 "or LOGICAL", gfc_current_intrinsic_arg[0],
3689 gfc_current_intrinsic, &i->where);
3690 return FAILURE;
3693 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3695 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3696 "or LOGICAL", gfc_current_intrinsic_arg[1],
3697 gfc_current_intrinsic, &j->where);
3698 return FAILURE;
3701 if (i->ts.type != j->ts.type)
3703 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3704 "have the same type", gfc_current_intrinsic_arg[0],
3705 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3706 &j->where);
3707 return FAILURE;
3710 if (scalar_check (i, 0) == FAILURE)
3711 return FAILURE;
3713 if (scalar_check (j, 1) == FAILURE)
3714 return FAILURE;
3716 return SUCCESS;