Merge from mainline
[official-gcc.git] / gcc / fortran / check.c
bloba24333c2d6ed11aaa48abe3b936de07bf21a7fa8
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
3 Contributed by Andy Vaught & Katherine Holcomb
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA. */
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 /* Check the type of an expression. */
38 static try
39 type_check (gfc_expr * e, int n, bt type)
41 if (e->ts.type == type)
42 return SUCCESS;
44 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
45 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
46 gfc_basic_typename (type));
48 return FAILURE;
52 /* Check that the expression is a numeric type. */
54 static try
55 numeric_check (gfc_expr * e, int n)
57 if (gfc_numeric_ts (&e->ts))
58 return SUCCESS;
60 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
61 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
63 return FAILURE;
67 /* Check that an expression is integer or real. */
69 static try
70 int_or_real_check (gfc_expr * e, int n)
72 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
74 gfc_error (
75 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
76 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
77 return FAILURE;
80 return SUCCESS;
84 /* Check that an expression is real or complex. */
86 static try
87 real_or_complex_check (gfc_expr * e, int n)
89 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
91 gfc_error (
92 "'%s' argument of '%s' intrinsic at %L must be REAL or COMPLEX",
93 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
94 return FAILURE;
97 return SUCCESS;
101 /* Check that the expression is an optional constant integer
102 and that it specifies a valid kind for that type. */
104 static try
105 kind_check (gfc_expr * k, int n, bt type)
107 int kind;
109 if (k == NULL)
110 return SUCCESS;
112 if (type_check (k, n, BT_INTEGER) == FAILURE)
113 return FAILURE;
115 if (k->expr_type != EXPR_CONSTANT)
117 gfc_error (
118 "'%s' argument of '%s' intrinsic at %L must be a constant",
119 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &k->where);
120 return FAILURE;
123 if (gfc_extract_int (k, &kind) != NULL
124 || gfc_validate_kind (type, kind, true) < 0)
126 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
127 &k->where);
128 return FAILURE;
131 return SUCCESS;
135 /* Make sure the expression is a double precision real. */
137 static try
138 double_check (gfc_expr * d, int n)
140 if (type_check (d, n, BT_REAL) == FAILURE)
141 return FAILURE;
143 if (d->ts.kind != gfc_default_double_kind)
145 gfc_error (
146 "'%s' argument of '%s' intrinsic at %L must be double precision",
147 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &d->where);
148 return FAILURE;
151 return SUCCESS;
155 /* Make sure the expression is a logical array. */
157 static try
158 logical_array_check (gfc_expr * array, int n)
160 if (array->ts.type != BT_LOGICAL || array->rank == 0)
162 gfc_error (
163 "'%s' argument of '%s' intrinsic at %L must be a logical array",
164 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &array->where);
165 return FAILURE;
168 return SUCCESS;
172 /* Make sure an expression is an array. */
174 static try
175 array_check (gfc_expr * e, int n)
177 if (e->rank != 0)
178 return SUCCESS;
180 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
181 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
183 return FAILURE;
187 /* Make sure an expression is a scalar. */
189 static try
190 scalar_check (gfc_expr * e, int n)
192 if (e->rank == 0)
193 return SUCCESS;
195 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
196 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
198 return FAILURE;
202 /* Make sure two expression have the same type. */
204 static try
205 same_type_check (gfc_expr * e, int n, gfc_expr * f, int m)
207 if (gfc_compare_types (&e->ts, &f->ts))
208 return SUCCESS;
210 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
211 "and kind as '%s'", gfc_current_intrinsic_arg[m],
212 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
213 return FAILURE;
217 /* Make sure that an expression has a certain (nonzero) rank. */
219 static try
220 rank_check (gfc_expr * e, int n, int rank)
222 if (e->rank == rank)
223 return SUCCESS;
225 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
226 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
227 &e->where, rank);
228 return FAILURE;
232 /* Make sure a variable expression is not an optional dummy argument. */
234 static try
235 nonoptional_check (gfc_expr * e, int n)
237 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
239 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
240 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
241 &e->where);
245 /* TODO: Recursive check on nonoptional variables? */
247 return SUCCESS;
251 /* Check that an expression has a particular kind. */
253 static try
254 kind_value_check (gfc_expr * e, int n, int k)
256 if (e->ts.kind == k)
257 return SUCCESS;
259 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
260 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
261 &e->where, k);
262 return FAILURE;
266 /* Make sure an expression is a variable. */
268 static try
269 variable_check (gfc_expr * e, int n)
271 if ((e->expr_type == EXPR_VARIABLE
272 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
273 || (e->expr_type == EXPR_FUNCTION
274 && e->symtree->n.sym->result == e->symtree->n.sym))
275 return SUCCESS;
277 if (e->expr_type == EXPR_VARIABLE
278 && e->symtree->n.sym->attr.intent == INTENT_IN)
280 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
281 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
282 &e->where);
283 return FAILURE;
286 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
287 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
289 return FAILURE;
293 /* Check the common DIM parameter for correctness. */
295 static try
296 dim_check (gfc_expr * dim, int n, int optional)
298 if (optional && dim == NULL)
299 return SUCCESS;
301 if (dim == NULL)
303 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
304 gfc_current_intrinsic, gfc_current_intrinsic_where);
305 return FAILURE;
308 if (type_check (dim, n, BT_INTEGER) == FAILURE)
309 return FAILURE;
311 if (scalar_check (dim, n) == FAILURE)
312 return FAILURE;
314 if (nonoptional_check (dim, n) == FAILURE)
315 return FAILURE;
317 return SUCCESS;
321 /* If a DIM parameter is a constant, make sure that it is greater than
322 zero and less than or equal to the rank of the given array. If
323 allow_assumed is zero then dim must be less than the rank of the array
324 for assumed size arrays. */
326 static try
327 dim_rank_check (gfc_expr * dim, gfc_expr * array, int allow_assumed)
329 gfc_array_ref *ar;
330 int rank;
332 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
333 return SUCCESS;
335 ar = gfc_find_array_ref (array);
336 rank = array->rank;
337 if (ar->as->type == AS_ASSUMED_SIZE && !allow_assumed)
338 rank--;
340 if (mpz_cmp_ui (dim->value.integer, 1) < 0
341 || mpz_cmp_ui (dim->value.integer, rank) > 0)
343 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
344 "dimension index", gfc_current_intrinsic, &dim->where);
346 return FAILURE;
349 return SUCCESS;
352 /* Compare the size of a along dimension ai with the size of b along
353 dimension bi, returning 0 if they are known not to be identical,
354 and 1 if they are identical, or if this cannot be determined. */
356 static int
357 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
359 mpz_t a_size, b_size;
360 int ret;
362 gcc_assert (a->rank > ai);
363 gcc_assert (b->rank > bi);
365 ret = 1;
367 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
369 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
371 if (mpz_cmp (a_size, b_size) != 0)
372 ret = 0;
374 mpz_clear (b_size);
376 mpz_clear (a_size);
378 return ret;
381 /***** Check functions *****/
383 /* Check subroutine suitable for intrinsics taking a real argument and
384 a kind argument for the result. */
386 static try
387 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
389 if (type_check (a, 0, BT_REAL) == FAILURE)
390 return FAILURE;
391 if (kind_check (kind, 1, type) == FAILURE)
392 return FAILURE;
394 return SUCCESS;
397 /* Check subroutine suitable for ceiling, floor and nint. */
400 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
402 return check_a_kind (a, kind, BT_INTEGER);
405 /* Check subroutine suitable for aint, anint. */
408 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
410 return check_a_kind (a, kind, BT_REAL);
414 gfc_check_abs (gfc_expr * a)
416 if (numeric_check (a, 0) == FAILURE)
417 return FAILURE;
419 return SUCCESS;
423 gfc_check_achar (gfc_expr * a)
426 if (type_check (a, 0, BT_INTEGER) == FAILURE)
427 return FAILURE;
429 return SUCCESS;
434 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
436 if (logical_array_check (mask, 0) == FAILURE)
437 return FAILURE;
439 if (dim_check (dim, 1, 1) == FAILURE)
440 return FAILURE;
442 return SUCCESS;
447 gfc_check_allocated (gfc_expr * array)
449 if (variable_check (array, 0) == FAILURE)
450 return FAILURE;
452 if (array_check (array, 0) == FAILURE)
453 return FAILURE;
455 if (!array->symtree->n.sym->attr.allocatable)
457 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
458 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
459 &array->where);
460 return FAILURE;
463 return SUCCESS;
467 /* Common check function where the first argument must be real or
468 integer and the second argument must be the same as the first. */
471 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
473 if (int_or_real_check (a, 0) == FAILURE)
474 return FAILURE;
476 if (a->ts.type != p->ts.type)
478 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
479 "have the same type", gfc_current_intrinsic_arg[0],
480 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
481 &p->where);
482 return FAILURE;
485 if (a->ts.kind != p->ts.kind)
487 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
488 &p->where) == FAILURE)
489 return FAILURE;
492 return SUCCESS;
497 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
499 symbol_attribute attr;
500 int i;
501 try t;
503 if (pointer->expr_type == EXPR_VARIABLE)
504 attr = gfc_variable_attr (pointer, NULL);
505 else if (pointer->expr_type == EXPR_FUNCTION)
506 attr = pointer->symtree->n.sym->attr;
507 else
508 gcc_assert (0); /* Pointer must be a variable or a function. */
510 if (!attr.pointer)
512 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
513 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
514 &pointer->where);
515 return FAILURE;
518 /* Target argument is optional. */
519 if (target == NULL)
520 return SUCCESS;
522 if (target->expr_type == EXPR_NULL)
524 gfc_error ("NULL pointer at %L is not permitted as actual argument "
525 "of '%s' intrinsic function",
526 &target->where, gfc_current_intrinsic);
527 return FAILURE;
530 if (target->expr_type == EXPR_VARIABLE)
531 attr = gfc_variable_attr (target, NULL);
532 else if (target->expr_type == EXPR_FUNCTION)
533 attr = target->symtree->n.sym->attr;
534 else
535 gcc_assert (0); /* Target must be a variable or a function. */
537 if (!attr.pointer && !attr.target)
539 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
540 "or a TARGET", gfc_current_intrinsic_arg[1],
541 gfc_current_intrinsic, &target->where);
542 return FAILURE;
545 t = SUCCESS;
546 if (same_type_check (pointer, 0, target, 1) == FAILURE)
547 t = FAILURE;
548 if (rank_check (target, 0, pointer->rank) == FAILURE)
549 t = FAILURE;
550 if (target->rank > 0)
552 for (i = 0; i < target->rank; i++)
553 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
555 gfc_error ("Array section with a vector subscript at %L shall not "
556 "be the target of a pointer",
557 &target->where);
558 t = FAILURE;
559 break;
562 return t;
567 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
569 if (type_check (y, 0, BT_REAL) == FAILURE)
570 return FAILURE;
571 if (same_type_check (y, 0, x, 1) == FAILURE)
572 return FAILURE;
574 return SUCCESS;
578 /* BESJN and BESYN functions. */
581 gfc_check_besn (gfc_expr * n, gfc_expr * x)
583 if (scalar_check (n, 0) == FAILURE)
584 return FAILURE;
586 if (type_check (n, 0, BT_INTEGER) == FAILURE)
587 return FAILURE;
589 if (scalar_check (x, 1) == FAILURE)
590 return FAILURE;
592 if (type_check (x, 1, BT_REAL) == FAILURE)
593 return FAILURE;
595 return SUCCESS;
600 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
602 if (type_check (i, 0, BT_INTEGER) == FAILURE)
603 return FAILURE;
604 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
605 return FAILURE;
607 return SUCCESS;
612 gfc_check_char (gfc_expr * i, gfc_expr * kind)
614 if (type_check (i, 0, BT_INTEGER) == FAILURE)
615 return FAILURE;
616 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
617 return FAILURE;
619 return SUCCESS;
624 gfc_check_chdir (gfc_expr * dir)
626 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
627 return FAILURE;
629 return SUCCESS;
634 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
636 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
637 return FAILURE;
639 if (status == NULL)
640 return SUCCESS;
642 if (type_check (status, 1, BT_INTEGER) == FAILURE)
643 return FAILURE;
645 if (scalar_check (status, 1) == FAILURE)
646 return FAILURE;
648 return SUCCESS;
653 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
655 if (numeric_check (x, 0) == FAILURE)
656 return FAILURE;
658 if (y != NULL)
660 if (numeric_check (y, 1) == FAILURE)
661 return FAILURE;
663 if (x->ts.type == BT_COMPLEX)
665 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
666 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
667 gfc_current_intrinsic, &y->where);
668 return FAILURE;
672 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
673 return FAILURE;
675 return SUCCESS;
680 gfc_check_complex (gfc_expr * x, gfc_expr * y)
682 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
684 gfc_error (
685 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
686 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
687 return FAILURE;
689 if (scalar_check (x, 0) == FAILURE)
690 return FAILURE;
692 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
694 gfc_error (
695 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
696 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
697 return FAILURE;
699 if (scalar_check (y, 1) == FAILURE)
700 return FAILURE;
702 return SUCCESS;
707 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
709 if (logical_array_check (mask, 0) == FAILURE)
710 return FAILURE;
711 if (dim_check (dim, 1, 1) == FAILURE)
712 return FAILURE;
714 return SUCCESS;
719 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
721 if (array_check (array, 0) == FAILURE)
722 return FAILURE;
724 if (array->rank == 1)
726 if (scalar_check (shift, 1) == FAILURE)
727 return FAILURE;
729 else
731 /* TODO: more requirements on shift parameter. */
734 if (dim_check (dim, 2, 1) == FAILURE)
735 return FAILURE;
737 return SUCCESS;
742 gfc_check_ctime (gfc_expr * time)
744 if (scalar_check (time, 0) == FAILURE)
745 return FAILURE;
747 if (type_check (time, 0, BT_INTEGER) == FAILURE)
748 return FAILURE;
750 return SUCCESS;
755 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
757 if (numeric_check (x, 0) == FAILURE)
758 return FAILURE;
760 if (y != NULL)
762 if (numeric_check (y, 1) == FAILURE)
763 return FAILURE;
765 if (x->ts.type == BT_COMPLEX)
767 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
768 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
769 gfc_current_intrinsic, &y->where);
770 return FAILURE;
774 return SUCCESS;
779 gfc_check_dble (gfc_expr * x)
781 if (numeric_check (x, 0) == FAILURE)
782 return FAILURE;
784 return SUCCESS;
789 gfc_check_digits (gfc_expr * x)
791 if (int_or_real_check (x, 0) == FAILURE)
792 return FAILURE;
794 return SUCCESS;
799 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
801 switch (vector_a->ts.type)
803 case BT_LOGICAL:
804 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
805 return FAILURE;
806 break;
808 case BT_INTEGER:
809 case BT_REAL:
810 case BT_COMPLEX:
811 if (numeric_check (vector_b, 1) == FAILURE)
812 return FAILURE;
813 break;
815 default:
816 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
817 "or LOGICAL", gfc_current_intrinsic_arg[0],
818 gfc_current_intrinsic, &vector_a->where);
819 return FAILURE;
822 if (rank_check (vector_a, 0, 1) == FAILURE)
823 return FAILURE;
825 if (rank_check (vector_b, 1, 1) == FAILURE)
826 return FAILURE;
828 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
830 gfc_error ("different shape for arguments '%s' and '%s' "
831 "at %L for intrinsic 'dot_product'",
832 gfc_current_intrinsic_arg[0],
833 gfc_current_intrinsic_arg[1],
834 &vector_a->where);
835 return FAILURE;
838 return SUCCESS;
843 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
844 gfc_expr * dim)
846 if (array_check (array, 0) == FAILURE)
847 return FAILURE;
849 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
850 return FAILURE;
852 if (array->rank == 1)
854 if (scalar_check (shift, 2) == FAILURE)
855 return FAILURE;
857 else
859 /* TODO: more weird restrictions on shift. */
862 if (boundary != NULL)
864 if (same_type_check (array, 0, boundary, 2) == FAILURE)
865 return FAILURE;
867 /* TODO: more restrictions on boundary. */
870 if (dim_check (dim, 1, 1) == FAILURE)
871 return FAILURE;
873 return SUCCESS;
877 /* A single complex argument. */
880 gfc_check_fn_c (gfc_expr * a)
882 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
883 return FAILURE;
885 return SUCCESS;
889 /* A single real argument. */
892 gfc_check_fn_r (gfc_expr * a)
894 if (type_check (a, 0, BT_REAL) == FAILURE)
895 return FAILURE;
897 return SUCCESS;
901 /* A single real or complex argument. */
904 gfc_check_fn_rc (gfc_expr * a)
906 if (real_or_complex_check (a, 0) == FAILURE)
907 return FAILURE;
909 return SUCCESS;
914 gfc_check_fnum (gfc_expr * unit)
916 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
917 return FAILURE;
919 if (scalar_check (unit, 0) == FAILURE)
920 return FAILURE;
922 return SUCCESS;
926 /* This is used for the g77 one-argument Bessel functions, and the
927 error function. */
930 gfc_check_g77_math1 (gfc_expr * x)
932 if (scalar_check (x, 0) == FAILURE)
933 return FAILURE;
935 if (type_check (x, 0, BT_REAL) == FAILURE)
936 return FAILURE;
938 return SUCCESS;
943 gfc_check_huge (gfc_expr * x)
945 if (int_or_real_check (x, 0) == FAILURE)
946 return FAILURE;
948 return SUCCESS;
952 /* Check that the single argument is an integer. */
955 gfc_check_i (gfc_expr * i)
957 if (type_check (i, 0, BT_INTEGER) == FAILURE)
958 return FAILURE;
960 return SUCCESS;
965 gfc_check_iand (gfc_expr * i, gfc_expr * j)
967 if (type_check (i, 0, BT_INTEGER) == FAILURE)
968 return FAILURE;
970 if (type_check (j, 1, BT_INTEGER) == FAILURE)
971 return FAILURE;
973 if (i->ts.kind != j->ts.kind)
975 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
976 &i->where) == FAILURE)
977 return FAILURE;
980 return SUCCESS;
985 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
987 if (type_check (i, 0, BT_INTEGER) == FAILURE)
988 return FAILURE;
990 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
991 return FAILURE;
993 return SUCCESS;
998 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
1000 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1001 return FAILURE;
1003 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1004 return FAILURE;
1006 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1007 return FAILURE;
1009 return SUCCESS;
1014 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
1016 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1017 return FAILURE;
1019 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1020 return FAILURE;
1022 return SUCCESS;
1027 gfc_check_ichar_iachar (gfc_expr * c)
1029 int i;
1031 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1032 return FAILURE;
1034 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1036 gfc_expr *start;
1037 gfc_expr *end;
1038 gfc_ref *ref;
1040 /* Substring references don't have the charlength set. */
1041 ref = c->ref;
1042 while (ref && ref->type != REF_SUBSTRING)
1043 ref = ref->next;
1045 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1047 if (!ref)
1049 /* Check that the argument is length one. Non-constant lengths
1050 can't be checked here, so assume thay are ok. */
1051 if (c->ts.cl && c->ts.cl->length)
1053 /* If we already have a length for this expression then use it. */
1054 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1055 return SUCCESS;
1056 i = mpz_get_si (c->ts.cl->length->value.integer);
1058 else
1059 return SUCCESS;
1061 else
1063 start = ref->u.ss.start;
1064 end = ref->u.ss.end;
1066 gcc_assert (start);
1067 if (end == NULL || end->expr_type != EXPR_CONSTANT
1068 || start->expr_type != EXPR_CONSTANT)
1069 return SUCCESS;
1071 i = mpz_get_si (end->value.integer) + 1
1072 - mpz_get_si (start->value.integer);
1075 else
1076 return SUCCESS;
1078 if (i != 1)
1080 gfc_error ("Argument of %s at %L must be of length one",
1081 gfc_current_intrinsic, &c->where);
1082 return FAILURE;
1085 return SUCCESS;
1090 gfc_check_idnint (gfc_expr * a)
1092 if (double_check (a, 0) == FAILURE)
1093 return FAILURE;
1095 return SUCCESS;
1100 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1102 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1103 return FAILURE;
1105 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1106 return FAILURE;
1108 if (i->ts.kind != j->ts.kind)
1110 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1111 &i->where) == FAILURE)
1112 return FAILURE;
1115 return SUCCESS;
1120 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1122 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1123 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1124 return FAILURE;
1127 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1128 return FAILURE;
1130 if (string->ts.kind != substring->ts.kind)
1132 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1133 "kind as '%s'", gfc_current_intrinsic_arg[1],
1134 gfc_current_intrinsic, &substring->where,
1135 gfc_current_intrinsic_arg[0]);
1136 return FAILURE;
1139 return SUCCESS;
1144 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1146 if (numeric_check (x, 0) == FAILURE)
1147 return FAILURE;
1149 if (kind != NULL)
1151 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1152 return FAILURE;
1154 if (scalar_check (kind, 1) == FAILURE)
1155 return FAILURE;
1158 return SUCCESS;
1163 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1165 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1166 return FAILURE;
1168 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1169 return FAILURE;
1171 if (i->ts.kind != j->ts.kind)
1173 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1174 &i->where) == FAILURE)
1175 return FAILURE;
1178 return SUCCESS;
1183 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1185 if (type_check (i, 0, BT_INTEGER) == FAILURE
1186 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1187 return FAILURE;
1189 return SUCCESS;
1194 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1196 if (type_check (i, 0, BT_INTEGER) == FAILURE
1197 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1198 return FAILURE;
1200 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1201 return FAILURE;
1203 return SUCCESS;
1208 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1210 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1211 return FAILURE;
1213 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1214 return FAILURE;
1216 return SUCCESS;
1221 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1223 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1224 return FAILURE;
1226 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1227 return FAILURE;
1229 if (status == NULL)
1230 return SUCCESS;
1232 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1233 return FAILURE;
1235 if (scalar_check (status, 2) == FAILURE)
1236 return FAILURE;
1238 return SUCCESS;
1243 gfc_check_kind (gfc_expr * x)
1245 if (x->ts.type == BT_DERIVED)
1247 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1248 "non-derived type", gfc_current_intrinsic_arg[0],
1249 gfc_current_intrinsic, &x->where);
1250 return FAILURE;
1253 return SUCCESS;
1258 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1260 if (array_check (array, 0) == FAILURE)
1261 return FAILURE;
1263 if (dim != NULL)
1265 if (dim_check (dim, 1, 1) == FAILURE)
1266 return FAILURE;
1268 if (dim_rank_check (dim, array, 1) == FAILURE)
1269 return FAILURE;
1271 return SUCCESS;
1276 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1278 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1279 return FAILURE;
1281 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1282 return FAILURE;
1284 return SUCCESS;
1289 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1291 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1292 return FAILURE;
1294 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1295 return FAILURE;
1297 if (status == NULL)
1298 return SUCCESS;
1300 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1301 return FAILURE;
1303 if (scalar_check (status, 2) == FAILURE)
1304 return FAILURE;
1306 return SUCCESS;
1310 gfc_check_loc (gfc_expr *expr)
1312 return variable_check (expr, 0);
1317 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1319 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1320 return FAILURE;
1322 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1323 return FAILURE;
1325 return SUCCESS;
1330 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1332 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1333 return FAILURE;
1335 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1336 return FAILURE;
1338 if (status == NULL)
1339 return SUCCESS;
1341 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1342 return FAILURE;
1344 if (scalar_check (status, 2) == FAILURE)
1345 return FAILURE;
1347 return SUCCESS;
1352 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1354 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1355 return FAILURE;
1356 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1357 return FAILURE;
1359 return SUCCESS;
1363 /* Min/max family. */
1365 static try
1366 min_max_args (gfc_actual_arglist * arg)
1368 if (arg == NULL || arg->next == NULL)
1370 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1371 gfc_current_intrinsic, gfc_current_intrinsic_where);
1372 return FAILURE;
1375 return SUCCESS;
1379 static try
1380 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1382 gfc_expr *x;
1383 int n;
1385 if (min_max_args (arg) == FAILURE)
1386 return FAILURE;
1388 n = 1;
1390 for (; arg; arg = arg->next, n++)
1392 x = arg->expr;
1393 if (x->ts.type != type || x->ts.kind != kind)
1395 if (x->ts.type == type)
1397 if (gfc_notify_std (GFC_STD_GNU,
1398 "Extension: Different type kinds at %L", &x->where)
1399 == FAILURE)
1400 return FAILURE;
1402 else
1404 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1405 n, gfc_current_intrinsic, &x->where,
1406 gfc_basic_typename (type), kind);
1407 return FAILURE;
1412 return SUCCESS;
1417 gfc_check_min_max (gfc_actual_arglist * arg)
1419 gfc_expr *x;
1421 if (min_max_args (arg) == FAILURE)
1422 return FAILURE;
1424 x = arg->expr;
1426 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1428 gfc_error
1429 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1430 gfc_current_intrinsic, &x->where);
1431 return FAILURE;
1434 return check_rest (x->ts.type, x->ts.kind, arg);
1439 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1441 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1446 gfc_check_min_max_real (gfc_actual_arglist * arg)
1448 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1453 gfc_check_min_max_double (gfc_actual_arglist * arg)
1455 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1458 /* End of min/max family. */
1461 gfc_check_malloc (gfc_expr * size)
1463 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1464 return FAILURE;
1466 if (scalar_check (size, 0) == FAILURE)
1467 return FAILURE;
1469 return SUCCESS;
1474 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1476 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1478 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1479 "or LOGICAL", gfc_current_intrinsic_arg[0],
1480 gfc_current_intrinsic, &matrix_a->where);
1481 return FAILURE;
1484 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1486 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1487 "or LOGICAL", gfc_current_intrinsic_arg[1],
1488 gfc_current_intrinsic, &matrix_b->where);
1489 return FAILURE;
1492 switch (matrix_a->rank)
1494 case 1:
1495 if (rank_check (matrix_b, 1, 2) == FAILURE)
1496 return FAILURE;
1497 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1498 if (! identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1500 gfc_error ("different shape on dimension 1 for arguments '%s' "
1501 "and '%s' at %L for intrinsic matmul",
1502 gfc_current_intrinsic_arg[0],
1503 gfc_current_intrinsic_arg[1],
1504 &matrix_a->where);
1505 return FAILURE;
1507 break;
1509 case 2:
1510 if (matrix_b->rank != 2)
1512 if (rank_check (matrix_b, 1, 1) == FAILURE)
1513 return FAILURE;
1515 /* matrix_b has rank 1 or 2 here. Common check for the cases
1516 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1517 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1518 if (! identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1520 gfc_error ("different shape on dimension 2 for argument '%s' and "
1521 "dimension 1 for argument '%s' at %L for intrinsic "
1522 "matmul", gfc_current_intrinsic_arg[0],
1523 gfc_current_intrinsic_arg[1], &matrix_a->where);
1524 return FAILURE;
1526 break;
1528 default:
1529 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1530 "1 or 2", gfc_current_intrinsic_arg[0],
1531 gfc_current_intrinsic, &matrix_a->where);
1532 return FAILURE;
1535 return SUCCESS;
1539 /* Whoever came up with this interface was probably on something.
1540 The possibilities for the occupation of the second and third
1541 parameters are:
1543 Arg #2 Arg #3
1544 NULL NULL
1545 DIM NULL
1546 MASK NULL
1547 NULL MASK minloc(array, mask=m)
1548 DIM MASK
1550 I.e. in the case of minloc(array,mask), mask will be in the second
1551 position of the argument list and we'll have to fix that up. */
1554 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1556 gfc_expr *a, *m, *d;
1558 a = ap->expr;
1559 if (int_or_real_check (a, 0) == FAILURE
1560 || array_check (a, 0) == FAILURE)
1561 return FAILURE;
1563 d = ap->next->expr;
1564 m = ap->next->next->expr;
1566 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1567 && ap->next->name == NULL)
1569 m = d;
1570 d = NULL;
1572 ap->next->expr = NULL;
1573 ap->next->next->expr = m;
1576 if (dim_check (d, 1, 1) == FAILURE)
1577 return FAILURE;
1579 if (d && dim_rank_check (d, a, 0) == FAILURE)
1580 return FAILURE;
1582 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1583 return FAILURE;
1585 if (m != NULL)
1587 char buffer[80];
1588 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1589 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1590 gfc_current_intrinsic);
1591 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1592 return FAILURE;
1595 return SUCCESS;
1599 /* Similar to minloc/maxloc, the argument list might need to be
1600 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1601 difference is that MINLOC/MAXLOC take an additional KIND argument.
1602 The possibilities are:
1604 Arg #2 Arg #3
1605 NULL NULL
1606 DIM NULL
1607 MASK NULL
1608 NULL MASK minval(array, mask=m)
1609 DIM MASK
1611 I.e. in the case of minval(array,mask), mask will be in the second
1612 position of the argument list and we'll have to fix that up. */
1614 static try
1615 check_reduction (gfc_actual_arglist * ap)
1617 gfc_expr *a, *m, *d;
1619 a = ap->expr;
1620 d = ap->next->expr;
1621 m = ap->next->next->expr;
1623 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1624 && ap->next->name == NULL)
1626 m = d;
1627 d = NULL;
1629 ap->next->expr = NULL;
1630 ap->next->next->expr = m;
1633 if (dim_check (d, 1, 1) == FAILURE)
1634 return FAILURE;
1636 if (d && dim_rank_check (d, a, 0) == FAILURE)
1637 return FAILURE;
1639 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1640 return FAILURE;
1642 if (m != NULL)
1644 char buffer[80];
1645 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1646 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1647 gfc_current_intrinsic);
1648 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1649 return FAILURE;
1652 return SUCCESS;
1657 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1659 if (int_or_real_check (ap->expr, 0) == FAILURE
1660 || array_check (ap->expr, 0) == FAILURE)
1661 return FAILURE;
1663 return check_reduction (ap);
1668 gfc_check_product_sum (gfc_actual_arglist * ap)
1670 if (numeric_check (ap->expr, 0) == FAILURE
1671 || array_check (ap->expr, 0) == FAILURE)
1672 return FAILURE;
1674 return check_reduction (ap);
1679 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1681 char buffer[80];
1683 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1684 return FAILURE;
1686 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1687 return FAILURE;
1689 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1690 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1691 gfc_current_intrinsic);
1692 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1693 return FAILURE;
1695 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1696 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1697 gfc_current_intrinsic);
1698 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1699 return FAILURE;
1701 return SUCCESS;
1706 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1708 if (type_check (x, 0, BT_REAL) == FAILURE)
1709 return FAILURE;
1711 if (type_check (s, 1, BT_REAL) == FAILURE)
1712 return FAILURE;
1714 return SUCCESS;
1719 gfc_check_null (gfc_expr * mold)
1721 symbol_attribute attr;
1723 if (mold == NULL)
1724 return SUCCESS;
1726 if (variable_check (mold, 0) == FAILURE)
1727 return FAILURE;
1729 attr = gfc_variable_attr (mold, NULL);
1731 if (!attr.pointer)
1733 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1734 gfc_current_intrinsic_arg[0],
1735 gfc_current_intrinsic, &mold->where);
1736 return FAILURE;
1739 return SUCCESS;
1744 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1746 char buffer[80];
1748 if (array_check (array, 0) == FAILURE)
1749 return FAILURE;
1751 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1752 return FAILURE;
1754 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1755 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1756 gfc_current_intrinsic);
1757 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1758 return FAILURE;
1760 if (vector != NULL)
1762 if (same_type_check (array, 0, vector, 2) == FAILURE)
1763 return FAILURE;
1765 if (rank_check (vector, 2, 1) == FAILURE)
1766 return FAILURE;
1768 /* TODO: More constraints here. */
1771 return SUCCESS;
1776 gfc_check_precision (gfc_expr * x)
1778 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1780 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1781 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1782 gfc_current_intrinsic, &x->where);
1783 return FAILURE;
1786 return SUCCESS;
1791 gfc_check_present (gfc_expr * a)
1793 gfc_symbol *sym;
1795 if (variable_check (a, 0) == FAILURE)
1796 return FAILURE;
1798 sym = a->symtree->n.sym;
1799 if (!sym->attr.dummy)
1801 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1802 "dummy variable", gfc_current_intrinsic_arg[0],
1803 gfc_current_intrinsic, &a->where);
1804 return FAILURE;
1807 if (!sym->attr.optional)
1809 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1810 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1811 gfc_current_intrinsic, &a->where);
1812 return FAILURE;
1815 return SUCCESS;
1820 gfc_check_radix (gfc_expr * x)
1822 if (int_or_real_check (x, 0) == FAILURE)
1823 return FAILURE;
1825 return SUCCESS;
1830 gfc_check_range (gfc_expr * x)
1832 if (numeric_check (x, 0) == FAILURE)
1833 return FAILURE;
1835 return SUCCESS;
1839 /* real, float, sngl. */
1841 gfc_check_real (gfc_expr * a, gfc_expr * kind)
1843 if (numeric_check (a, 0) == FAILURE)
1844 return FAILURE;
1846 if (kind_check (kind, 1, BT_REAL) == FAILURE)
1847 return FAILURE;
1849 return SUCCESS;
1854 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
1856 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1857 return FAILURE;
1859 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1860 return FAILURE;
1862 return SUCCESS;
1867 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1869 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1870 return FAILURE;
1872 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1873 return FAILURE;
1875 if (status == NULL)
1876 return SUCCESS;
1878 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1879 return FAILURE;
1881 if (scalar_check (status, 2) == FAILURE)
1882 return FAILURE;
1884 return SUCCESS;
1889 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
1891 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1892 return FAILURE;
1894 if (scalar_check (x, 0) == FAILURE)
1895 return FAILURE;
1897 if (type_check (y, 0, BT_INTEGER) == FAILURE)
1898 return FAILURE;
1900 if (scalar_check (y, 1) == FAILURE)
1901 return FAILURE;
1903 return SUCCESS;
1908 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
1909 gfc_expr * pad, gfc_expr * order)
1911 mpz_t size;
1912 int m;
1914 if (array_check (source, 0) == FAILURE)
1915 return FAILURE;
1917 if (rank_check (shape, 1, 1) == FAILURE)
1918 return FAILURE;
1920 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
1921 return FAILURE;
1923 if (gfc_array_size (shape, &size) != SUCCESS)
1925 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
1926 "array of constant size", &shape->where);
1927 return FAILURE;
1930 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
1931 mpz_clear (size);
1933 if (m > 0)
1935 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
1936 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
1937 return FAILURE;
1940 if (pad != NULL)
1942 if (same_type_check (source, 0, pad, 2) == FAILURE)
1943 return FAILURE;
1944 if (array_check (pad, 2) == FAILURE)
1945 return FAILURE;
1948 if (order != NULL && array_check (order, 3) == FAILURE)
1949 return FAILURE;
1951 return SUCCESS;
1956 gfc_check_scale (gfc_expr * x, gfc_expr * i)
1958 if (type_check (x, 0, BT_REAL) == FAILURE)
1959 return FAILURE;
1961 if (type_check (i, 1, BT_INTEGER) == FAILURE)
1962 return FAILURE;
1964 return SUCCESS;
1969 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
1971 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
1972 return FAILURE;
1974 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
1975 return FAILURE;
1977 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
1978 return FAILURE;
1980 if (same_type_check (x, 0, y, 1) == FAILURE)
1981 return FAILURE;
1983 return SUCCESS;
1988 gfc_check_secnds (gfc_expr * r)
1991 if (type_check (r, 0, BT_REAL) == FAILURE)
1992 return FAILURE;
1994 if (kind_value_check (r, 0, 4) == FAILURE)
1995 return FAILURE;
1997 if (scalar_check (r, 0) == FAILURE)
1998 return FAILURE;
2000 return SUCCESS;
2005 gfc_check_selected_int_kind (gfc_expr * r)
2008 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2009 return FAILURE;
2011 if (scalar_check (r, 0) == FAILURE)
2012 return FAILURE;
2014 return SUCCESS;
2019 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
2021 if (p == NULL && r == NULL)
2023 gfc_error ("Missing arguments to %s intrinsic at %L",
2024 gfc_current_intrinsic, gfc_current_intrinsic_where);
2026 return FAILURE;
2029 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2030 return FAILURE;
2032 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2033 return FAILURE;
2035 return SUCCESS;
2040 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
2042 if (type_check (x, 0, BT_REAL) == FAILURE)
2043 return FAILURE;
2045 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2046 return FAILURE;
2048 return SUCCESS;
2053 gfc_check_shape (gfc_expr * source)
2055 gfc_array_ref *ar;
2057 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2058 return SUCCESS;
2060 ar = gfc_find_array_ref (source);
2062 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2064 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2065 "an assumed size array", &source->where);
2066 return FAILURE;
2069 return SUCCESS;
2074 gfc_check_sign (gfc_expr * a, gfc_expr * b)
2076 if (int_or_real_check (a, 0) == FAILURE)
2077 return FAILURE;
2079 if (same_type_check (a, 0, b, 1) == FAILURE)
2080 return FAILURE;
2082 return SUCCESS;
2087 gfc_check_size (gfc_expr * array, gfc_expr * dim)
2089 if (array_check (array, 0) == FAILURE)
2090 return FAILURE;
2092 if (dim != NULL)
2094 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2095 return FAILURE;
2097 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2098 return FAILURE;
2100 if (dim_rank_check (dim, array, 0) == FAILURE)
2101 return FAILURE;
2104 return SUCCESS;
2109 gfc_check_sleep_sub (gfc_expr * seconds)
2111 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2112 return FAILURE;
2114 if (scalar_check (seconds, 0) == FAILURE)
2115 return FAILURE;
2117 return SUCCESS;
2122 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2124 if (source->rank >= GFC_MAX_DIMENSIONS)
2126 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2127 "than rank %d", gfc_current_intrinsic_arg[0],
2128 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2130 return FAILURE;
2133 if (dim_check (dim, 1, 0) == FAILURE)
2134 return FAILURE;
2136 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2137 return FAILURE;
2139 if (scalar_check (ncopies, 2) == FAILURE)
2140 return FAILURE;
2142 return SUCCESS;
2146 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2147 functions). */
2149 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2151 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2152 return FAILURE;
2154 if (scalar_check (unit, 0) == FAILURE)
2155 return FAILURE;
2157 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2158 return FAILURE;
2160 if (status == NULL)
2161 return SUCCESS;
2163 if (type_check (status, 2, BT_INTEGER) == FAILURE
2164 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2165 || scalar_check (status, 2) == FAILURE)
2166 return FAILURE;
2168 return SUCCESS;
2173 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2175 return gfc_check_fgetputc_sub (unit, c, NULL);
2180 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2182 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2183 return FAILURE;
2185 if (status == NULL)
2186 return SUCCESS;
2188 if (type_check (status, 1, BT_INTEGER) == FAILURE
2189 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2190 || scalar_check (status, 1) == FAILURE)
2191 return FAILURE;
2193 return SUCCESS;
2198 gfc_check_fgetput (gfc_expr * c)
2200 return gfc_check_fgetput_sub (c, NULL);
2205 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2207 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2208 return FAILURE;
2210 if (scalar_check (unit, 0) == FAILURE)
2211 return FAILURE;
2213 if (type_check (array, 1, BT_INTEGER) == FAILURE
2214 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2215 return FAILURE;
2217 if (array_check (array, 1) == FAILURE)
2218 return FAILURE;
2220 return SUCCESS;
2225 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2227 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2228 return FAILURE;
2230 if (scalar_check (unit, 0) == FAILURE)
2231 return FAILURE;
2233 if (type_check (array, 1, BT_INTEGER) == FAILURE
2234 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2235 return FAILURE;
2237 if (array_check (array, 1) == FAILURE)
2238 return FAILURE;
2240 if (status == NULL)
2241 return SUCCESS;
2243 if (type_check (status, 2, BT_INTEGER) == FAILURE
2244 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2245 return FAILURE;
2247 if (scalar_check (status, 2) == FAILURE)
2248 return FAILURE;
2250 return SUCCESS;
2255 gfc_check_ftell (gfc_expr * unit)
2257 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2258 return FAILURE;
2260 if (scalar_check (unit, 0) == FAILURE)
2261 return FAILURE;
2263 return SUCCESS;
2268 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2270 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2271 return FAILURE;
2273 if (scalar_check (unit, 0) == FAILURE)
2274 return FAILURE;
2276 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2277 return FAILURE;
2279 if (scalar_check (offset, 1) == FAILURE)
2280 return FAILURE;
2282 return SUCCESS;
2287 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2289 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2290 return FAILURE;
2292 if (type_check (array, 1, BT_INTEGER) == FAILURE
2293 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2294 return FAILURE;
2296 if (array_check (array, 1) == FAILURE)
2297 return FAILURE;
2299 return SUCCESS;
2304 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2306 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2307 return FAILURE;
2309 if (type_check (array, 1, BT_INTEGER) == FAILURE
2310 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2311 return FAILURE;
2313 if (array_check (array, 1) == FAILURE)
2314 return FAILURE;
2316 if (status == NULL)
2317 return SUCCESS;
2319 if (type_check (status, 2, BT_INTEGER) == FAILURE
2320 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2321 return FAILURE;
2323 if (scalar_check (status, 2) == FAILURE)
2324 return FAILURE;
2326 return SUCCESS;
2331 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2332 gfc_expr * mold ATTRIBUTE_UNUSED,
2333 gfc_expr * size)
2335 if (size != NULL)
2337 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2338 return FAILURE;
2340 if (scalar_check (size, 2) == FAILURE)
2341 return FAILURE;
2343 if (nonoptional_check (size, 2) == FAILURE)
2344 return FAILURE;
2347 return SUCCESS;
2352 gfc_check_transpose (gfc_expr * matrix)
2354 if (rank_check (matrix, 0, 2) == FAILURE)
2355 return FAILURE;
2357 return SUCCESS;
2362 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2364 if (array_check (array, 0) == FAILURE)
2365 return FAILURE;
2367 if (dim != NULL)
2369 if (dim_check (dim, 1, 1) == FAILURE)
2370 return FAILURE;
2372 if (dim_rank_check (dim, array, 0) == FAILURE)
2373 return FAILURE;
2376 return SUCCESS;
2381 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2383 if (rank_check (vector, 0, 1) == FAILURE)
2384 return FAILURE;
2386 if (array_check (mask, 1) == FAILURE)
2387 return FAILURE;
2389 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2390 return FAILURE;
2392 if (same_type_check (vector, 0, field, 2) == FAILURE)
2393 return FAILURE;
2395 return SUCCESS;
2400 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2402 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2403 return FAILURE;
2405 if (same_type_check (x, 0, y, 1) == FAILURE)
2406 return FAILURE;
2408 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2409 return FAILURE;
2411 return SUCCESS;
2416 gfc_check_trim (gfc_expr * x)
2418 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2419 return FAILURE;
2421 if (scalar_check (x, 0) == FAILURE)
2422 return FAILURE;
2424 return SUCCESS;
2429 gfc_check_ttynam (gfc_expr * unit)
2431 if (scalar_check (unit, 0) == FAILURE)
2432 return FAILURE;
2434 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2435 return FAILURE;
2437 return SUCCESS;
2441 /* Common check function for the half a dozen intrinsics that have a
2442 single real argument. */
2445 gfc_check_x (gfc_expr * x)
2447 if (type_check (x, 0, BT_REAL) == FAILURE)
2448 return FAILURE;
2450 return SUCCESS;
2454 /************* Check functions for intrinsic subroutines *************/
2457 gfc_check_cpu_time (gfc_expr * time)
2459 if (scalar_check (time, 0) == FAILURE)
2460 return FAILURE;
2462 if (type_check (time, 0, BT_REAL) == FAILURE)
2463 return FAILURE;
2465 if (variable_check (time, 0) == FAILURE)
2466 return FAILURE;
2468 return SUCCESS;
2473 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2474 gfc_expr * zone, gfc_expr * values)
2476 if (date != NULL)
2478 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2479 return FAILURE;
2480 if (scalar_check (date, 0) == FAILURE)
2481 return FAILURE;
2482 if (variable_check (date, 0) == FAILURE)
2483 return FAILURE;
2486 if (time != NULL)
2488 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2489 return FAILURE;
2490 if (scalar_check (time, 1) == FAILURE)
2491 return FAILURE;
2492 if (variable_check (time, 1) == FAILURE)
2493 return FAILURE;
2496 if (zone != NULL)
2498 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2499 return FAILURE;
2500 if (scalar_check (zone, 2) == FAILURE)
2501 return FAILURE;
2502 if (variable_check (zone, 2) == FAILURE)
2503 return FAILURE;
2506 if (values != NULL)
2508 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2509 return FAILURE;
2510 if (array_check (values, 3) == FAILURE)
2511 return FAILURE;
2512 if (rank_check (values, 3, 1) == FAILURE)
2513 return FAILURE;
2514 if (variable_check (values, 3) == FAILURE)
2515 return FAILURE;
2518 return SUCCESS;
2523 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2524 gfc_expr * to, gfc_expr * topos)
2526 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2527 return FAILURE;
2529 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2530 return FAILURE;
2532 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2533 return FAILURE;
2535 if (same_type_check (from, 0, to, 3) == FAILURE)
2536 return FAILURE;
2538 if (variable_check (to, 3) == FAILURE)
2539 return FAILURE;
2541 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2542 return FAILURE;
2544 return SUCCESS;
2549 gfc_check_random_number (gfc_expr * harvest)
2551 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2552 return FAILURE;
2554 if (variable_check (harvest, 0) == FAILURE)
2555 return FAILURE;
2557 return SUCCESS;
2562 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2564 if (size != NULL)
2566 if (scalar_check (size, 0) == FAILURE)
2567 return FAILURE;
2569 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2570 return FAILURE;
2572 if (variable_check (size, 0) == FAILURE)
2573 return FAILURE;
2575 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2576 return FAILURE;
2579 if (put != NULL)
2582 if (size != NULL)
2583 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2584 &put->where);
2586 if (array_check (put, 1) == FAILURE)
2587 return FAILURE;
2589 if (rank_check (put, 1, 1) == FAILURE)
2590 return FAILURE;
2592 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2593 return FAILURE;
2595 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2596 return FAILURE;
2599 if (get != NULL)
2602 if (size != NULL || put != NULL)
2603 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2604 &get->where);
2606 if (array_check (get, 2) == FAILURE)
2607 return FAILURE;
2609 if (rank_check (get, 2, 1) == FAILURE)
2610 return FAILURE;
2612 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2613 return FAILURE;
2615 if (variable_check (get, 2) == FAILURE)
2616 return FAILURE;
2618 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2619 return FAILURE;
2622 return SUCCESS;
2626 gfc_check_second_sub (gfc_expr * time)
2628 if (scalar_check (time, 0) == FAILURE)
2629 return FAILURE;
2631 if (type_check (time, 0, BT_REAL) == FAILURE)
2632 return FAILURE;
2634 if (kind_value_check(time, 0, 4) == FAILURE)
2635 return FAILURE;
2637 return SUCCESS;
2641 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2642 count, count_rate, and count_max are all optional arguments */
2645 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2646 gfc_expr * count_max)
2648 if (count != NULL)
2650 if (scalar_check (count, 0) == FAILURE)
2651 return FAILURE;
2653 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2654 return FAILURE;
2656 if (variable_check (count, 0) == FAILURE)
2657 return FAILURE;
2660 if (count_rate != NULL)
2662 if (scalar_check (count_rate, 1) == FAILURE)
2663 return FAILURE;
2665 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2666 return FAILURE;
2668 if (variable_check (count_rate, 1) == FAILURE)
2669 return FAILURE;
2671 if (count != NULL
2672 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2673 return FAILURE;
2677 if (count_max != NULL)
2679 if (scalar_check (count_max, 2) == FAILURE)
2680 return FAILURE;
2682 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2683 return FAILURE;
2685 if (variable_check (count_max, 2) == FAILURE)
2686 return FAILURE;
2688 if (count != NULL
2689 && same_type_check (count, 0, count_max, 2) == FAILURE)
2690 return FAILURE;
2692 if (count_rate != NULL
2693 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2694 return FAILURE;
2697 return SUCCESS;
2701 gfc_check_irand (gfc_expr * x)
2703 if (x == NULL)
2704 return SUCCESS;
2706 if (scalar_check (x, 0) == FAILURE)
2707 return FAILURE;
2709 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2710 return FAILURE;
2712 if (kind_value_check(x, 0, 4) == FAILURE)
2713 return FAILURE;
2715 return SUCCESS;
2720 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2722 if (scalar_check (seconds, 0) == FAILURE)
2723 return FAILURE;
2725 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2726 return FAILURE;
2728 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2730 gfc_error (
2731 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2732 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2733 return FAILURE;
2736 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2737 return FAILURE;
2739 if (status == NULL)
2740 return SUCCESS;
2742 if (scalar_check (status, 2) == FAILURE)
2743 return FAILURE;
2745 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2746 return FAILURE;
2748 return SUCCESS;
2753 gfc_check_rand (gfc_expr * x)
2755 if (x == NULL)
2756 return SUCCESS;
2758 if (scalar_check (x, 0) == FAILURE)
2759 return FAILURE;
2761 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2762 return FAILURE;
2764 if (kind_value_check(x, 0, 4) == FAILURE)
2765 return FAILURE;
2767 return SUCCESS;
2771 gfc_check_srand (gfc_expr * x)
2773 if (scalar_check (x, 0) == FAILURE)
2774 return FAILURE;
2776 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2777 return FAILURE;
2779 if (kind_value_check(x, 0, 4) == FAILURE)
2780 return FAILURE;
2782 return SUCCESS;
2786 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
2788 if (scalar_check (time, 0) == FAILURE)
2789 return FAILURE;
2791 if (type_check (time, 0, BT_INTEGER) == FAILURE)
2792 return FAILURE;
2794 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
2795 return FAILURE;
2797 return SUCCESS;
2801 gfc_check_etime (gfc_expr * x)
2803 if (array_check (x, 0) == FAILURE)
2804 return FAILURE;
2806 if (rank_check (x, 0, 1) == FAILURE)
2807 return FAILURE;
2809 if (variable_check (x, 0) == FAILURE)
2810 return FAILURE;
2812 if (type_check (x, 0, BT_REAL) == FAILURE)
2813 return FAILURE;
2815 if (kind_value_check(x, 0, 4) == FAILURE)
2816 return FAILURE;
2818 return SUCCESS;
2822 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
2824 if (array_check (values, 0) == FAILURE)
2825 return FAILURE;
2827 if (rank_check (values, 0, 1) == FAILURE)
2828 return FAILURE;
2830 if (variable_check (values, 0) == FAILURE)
2831 return FAILURE;
2833 if (type_check (values, 0, BT_REAL) == FAILURE)
2834 return FAILURE;
2836 if (kind_value_check(values, 0, 4) == FAILURE)
2837 return FAILURE;
2839 if (scalar_check (time, 1) == FAILURE)
2840 return FAILURE;
2842 if (type_check (time, 1, BT_REAL) == FAILURE)
2843 return FAILURE;
2845 if (kind_value_check(time, 1, 4) == FAILURE)
2846 return FAILURE;
2848 return SUCCESS;
2853 gfc_check_fdate_sub (gfc_expr * date)
2855 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2856 return FAILURE;
2858 return SUCCESS;
2863 gfc_check_gerror (gfc_expr * msg)
2865 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2866 return FAILURE;
2868 return SUCCESS;
2873 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
2875 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
2876 return FAILURE;
2878 if (status == NULL)
2879 return SUCCESS;
2881 if (scalar_check (status, 1) == FAILURE)
2882 return FAILURE;
2884 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2885 return FAILURE;
2887 return SUCCESS;
2892 gfc_check_getlog (gfc_expr * msg)
2894 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
2895 return FAILURE;
2897 return SUCCESS;
2902 gfc_check_exit (gfc_expr * status)
2904 if (status == NULL)
2905 return SUCCESS;
2907 if (type_check (status, 0, BT_INTEGER) == FAILURE)
2908 return FAILURE;
2910 if (scalar_check (status, 0) == FAILURE)
2911 return FAILURE;
2913 return SUCCESS;
2918 gfc_check_flush (gfc_expr * unit)
2920 if (unit == NULL)
2921 return SUCCESS;
2923 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2924 return FAILURE;
2926 if (scalar_check (unit, 0) == FAILURE)
2927 return FAILURE;
2929 return SUCCESS;
2934 gfc_check_free (gfc_expr * i)
2936 if (type_check (i, 0, BT_INTEGER) == FAILURE)
2937 return FAILURE;
2939 if (scalar_check (i, 0) == FAILURE)
2940 return FAILURE;
2942 return SUCCESS;
2947 gfc_check_hostnm (gfc_expr * name)
2949 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2950 return FAILURE;
2952 return SUCCESS;
2957 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
2959 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2960 return FAILURE;
2962 if (status == NULL)
2963 return SUCCESS;
2965 if (scalar_check (status, 1) == FAILURE)
2966 return FAILURE;
2968 if (type_check (status, 1, BT_INTEGER) == FAILURE)
2969 return FAILURE;
2971 return SUCCESS;
2976 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
2978 if (scalar_check (unit, 0) == FAILURE)
2979 return FAILURE;
2981 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2982 return FAILURE;
2984 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
2985 return FAILURE;
2987 return SUCCESS;
2992 gfc_check_isatty (gfc_expr * unit)
2994 if (unit == NULL)
2995 return FAILURE;
2997 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2998 return FAILURE;
3000 if (scalar_check (unit, 0) == FAILURE)
3001 return FAILURE;
3003 return SUCCESS;
3008 gfc_check_perror (gfc_expr * string)
3010 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3011 return FAILURE;
3013 return SUCCESS;
3018 gfc_check_umask (gfc_expr * mask)
3020 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3021 return FAILURE;
3023 if (scalar_check (mask, 0) == FAILURE)
3024 return FAILURE;
3026 return SUCCESS;
3031 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
3033 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3034 return FAILURE;
3036 if (scalar_check (mask, 0) == FAILURE)
3037 return FAILURE;
3039 if (old == NULL)
3040 return SUCCESS;
3042 if (scalar_check (old, 1) == FAILURE)
3043 return FAILURE;
3045 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3046 return FAILURE;
3048 return SUCCESS;
3053 gfc_check_unlink (gfc_expr * name)
3055 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3056 return FAILURE;
3058 return SUCCESS;
3063 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
3065 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3066 return FAILURE;
3068 if (status == NULL)
3069 return SUCCESS;
3071 if (scalar_check (status, 1) == FAILURE)
3072 return FAILURE;
3074 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3075 return FAILURE;
3077 return SUCCESS;
3082 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
3084 if (scalar_check (number, 0) == FAILURE)
3085 return FAILURE;
3087 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3088 return FAILURE;
3090 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3092 gfc_error (
3093 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3094 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3095 return FAILURE;
3098 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3099 return FAILURE;
3101 return SUCCESS;
3106 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3108 if (scalar_check (number, 0) == FAILURE)
3109 return FAILURE;
3111 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3112 return FAILURE;
3114 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3116 gfc_error (
3117 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3118 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3119 return FAILURE;
3122 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3123 return FAILURE;
3125 if (status == NULL)
3126 return SUCCESS;
3128 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3129 return FAILURE;
3131 if (scalar_check (status, 2) == FAILURE)
3132 return FAILURE;
3134 return SUCCESS;
3139 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3141 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3142 return FAILURE;
3144 if (scalar_check (status, 1) == FAILURE)
3145 return FAILURE;
3147 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3148 return FAILURE;
3150 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3151 return FAILURE;
3153 return SUCCESS;
3157 /* This is used for the GNU intrinsics AND, OR and XOR. */
3159 gfc_check_and (gfc_expr * i, gfc_expr * j)
3161 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3163 gfc_error (
3164 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3165 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3166 return FAILURE;
3169 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3171 gfc_error (
3172 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3173 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3174 return FAILURE;
3177 if (i->ts.type != j->ts.type)
3179 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3180 "have the same type", gfc_current_intrinsic_arg[0],
3181 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3182 &j->where);
3183 return FAILURE;
3186 if (scalar_check (i, 0) == FAILURE)
3187 return FAILURE;
3189 if (scalar_check (j, 1) == FAILURE)
3190 return FAILURE;
3192 return SUCCESS;