intrinsic.texi: Minor cleanup, reflowing overlong paragraphs, and correcting whitespace.
[official-gcc.git] / gcc / fortran / check.c
blob0c5fc130b5ae0dd7ecb0d1db53169f07a86de551
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 expressions 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 /* Error return for transformational intrinsics not allowed in
382 initialization expressions. */
384 static try
385 non_init_transformational (void)
387 gfc_error ("transformational intrinsic '%s' at %L is not permitted "
388 "in an initialization expression", gfc_current_intrinsic,
389 gfc_current_intrinsic_where);
390 return FAILURE;
393 /***** Check functions *****/
395 /* Check subroutine suitable for intrinsics taking a real argument and
396 a kind argument for the result. */
398 static try
399 check_a_kind (gfc_expr * a, gfc_expr * kind, bt type)
401 if (type_check (a, 0, BT_REAL) == FAILURE)
402 return FAILURE;
403 if (kind_check (kind, 1, type) == FAILURE)
404 return FAILURE;
406 return SUCCESS;
409 /* Check subroutine suitable for ceiling, floor and nint. */
412 gfc_check_a_ikind (gfc_expr * a, gfc_expr * kind)
414 return check_a_kind (a, kind, BT_INTEGER);
417 /* Check subroutine suitable for aint, anint. */
420 gfc_check_a_xkind (gfc_expr * a, gfc_expr * kind)
422 return check_a_kind (a, kind, BT_REAL);
426 gfc_check_abs (gfc_expr * a)
428 if (numeric_check (a, 0) == FAILURE)
429 return FAILURE;
431 return SUCCESS;
435 gfc_check_achar (gfc_expr * a)
438 if (type_check (a, 0, BT_INTEGER) == FAILURE)
439 return FAILURE;
441 return SUCCESS;
446 gfc_check_access_func (gfc_expr * name, gfc_expr * mode)
448 if (type_check (name, 0, BT_CHARACTER) == FAILURE
449 || scalar_check (name, 0) == FAILURE)
450 return FAILURE;
453 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
454 || scalar_check (mode, 1) == FAILURE)
455 return FAILURE;
457 return SUCCESS;
462 gfc_check_all_any (gfc_expr * mask, gfc_expr * dim)
464 if (logical_array_check (mask, 0) == FAILURE)
465 return FAILURE;
467 if (dim_check (dim, 1, 1) == FAILURE)
468 return FAILURE;
470 if (gfc_init_expr)
471 return non_init_transformational ();
473 return SUCCESS;
478 gfc_check_allocated (gfc_expr * array)
480 symbol_attribute attr;
482 if (variable_check (array, 0) == FAILURE)
483 return FAILURE;
485 if (array_check (array, 0) == FAILURE)
486 return FAILURE;
488 attr = gfc_variable_attr (array, NULL);
489 if (!attr.allocatable)
491 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
492 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
493 &array->where);
494 return FAILURE;
497 return SUCCESS;
501 /* Common check function where the first argument must be real or
502 integer and the second argument must be the same as the first. */
505 gfc_check_a_p (gfc_expr * a, gfc_expr * p)
507 if (int_or_real_check (a, 0) == FAILURE)
508 return FAILURE;
510 if (a->ts.type != p->ts.type)
512 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
513 "have the same type", gfc_current_intrinsic_arg[0],
514 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
515 &p->where);
516 return FAILURE;
519 if (a->ts.kind != p->ts.kind)
521 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
522 &p->where) == FAILURE)
523 return FAILURE;
526 return SUCCESS;
531 gfc_check_associated (gfc_expr * pointer, gfc_expr * target)
533 symbol_attribute attr;
534 int i;
535 try t;
536 locus *where;
538 where = &pointer->where;
540 if (pointer->expr_type == EXPR_VARIABLE)
541 attr = gfc_variable_attr (pointer, NULL);
542 else if (pointer->expr_type == EXPR_FUNCTION)
543 attr = pointer->symtree->n.sym->attr;
544 else if (pointer->expr_type == EXPR_NULL)
545 goto null_arg;
546 else
547 gcc_assert (0); /* Pointer must be a variable or a function. */
549 if (!attr.pointer)
551 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
552 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
553 &pointer->where);
554 return FAILURE;
557 /* Target argument is optional. */
558 if (target == NULL)
559 return SUCCESS;
561 where = &target->where;
562 if (target->expr_type == EXPR_NULL)
563 goto null_arg;
565 if (target->expr_type == EXPR_VARIABLE)
566 attr = gfc_variable_attr (target, NULL);
567 else if (target->expr_type == EXPR_FUNCTION)
568 attr = target->symtree->n.sym->attr;
569 else
571 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
572 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
573 gfc_current_intrinsic, &target->where);
574 return FAILURE;
577 if (!attr.pointer && !attr.target)
579 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
580 "or a TARGET", gfc_current_intrinsic_arg[1],
581 gfc_current_intrinsic, &target->where);
582 return FAILURE;
585 t = SUCCESS;
586 if (same_type_check (pointer, 0, target, 1) == FAILURE)
587 t = FAILURE;
588 if (rank_check (target, 0, pointer->rank) == FAILURE)
589 t = FAILURE;
590 if (target->rank > 0)
592 for (i = 0; i < target->rank; i++)
593 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
595 gfc_error ("Array section with a vector subscript at %L shall not "
596 "be the target of a pointer",
597 &target->where);
598 t = FAILURE;
599 break;
602 return t;
604 null_arg:
606 gfc_error ("NULL pointer at %L is not permitted as actual argument "
607 "of '%s' intrinsic function", where, gfc_current_intrinsic);
608 return FAILURE;
614 gfc_check_atan2 (gfc_expr * y, gfc_expr * x)
616 if (type_check (y, 0, BT_REAL) == FAILURE)
617 return FAILURE;
618 if (same_type_check (y, 0, x, 1) == FAILURE)
619 return FAILURE;
621 return SUCCESS;
625 /* BESJN and BESYN functions. */
628 gfc_check_besn (gfc_expr * n, gfc_expr * x)
630 if (scalar_check (n, 0) == FAILURE)
631 return FAILURE;
633 if (type_check (n, 0, BT_INTEGER) == FAILURE)
634 return FAILURE;
636 if (scalar_check (x, 1) == FAILURE)
637 return FAILURE;
639 if (type_check (x, 1, BT_REAL) == FAILURE)
640 return FAILURE;
642 return SUCCESS;
647 gfc_check_btest (gfc_expr * i, gfc_expr * pos)
649 if (type_check (i, 0, BT_INTEGER) == FAILURE)
650 return FAILURE;
651 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
652 return FAILURE;
654 return SUCCESS;
659 gfc_check_char (gfc_expr * i, gfc_expr * kind)
661 if (type_check (i, 0, BT_INTEGER) == FAILURE)
662 return FAILURE;
663 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
664 return FAILURE;
666 return SUCCESS;
671 gfc_check_chdir (gfc_expr * dir)
673 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
674 return FAILURE;
676 return SUCCESS;
681 gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status)
683 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
684 return FAILURE;
686 if (status == NULL)
687 return SUCCESS;
689 if (type_check (status, 1, BT_INTEGER) == FAILURE)
690 return FAILURE;
692 if (scalar_check (status, 1) == FAILURE)
693 return FAILURE;
695 return SUCCESS;
700 gfc_check_chmod (gfc_expr * name, gfc_expr * mode)
702 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
703 return FAILURE;
705 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
706 return FAILURE;
708 return SUCCESS;
713 gfc_check_chmod_sub (gfc_expr * name, gfc_expr * mode, gfc_expr * status)
715 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
716 return FAILURE;
718 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
719 return FAILURE;
721 if (status == NULL)
722 return SUCCESS;
724 if (type_check (status, 2, BT_INTEGER) == FAILURE)
725 return FAILURE;
727 if (scalar_check (status, 2) == FAILURE)
728 return FAILURE;
730 return SUCCESS;
735 gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind)
737 if (numeric_check (x, 0) == FAILURE)
738 return FAILURE;
740 if (y != NULL)
742 if (numeric_check (y, 1) == FAILURE)
743 return FAILURE;
745 if (x->ts.type == BT_COMPLEX)
747 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
748 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
749 gfc_current_intrinsic, &y->where);
750 return FAILURE;
754 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
755 return FAILURE;
757 return SUCCESS;
762 gfc_check_complex (gfc_expr * x, gfc_expr * y)
764 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
766 gfc_error (
767 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
768 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &x->where);
769 return FAILURE;
771 if (scalar_check (x, 0) == FAILURE)
772 return FAILURE;
774 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
776 gfc_error (
777 "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL",
778 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &y->where);
779 return FAILURE;
781 if (scalar_check (y, 1) == FAILURE)
782 return FAILURE;
784 return SUCCESS;
789 gfc_check_count (gfc_expr * mask, gfc_expr * dim)
791 if (logical_array_check (mask, 0) == FAILURE)
792 return FAILURE;
793 if (dim_check (dim, 1, 1) == FAILURE)
794 return FAILURE;
796 if (gfc_init_expr)
797 return non_init_transformational ();
799 return SUCCESS;
804 gfc_check_cshift (gfc_expr * array, gfc_expr * shift, gfc_expr * dim)
806 if (array_check (array, 0) == FAILURE)
807 return FAILURE;
809 if (array->rank == 1)
811 if (scalar_check (shift, 1) == FAILURE)
812 return FAILURE;
814 else
816 /* TODO: more requirements on shift parameter. */
819 if (dim_check (dim, 2, 1) == FAILURE)
820 return FAILURE;
822 if (gfc_init_expr)
823 return non_init_transformational ();
825 return SUCCESS;
830 gfc_check_ctime (gfc_expr * time)
832 if (scalar_check (time, 0) == FAILURE)
833 return FAILURE;
835 if (type_check (time, 0, BT_INTEGER) == FAILURE)
836 return FAILURE;
838 return SUCCESS;
843 gfc_check_dcmplx (gfc_expr * x, gfc_expr * y)
845 if (numeric_check (x, 0) == FAILURE)
846 return FAILURE;
848 if (y != NULL)
850 if (numeric_check (y, 1) == FAILURE)
851 return FAILURE;
853 if (x->ts.type == BT_COMPLEX)
855 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
856 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
857 gfc_current_intrinsic, &y->where);
858 return FAILURE;
862 return SUCCESS;
867 gfc_check_dble (gfc_expr * x)
869 if (numeric_check (x, 0) == FAILURE)
870 return FAILURE;
872 return SUCCESS;
877 gfc_check_digits (gfc_expr * x)
879 if (int_or_real_check (x, 0) == FAILURE)
880 return FAILURE;
882 return SUCCESS;
887 gfc_check_dot_product (gfc_expr * vector_a, gfc_expr * vector_b)
889 switch (vector_a->ts.type)
891 case BT_LOGICAL:
892 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
893 return FAILURE;
894 break;
896 case BT_INTEGER:
897 case BT_REAL:
898 case BT_COMPLEX:
899 if (numeric_check (vector_b, 1) == FAILURE)
900 return FAILURE;
901 break;
903 default:
904 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
905 "or LOGICAL", gfc_current_intrinsic_arg[0],
906 gfc_current_intrinsic, &vector_a->where);
907 return FAILURE;
910 if (rank_check (vector_a, 0, 1) == FAILURE)
911 return FAILURE;
913 if (rank_check (vector_b, 1, 1) == FAILURE)
914 return FAILURE;
916 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
918 gfc_error ("different shape for arguments '%s' and '%s' "
919 "at %L for intrinsic 'dot_product'",
920 gfc_current_intrinsic_arg[0],
921 gfc_current_intrinsic_arg[1],
922 &vector_a->where);
923 return FAILURE;
926 if (gfc_init_expr)
927 return non_init_transformational ();
929 return SUCCESS;
934 gfc_check_eoshift (gfc_expr * array, gfc_expr * shift, gfc_expr * boundary,
935 gfc_expr * dim)
937 if (array_check (array, 0) == FAILURE)
938 return FAILURE;
940 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
941 return FAILURE;
943 if (array->rank == 1)
945 if (scalar_check (shift, 2) == FAILURE)
946 return FAILURE;
948 else
950 /* TODO: more weird restrictions on shift. */
953 if (boundary != NULL)
955 if (same_type_check (array, 0, boundary, 2) == FAILURE)
956 return FAILURE;
958 /* TODO: more restrictions on boundary. */
961 if (dim_check (dim, 1, 1) == FAILURE)
962 return FAILURE;
964 if (gfc_init_expr)
965 return non_init_transformational ();
967 return SUCCESS;
971 /* A single complex argument. */
974 gfc_check_fn_c (gfc_expr * a)
976 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
977 return FAILURE;
979 return SUCCESS;
983 /* A single real argument. */
986 gfc_check_fn_r (gfc_expr * a)
988 if (type_check (a, 0, BT_REAL) == FAILURE)
989 return FAILURE;
991 return SUCCESS;
995 /* A single real or complex argument. */
998 gfc_check_fn_rc (gfc_expr * a)
1000 if (real_or_complex_check (a, 0) == FAILURE)
1001 return FAILURE;
1003 return SUCCESS;
1008 gfc_check_fnum (gfc_expr * unit)
1010 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1011 return FAILURE;
1013 if (scalar_check (unit, 0) == FAILURE)
1014 return FAILURE;
1016 return SUCCESS;
1020 /* This is used for the g77 one-argument Bessel functions, and the
1021 error function. */
1024 gfc_check_g77_math1 (gfc_expr * x)
1026 if (scalar_check (x, 0) == FAILURE)
1027 return FAILURE;
1029 if (type_check (x, 0, BT_REAL) == FAILURE)
1030 return FAILURE;
1032 return SUCCESS;
1037 gfc_check_huge (gfc_expr * x)
1039 if (int_or_real_check (x, 0) == FAILURE)
1040 return FAILURE;
1042 return SUCCESS;
1046 /* Check that the single argument is an integer. */
1049 gfc_check_i (gfc_expr * i)
1051 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1052 return FAILURE;
1054 return SUCCESS;
1059 gfc_check_iand (gfc_expr * i, gfc_expr * j)
1061 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1062 return FAILURE;
1064 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1065 return FAILURE;
1067 if (i->ts.kind != j->ts.kind)
1069 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1070 &i->where) == FAILURE)
1071 return FAILURE;
1074 return SUCCESS;
1079 gfc_check_ibclr (gfc_expr * i, gfc_expr * pos)
1081 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1082 return FAILURE;
1084 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1085 return FAILURE;
1087 return SUCCESS;
1092 gfc_check_ibits (gfc_expr * i, gfc_expr * pos, gfc_expr * len)
1094 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1095 return FAILURE;
1097 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1098 return FAILURE;
1100 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1101 return FAILURE;
1103 return SUCCESS;
1108 gfc_check_ibset (gfc_expr * i, gfc_expr * pos)
1110 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1111 return FAILURE;
1113 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1114 return FAILURE;
1116 return SUCCESS;
1121 gfc_check_ichar_iachar (gfc_expr * c)
1123 int i;
1125 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1126 return FAILURE;
1128 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1130 gfc_expr *start;
1131 gfc_expr *end;
1132 gfc_ref *ref;
1134 /* Substring references don't have the charlength set. */
1135 ref = c->ref;
1136 while (ref && ref->type != REF_SUBSTRING)
1137 ref = ref->next;
1139 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1141 if (!ref)
1143 /* Check that the argument is length one. Non-constant lengths
1144 can't be checked here, so assume they are ok. */
1145 if (c->ts.cl && c->ts.cl->length)
1147 /* If we already have a length for this expression then use it. */
1148 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1149 return SUCCESS;
1150 i = mpz_get_si (c->ts.cl->length->value.integer);
1152 else
1153 return SUCCESS;
1155 else
1157 start = ref->u.ss.start;
1158 end = ref->u.ss.end;
1160 gcc_assert (start);
1161 if (end == NULL || end->expr_type != EXPR_CONSTANT
1162 || start->expr_type != EXPR_CONSTANT)
1163 return SUCCESS;
1165 i = mpz_get_si (end->value.integer) + 1
1166 - mpz_get_si (start->value.integer);
1169 else
1170 return SUCCESS;
1172 if (i != 1)
1174 gfc_error ("Argument of %s at %L must be of length one",
1175 gfc_current_intrinsic, &c->where);
1176 return FAILURE;
1179 return SUCCESS;
1184 gfc_check_idnint (gfc_expr * a)
1186 if (double_check (a, 0) == FAILURE)
1187 return FAILURE;
1189 return SUCCESS;
1194 gfc_check_ieor (gfc_expr * i, gfc_expr * j)
1196 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1197 return FAILURE;
1199 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1200 return FAILURE;
1202 if (i->ts.kind != j->ts.kind)
1204 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1205 &i->where) == FAILURE)
1206 return FAILURE;
1209 return SUCCESS;
1214 gfc_check_index (gfc_expr * string, gfc_expr * substring, gfc_expr * back)
1216 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1217 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1218 return FAILURE;
1221 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1222 return FAILURE;
1224 if (string->ts.kind != substring->ts.kind)
1226 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1227 "kind as '%s'", gfc_current_intrinsic_arg[1],
1228 gfc_current_intrinsic, &substring->where,
1229 gfc_current_intrinsic_arg[0]);
1230 return FAILURE;
1233 return SUCCESS;
1238 gfc_check_int (gfc_expr * x, gfc_expr * kind)
1240 if (numeric_check (x, 0) == FAILURE)
1241 return FAILURE;
1243 if (kind != NULL)
1245 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1246 return FAILURE;
1248 if (scalar_check (kind, 1) == FAILURE)
1249 return FAILURE;
1252 return SUCCESS;
1257 gfc_check_intconv (gfc_expr * x)
1259 if (numeric_check (x, 0) == FAILURE)
1260 return FAILURE;
1262 return SUCCESS;
1267 gfc_check_ior (gfc_expr * i, gfc_expr * j)
1269 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1270 return FAILURE;
1272 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1273 return FAILURE;
1275 if (i->ts.kind != j->ts.kind)
1277 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1278 &i->where) == FAILURE)
1279 return FAILURE;
1282 return SUCCESS;
1287 gfc_check_ishft (gfc_expr * i, gfc_expr * shift)
1289 if (type_check (i, 0, BT_INTEGER) == FAILURE
1290 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1291 return FAILURE;
1293 return SUCCESS;
1298 gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size)
1300 if (type_check (i, 0, BT_INTEGER) == FAILURE
1301 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1302 return FAILURE;
1304 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1305 return FAILURE;
1307 return SUCCESS;
1312 gfc_check_kill (gfc_expr * pid, gfc_expr * sig)
1314 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1315 return FAILURE;
1317 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1318 return FAILURE;
1320 return SUCCESS;
1325 gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status)
1327 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1328 return FAILURE;
1330 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1331 return FAILURE;
1333 if (status == NULL)
1334 return SUCCESS;
1336 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1337 return FAILURE;
1339 if (scalar_check (status, 2) == FAILURE)
1340 return FAILURE;
1342 return SUCCESS;
1347 gfc_check_kind (gfc_expr * x)
1349 if (x->ts.type == BT_DERIVED)
1351 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1352 "non-derived type", gfc_current_intrinsic_arg[0],
1353 gfc_current_intrinsic, &x->where);
1354 return FAILURE;
1357 return SUCCESS;
1362 gfc_check_lbound (gfc_expr * array, gfc_expr * dim)
1364 if (array_check (array, 0) == FAILURE)
1365 return FAILURE;
1367 if (dim != NULL)
1369 if (dim_check (dim, 1, 1) == FAILURE)
1370 return FAILURE;
1372 if (dim_rank_check (dim, array, 1) == FAILURE)
1373 return FAILURE;
1375 return SUCCESS;
1380 gfc_check_link (gfc_expr * path1, gfc_expr * path2)
1382 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1383 return FAILURE;
1385 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1386 return FAILURE;
1388 return SUCCESS;
1393 gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1395 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1396 return FAILURE;
1398 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1399 return FAILURE;
1401 if (status == NULL)
1402 return SUCCESS;
1404 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1405 return FAILURE;
1407 if (scalar_check (status, 2) == FAILURE)
1408 return FAILURE;
1410 return SUCCESS;
1414 gfc_check_loc (gfc_expr *expr)
1416 return variable_check (expr, 0);
1421 gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2)
1423 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1424 return FAILURE;
1426 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1427 return FAILURE;
1429 return SUCCESS;
1434 gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
1436 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1437 return FAILURE;
1439 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1440 return FAILURE;
1442 if (status == NULL)
1443 return SUCCESS;
1445 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1446 return FAILURE;
1448 if (scalar_check (status, 2) == FAILURE)
1449 return FAILURE;
1451 return SUCCESS;
1456 gfc_check_logical (gfc_expr * a, gfc_expr * kind)
1458 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1459 return FAILURE;
1460 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1461 return FAILURE;
1463 return SUCCESS;
1467 /* Min/max family. */
1469 static try
1470 min_max_args (gfc_actual_arglist * arg)
1472 if (arg == NULL || arg->next == NULL)
1474 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1475 gfc_current_intrinsic, gfc_current_intrinsic_where);
1476 return FAILURE;
1479 return SUCCESS;
1483 static try
1484 check_rest (bt type, int kind, gfc_actual_arglist * arg)
1486 gfc_expr *x;
1487 int n;
1489 if (min_max_args (arg) == FAILURE)
1490 return FAILURE;
1492 n = 1;
1494 for (; arg; arg = arg->next, n++)
1496 x = arg->expr;
1497 if (x->ts.type != type || x->ts.kind != kind)
1499 if (x->ts.type == type)
1501 if (gfc_notify_std (GFC_STD_GNU,
1502 "Extension: Different type kinds at %L", &x->where)
1503 == FAILURE)
1504 return FAILURE;
1506 else
1508 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be %s(%d)",
1509 n, gfc_current_intrinsic, &x->where,
1510 gfc_basic_typename (type), kind);
1511 return FAILURE;
1516 return SUCCESS;
1521 gfc_check_min_max (gfc_actual_arglist * arg)
1523 gfc_expr *x;
1525 if (min_max_args (arg) == FAILURE)
1526 return FAILURE;
1528 x = arg->expr;
1530 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1532 gfc_error
1533 ("'a1' argument of '%s' intrinsic at %L must be INTEGER or REAL",
1534 gfc_current_intrinsic, &x->where);
1535 return FAILURE;
1538 return check_rest (x->ts.type, x->ts.kind, arg);
1543 gfc_check_min_max_integer (gfc_actual_arglist * arg)
1545 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1550 gfc_check_min_max_real (gfc_actual_arglist * arg)
1552 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1557 gfc_check_min_max_double (gfc_actual_arglist * arg)
1559 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1562 /* End of min/max family. */
1565 gfc_check_malloc (gfc_expr * size)
1567 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1568 return FAILURE;
1570 if (scalar_check (size, 0) == FAILURE)
1571 return FAILURE;
1573 return SUCCESS;
1578 gfc_check_matmul (gfc_expr * matrix_a, gfc_expr * matrix_b)
1580 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1582 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1583 "or LOGICAL", gfc_current_intrinsic_arg[0],
1584 gfc_current_intrinsic, &matrix_a->where);
1585 return FAILURE;
1588 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1590 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1591 "or LOGICAL", gfc_current_intrinsic_arg[1],
1592 gfc_current_intrinsic, &matrix_b->where);
1593 return FAILURE;
1596 switch (matrix_a->rank)
1598 case 1:
1599 if (rank_check (matrix_b, 1, 2) == FAILURE)
1600 return FAILURE;
1601 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1602 if (! identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1604 gfc_error ("different shape on dimension 1 for arguments '%s' "
1605 "and '%s' at %L for intrinsic matmul",
1606 gfc_current_intrinsic_arg[0],
1607 gfc_current_intrinsic_arg[1],
1608 &matrix_a->where);
1609 return FAILURE;
1611 break;
1613 case 2:
1614 if (matrix_b->rank != 2)
1616 if (rank_check (matrix_b, 1, 1) == FAILURE)
1617 return FAILURE;
1619 /* matrix_b has rank 1 or 2 here. Common check for the cases
1620 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1621 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1622 if (! identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1624 gfc_error ("different shape on dimension 2 for argument '%s' and "
1625 "dimension 1 for argument '%s' at %L for intrinsic "
1626 "matmul", gfc_current_intrinsic_arg[0],
1627 gfc_current_intrinsic_arg[1], &matrix_a->where);
1628 return FAILURE;
1630 break;
1632 default:
1633 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1634 "1 or 2", gfc_current_intrinsic_arg[0],
1635 gfc_current_intrinsic, &matrix_a->where);
1636 return FAILURE;
1639 if (gfc_init_expr)
1640 return non_init_transformational ();
1642 return SUCCESS;
1646 /* Whoever came up with this interface was probably on something.
1647 The possibilities for the occupation of the second and third
1648 parameters are:
1650 Arg #2 Arg #3
1651 NULL NULL
1652 DIM NULL
1653 MASK NULL
1654 NULL MASK minloc(array, mask=m)
1655 DIM MASK
1657 I.e. in the case of minloc(array,mask), mask will be in the second
1658 position of the argument list and we'll have to fix that up. */
1661 gfc_check_minloc_maxloc (gfc_actual_arglist * ap)
1663 gfc_expr *a, *m, *d;
1665 a = ap->expr;
1666 if (int_or_real_check (a, 0) == FAILURE
1667 || array_check (a, 0) == FAILURE)
1668 return FAILURE;
1670 d = ap->next->expr;
1671 m = ap->next->next->expr;
1673 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1674 && ap->next->name == NULL)
1676 m = d;
1677 d = NULL;
1679 ap->next->expr = NULL;
1680 ap->next->next->expr = m;
1683 if (dim_check (d, 1, 1) == FAILURE)
1684 return FAILURE;
1686 if (d && dim_rank_check (d, a, 0) == FAILURE)
1687 return FAILURE;
1689 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1690 return FAILURE;
1692 if (m != NULL)
1694 char buffer[80];
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, a, m) == FAILURE)
1699 return FAILURE;
1702 if (gfc_init_expr)
1703 return non_init_transformational ();
1705 return SUCCESS;
1709 /* Similar to minloc/maxloc, the argument list might need to be
1710 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1711 difference is that MINLOC/MAXLOC take an additional KIND argument.
1712 The possibilities are:
1714 Arg #2 Arg #3
1715 NULL NULL
1716 DIM NULL
1717 MASK NULL
1718 NULL MASK minval(array, mask=m)
1719 DIM MASK
1721 I.e. in the case of minval(array,mask), mask will be in the second
1722 position of the argument list and we'll have to fix that up. */
1724 static try
1725 check_reduction (gfc_actual_arglist * ap)
1727 gfc_expr *a, *m, *d;
1729 a = ap->expr;
1730 d = ap->next->expr;
1731 m = ap->next->next->expr;
1733 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1734 && ap->next->name == NULL)
1736 m = d;
1737 d = NULL;
1739 ap->next->expr = NULL;
1740 ap->next->next->expr = m;
1743 if (dim_check (d, 1, 1) == FAILURE)
1744 return FAILURE;
1746 if (d && dim_rank_check (d, a, 0) == FAILURE)
1747 return FAILURE;
1749 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1750 return FAILURE;
1752 if (m != NULL)
1754 char buffer[80];
1755 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic %s",
1756 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1757 gfc_current_intrinsic);
1758 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1759 return FAILURE;
1762 return SUCCESS;
1767 gfc_check_minval_maxval (gfc_actual_arglist * ap)
1769 if (int_or_real_check (ap->expr, 0) == FAILURE
1770 || array_check (ap->expr, 0) == FAILURE)
1771 return FAILURE;
1773 if (gfc_init_expr)
1774 return non_init_transformational ();
1776 return check_reduction (ap);
1781 gfc_check_product_sum (gfc_actual_arglist * ap)
1783 if (numeric_check (ap->expr, 0) == FAILURE
1784 || array_check (ap->expr, 0) == FAILURE)
1785 return FAILURE;
1787 if (gfc_init_expr)
1788 return non_init_transformational ();
1790 return check_reduction (ap);
1795 gfc_check_merge (gfc_expr * tsource, gfc_expr * fsource, gfc_expr * mask)
1797 char buffer[80];
1799 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1800 return FAILURE;
1802 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1803 return FAILURE;
1805 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1806 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1807 gfc_current_intrinsic);
1808 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1809 return FAILURE;
1811 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1812 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1813 gfc_current_intrinsic);
1814 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1815 return FAILURE;
1817 return SUCCESS;
1821 gfc_check_move_alloc (gfc_expr * from, gfc_expr * to)
1823 symbol_attribute attr;
1825 if (variable_check (from, 0) == FAILURE)
1826 return FAILURE;
1828 if (array_check (from, 0) == FAILURE)
1829 return FAILURE;
1831 attr = gfc_variable_attr (from, NULL);
1832 if (!attr.allocatable)
1834 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1835 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1836 &from->where);
1837 return FAILURE;
1840 if (variable_check (to, 0) == FAILURE)
1841 return FAILURE;
1843 if (array_check (to, 0) == FAILURE)
1844 return FAILURE;
1846 attr = gfc_variable_attr (to, NULL);
1847 if (!attr.allocatable)
1849 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1850 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1851 &to->where);
1852 return FAILURE;
1855 if (same_type_check (from, 0, to, 1) == FAILURE)
1856 return FAILURE;
1858 if (to->rank != from->rank)
1860 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1861 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
1862 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1863 &to->where, from->rank, to->rank);
1864 return FAILURE;
1867 if (to->ts.kind != from->ts.kind)
1869 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1870 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
1871 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1872 &to->where, from->ts.kind, to->ts.kind);
1873 return FAILURE;
1876 return SUCCESS;
1880 gfc_check_nearest (gfc_expr * x, gfc_expr * s)
1882 if (type_check (x, 0, BT_REAL) == FAILURE)
1883 return FAILURE;
1885 if (type_check (s, 1, BT_REAL) == FAILURE)
1886 return FAILURE;
1888 return SUCCESS;
1892 gfc_check_new_line (gfc_expr * a)
1894 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1895 return FAILURE;
1897 return SUCCESS;
1901 gfc_check_null (gfc_expr * mold)
1903 symbol_attribute attr;
1905 if (mold == NULL)
1906 return SUCCESS;
1908 if (variable_check (mold, 0) == FAILURE)
1909 return FAILURE;
1911 attr = gfc_variable_attr (mold, NULL);
1913 if (!attr.pointer)
1915 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1916 gfc_current_intrinsic_arg[0],
1917 gfc_current_intrinsic, &mold->where);
1918 return FAILURE;
1921 return SUCCESS;
1926 gfc_check_pack (gfc_expr * array, gfc_expr * mask, gfc_expr * vector)
1928 char buffer[80];
1930 if (array_check (array, 0) == FAILURE)
1931 return FAILURE;
1933 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1934 return FAILURE;
1936 snprintf(buffer, sizeof(buffer), "arguments '%s' and '%s' for intrinsic '%s'",
1937 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1938 gfc_current_intrinsic);
1939 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1940 return FAILURE;
1942 if (vector != NULL)
1944 if (same_type_check (array, 0, vector, 2) == FAILURE)
1945 return FAILURE;
1947 if (rank_check (vector, 2, 1) == FAILURE)
1948 return FAILURE;
1950 /* TODO: More constraints here. */
1953 if (gfc_init_expr)
1954 return non_init_transformational ();
1956 return SUCCESS;
1961 gfc_check_precision (gfc_expr * x)
1963 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1965 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1966 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1967 gfc_current_intrinsic, &x->where);
1968 return FAILURE;
1971 return SUCCESS;
1976 gfc_check_present (gfc_expr * a)
1978 gfc_symbol *sym;
1980 if (variable_check (a, 0) == FAILURE)
1981 return FAILURE;
1983 sym = a->symtree->n.sym;
1984 if (!sym->attr.dummy)
1986 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
1987 "dummy variable", gfc_current_intrinsic_arg[0],
1988 gfc_current_intrinsic, &a->where);
1989 return FAILURE;
1992 if (!sym->attr.optional)
1994 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
1995 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
1996 gfc_current_intrinsic, &a->where);
1997 return FAILURE;
2000 /* 13.14.82 PRESENT(A)
2001 ......
2002 Argument. A shall be the name of an optional dummy argument that is accessible
2003 in the subprogram in which the PRESENT function reference appears... */
2005 if (a->ref != NULL
2006 && !(a->ref->next == NULL
2007 && a->ref->type == REF_ARRAY
2008 && a->ref->u.ar.type == AR_FULL))
2010 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a sub-"
2011 "object of '%s'", gfc_current_intrinsic_arg[0],
2012 gfc_current_intrinsic, &a->where, sym->name);
2013 return FAILURE;
2016 return SUCCESS;
2021 gfc_check_radix (gfc_expr * x)
2023 if (int_or_real_check (x, 0) == FAILURE)
2024 return FAILURE;
2026 return SUCCESS;
2031 gfc_check_range (gfc_expr * x)
2033 if (numeric_check (x, 0) == FAILURE)
2034 return FAILURE;
2036 return SUCCESS;
2040 /* real, float, sngl. */
2042 gfc_check_real (gfc_expr * a, gfc_expr * kind)
2044 if (numeric_check (a, 0) == FAILURE)
2045 return FAILURE;
2047 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2048 return FAILURE;
2050 return SUCCESS;
2055 gfc_check_rename (gfc_expr * path1, gfc_expr * path2)
2057 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2058 return FAILURE;
2060 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2061 return FAILURE;
2063 return SUCCESS;
2068 gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status)
2070 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2071 return FAILURE;
2073 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2074 return FAILURE;
2076 if (status == NULL)
2077 return SUCCESS;
2079 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2080 return FAILURE;
2082 if (scalar_check (status, 2) == FAILURE)
2083 return FAILURE;
2085 return SUCCESS;
2090 gfc_check_repeat (gfc_expr * x, gfc_expr * y)
2092 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2093 return FAILURE;
2095 if (scalar_check (x, 0) == FAILURE)
2096 return FAILURE;
2098 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2099 return FAILURE;
2101 if (scalar_check (y, 1) == FAILURE)
2102 return FAILURE;
2104 return SUCCESS;
2109 gfc_check_reshape (gfc_expr * source, gfc_expr * shape,
2110 gfc_expr * pad, gfc_expr * order)
2112 mpz_t size;
2113 mpz_t nelems;
2114 int m;
2116 if (array_check (source, 0) == FAILURE)
2117 return FAILURE;
2119 if (rank_check (shape, 1, 1) == FAILURE)
2120 return FAILURE;
2122 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2123 return FAILURE;
2125 if (gfc_array_size (shape, &size) != SUCCESS)
2127 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2128 "array of constant size", &shape->where);
2129 return FAILURE;
2132 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2133 mpz_clear (size);
2135 if (m > 0)
2137 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2138 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2139 return FAILURE;
2142 if (pad != NULL)
2144 if (same_type_check (source, 0, pad, 2) == FAILURE)
2145 return FAILURE;
2146 if (array_check (pad, 2) == FAILURE)
2147 return FAILURE;
2150 if (order != NULL && array_check (order, 3) == FAILURE)
2151 return FAILURE;
2153 if (pad == NULL
2154 && shape->expr_type == EXPR_ARRAY
2155 && gfc_is_constant_expr (shape)
2156 && !(source->expr_type == EXPR_VARIABLE
2157 && source->symtree->n.sym->as
2158 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2160 /* Check the match in size between source and destination. */
2161 if (gfc_array_size (source, &nelems) == SUCCESS)
2163 gfc_constructor *c;
2164 bool test;
2166 c = shape->value.constructor;
2167 mpz_init_set_ui (size, 1);
2168 for (; c; c = c->next)
2169 mpz_mul (size, size, c->expr->value.integer);
2171 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2172 mpz_clear (nelems);
2173 mpz_clear (size);
2175 if (test)
2177 gfc_error ("Without padding, there are not enough elements in the "
2178 "intrinsic RESHAPE source at %L to match the shape",
2179 &source->where);
2180 return FAILURE;
2185 return SUCCESS;
2190 gfc_check_scale (gfc_expr * x, gfc_expr * i)
2192 if (type_check (x, 0, BT_REAL) == FAILURE)
2193 return FAILURE;
2195 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2196 return FAILURE;
2198 return SUCCESS;
2203 gfc_check_scan (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2205 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2206 return FAILURE;
2208 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2209 return FAILURE;
2211 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2212 return FAILURE;
2214 if (same_type_check (x, 0, y, 1) == FAILURE)
2215 return FAILURE;
2217 return SUCCESS;
2222 gfc_check_secnds (gfc_expr * r)
2225 if (type_check (r, 0, BT_REAL) == FAILURE)
2226 return FAILURE;
2228 if (kind_value_check (r, 0, 4) == FAILURE)
2229 return FAILURE;
2231 if (scalar_check (r, 0) == FAILURE)
2232 return FAILURE;
2234 return SUCCESS;
2239 gfc_check_selected_int_kind (gfc_expr * r)
2242 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2243 return FAILURE;
2245 if (scalar_check (r, 0) == FAILURE)
2246 return FAILURE;
2248 return SUCCESS;
2253 gfc_check_selected_real_kind (gfc_expr * p, gfc_expr * r)
2255 if (p == NULL && r == NULL)
2257 gfc_error ("Missing arguments to %s intrinsic at %L",
2258 gfc_current_intrinsic, gfc_current_intrinsic_where);
2260 return FAILURE;
2263 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2264 return FAILURE;
2266 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2267 return FAILURE;
2269 return SUCCESS;
2274 gfc_check_set_exponent (gfc_expr * x, gfc_expr * i)
2276 if (type_check (x, 0, BT_REAL) == FAILURE)
2277 return FAILURE;
2279 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2280 return FAILURE;
2282 return SUCCESS;
2287 gfc_check_shape (gfc_expr * source)
2289 gfc_array_ref *ar;
2291 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2292 return SUCCESS;
2294 ar = gfc_find_array_ref (source);
2296 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2298 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2299 "an assumed size array", &source->where);
2300 return FAILURE;
2303 return SUCCESS;
2308 gfc_check_sign (gfc_expr * a, gfc_expr * b)
2310 if (int_or_real_check (a, 0) == FAILURE)
2311 return FAILURE;
2313 if (same_type_check (a, 0, b, 1) == FAILURE)
2314 return FAILURE;
2316 return SUCCESS;
2321 gfc_check_size (gfc_expr * array, gfc_expr * dim)
2323 if (array_check (array, 0) == FAILURE)
2324 return FAILURE;
2326 if (dim != NULL)
2328 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2329 return FAILURE;
2331 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2332 return FAILURE;
2334 if (dim_rank_check (dim, array, 0) == FAILURE)
2335 return FAILURE;
2338 return SUCCESS;
2343 gfc_check_sleep_sub (gfc_expr * seconds)
2345 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2346 return FAILURE;
2348 if (scalar_check (seconds, 0) == FAILURE)
2349 return FAILURE;
2351 return SUCCESS;
2356 gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies)
2358 if (source->rank >= GFC_MAX_DIMENSIONS)
2360 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2361 "than rank %d", gfc_current_intrinsic_arg[0],
2362 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2364 return FAILURE;
2367 if (dim_check (dim, 1, 0) == FAILURE)
2368 return FAILURE;
2370 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2371 return FAILURE;
2373 if (scalar_check (ncopies, 2) == FAILURE)
2374 return FAILURE;
2376 if (gfc_init_expr)
2377 return non_init_transformational ();
2379 return SUCCESS;
2383 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2384 functions). */
2386 gfc_check_fgetputc_sub (gfc_expr * unit, gfc_expr * c, gfc_expr * status)
2388 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2389 return FAILURE;
2391 if (scalar_check (unit, 0) == FAILURE)
2392 return FAILURE;
2394 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2395 return FAILURE;
2397 if (status == NULL)
2398 return SUCCESS;
2400 if (type_check (status, 2, BT_INTEGER) == FAILURE
2401 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2402 || scalar_check (status, 2) == FAILURE)
2403 return FAILURE;
2405 return SUCCESS;
2410 gfc_check_fgetputc (gfc_expr * unit, gfc_expr * c)
2412 return gfc_check_fgetputc_sub (unit, c, NULL);
2417 gfc_check_fgetput_sub (gfc_expr * c, gfc_expr * status)
2419 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2420 return FAILURE;
2422 if (status == NULL)
2423 return SUCCESS;
2425 if (type_check (status, 1, BT_INTEGER) == FAILURE
2426 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2427 || scalar_check (status, 1) == FAILURE)
2428 return FAILURE;
2430 return SUCCESS;
2435 gfc_check_fgetput (gfc_expr * c)
2437 return gfc_check_fgetput_sub (c, NULL);
2442 gfc_check_fstat (gfc_expr * unit, gfc_expr * array)
2444 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2445 return FAILURE;
2447 if (scalar_check (unit, 0) == FAILURE)
2448 return FAILURE;
2450 if (type_check (array, 1, BT_INTEGER) == FAILURE
2451 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2452 return FAILURE;
2454 if (array_check (array, 1) == FAILURE)
2455 return FAILURE;
2457 return SUCCESS;
2462 gfc_check_fstat_sub (gfc_expr * unit, gfc_expr * array, gfc_expr * status)
2464 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2465 return FAILURE;
2467 if (scalar_check (unit, 0) == FAILURE)
2468 return FAILURE;
2470 if (type_check (array, 1, BT_INTEGER) == FAILURE
2471 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2472 return FAILURE;
2474 if (array_check (array, 1) == FAILURE)
2475 return FAILURE;
2477 if (status == NULL)
2478 return SUCCESS;
2480 if (type_check (status, 2, BT_INTEGER) == FAILURE
2481 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2482 return FAILURE;
2484 if (scalar_check (status, 2) == FAILURE)
2485 return FAILURE;
2487 return SUCCESS;
2492 gfc_check_ftell (gfc_expr * unit)
2494 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2495 return FAILURE;
2497 if (scalar_check (unit, 0) == FAILURE)
2498 return FAILURE;
2500 return SUCCESS;
2505 gfc_check_ftell_sub (gfc_expr * unit, gfc_expr * offset)
2507 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2508 return FAILURE;
2510 if (scalar_check (unit, 0) == FAILURE)
2511 return FAILURE;
2513 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2514 return FAILURE;
2516 if (scalar_check (offset, 1) == FAILURE)
2517 return FAILURE;
2519 return SUCCESS;
2524 gfc_check_stat (gfc_expr * name, gfc_expr * array)
2526 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2527 return FAILURE;
2529 if (type_check (array, 1, BT_INTEGER) == FAILURE
2530 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2531 return FAILURE;
2533 if (array_check (array, 1) == FAILURE)
2534 return FAILURE;
2536 return SUCCESS;
2541 gfc_check_stat_sub (gfc_expr * name, gfc_expr * array, gfc_expr * status)
2543 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2544 return FAILURE;
2546 if (type_check (array, 1, BT_INTEGER) == FAILURE
2547 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2548 return FAILURE;
2550 if (array_check (array, 1) == FAILURE)
2551 return FAILURE;
2553 if (status == NULL)
2554 return SUCCESS;
2556 if (type_check (status, 2, BT_INTEGER) == FAILURE
2557 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2558 return FAILURE;
2560 if (scalar_check (status, 2) == FAILURE)
2561 return FAILURE;
2563 return SUCCESS;
2568 gfc_check_transfer (gfc_expr * source ATTRIBUTE_UNUSED,
2569 gfc_expr * mold ATTRIBUTE_UNUSED,
2570 gfc_expr * size)
2572 if (size != NULL)
2574 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2575 return FAILURE;
2577 if (scalar_check (size, 2) == FAILURE)
2578 return FAILURE;
2580 if (nonoptional_check (size, 2) == FAILURE)
2581 return FAILURE;
2584 return SUCCESS;
2589 gfc_check_transpose (gfc_expr * matrix)
2591 if (rank_check (matrix, 0, 2) == FAILURE)
2592 return FAILURE;
2594 if (gfc_init_expr)
2595 return non_init_transformational ();
2597 return SUCCESS;
2602 gfc_check_ubound (gfc_expr * array, gfc_expr * dim)
2604 if (array_check (array, 0) == FAILURE)
2605 return FAILURE;
2607 if (dim != NULL)
2609 if (dim_check (dim, 1, 1) == FAILURE)
2610 return FAILURE;
2612 if (dim_rank_check (dim, array, 0) == FAILURE)
2613 return FAILURE;
2616 return SUCCESS;
2621 gfc_check_unpack (gfc_expr * vector, gfc_expr * mask, gfc_expr * field)
2623 if (rank_check (vector, 0, 1) == FAILURE)
2624 return FAILURE;
2626 if (array_check (mask, 1) == FAILURE)
2627 return FAILURE;
2629 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2630 return FAILURE;
2632 if (same_type_check (vector, 0, field, 2) == FAILURE)
2633 return FAILURE;
2635 if (gfc_init_expr)
2636 return non_init_transformational ();
2638 return SUCCESS;
2643 gfc_check_verify (gfc_expr * x, gfc_expr * y, gfc_expr * z)
2645 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2646 return FAILURE;
2648 if (same_type_check (x, 0, y, 1) == FAILURE)
2649 return FAILURE;
2651 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2652 return FAILURE;
2654 return SUCCESS;
2659 gfc_check_trim (gfc_expr * x)
2661 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2662 return FAILURE;
2664 if (scalar_check (x, 0) == FAILURE)
2665 return FAILURE;
2667 return SUCCESS;
2672 gfc_check_ttynam (gfc_expr * unit)
2674 if (scalar_check (unit, 0) == FAILURE)
2675 return FAILURE;
2677 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2678 return FAILURE;
2680 return SUCCESS;
2684 /* Common check function for the half a dozen intrinsics that have a
2685 single real argument. */
2688 gfc_check_x (gfc_expr * x)
2690 if (type_check (x, 0, BT_REAL) == FAILURE)
2691 return FAILURE;
2693 return SUCCESS;
2697 /************* Check functions for intrinsic subroutines *************/
2700 gfc_check_cpu_time (gfc_expr * time)
2702 if (scalar_check (time, 0) == FAILURE)
2703 return FAILURE;
2705 if (type_check (time, 0, BT_REAL) == FAILURE)
2706 return FAILURE;
2708 if (variable_check (time, 0) == FAILURE)
2709 return FAILURE;
2711 return SUCCESS;
2716 gfc_check_date_and_time (gfc_expr * date, gfc_expr * time,
2717 gfc_expr * zone, gfc_expr * values)
2719 if (date != NULL)
2721 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2722 return FAILURE;
2723 if (scalar_check (date, 0) == FAILURE)
2724 return FAILURE;
2725 if (variable_check (date, 0) == FAILURE)
2726 return FAILURE;
2729 if (time != NULL)
2731 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2732 return FAILURE;
2733 if (scalar_check (time, 1) == FAILURE)
2734 return FAILURE;
2735 if (variable_check (time, 1) == FAILURE)
2736 return FAILURE;
2739 if (zone != NULL)
2741 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2742 return FAILURE;
2743 if (scalar_check (zone, 2) == FAILURE)
2744 return FAILURE;
2745 if (variable_check (zone, 2) == FAILURE)
2746 return FAILURE;
2749 if (values != NULL)
2751 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2752 return FAILURE;
2753 if (array_check (values, 3) == FAILURE)
2754 return FAILURE;
2755 if (rank_check (values, 3, 1) == FAILURE)
2756 return FAILURE;
2757 if (variable_check (values, 3) == FAILURE)
2758 return FAILURE;
2761 return SUCCESS;
2766 gfc_check_mvbits (gfc_expr * from, gfc_expr * frompos, gfc_expr * len,
2767 gfc_expr * to, gfc_expr * topos)
2769 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2770 return FAILURE;
2772 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2773 return FAILURE;
2775 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2776 return FAILURE;
2778 if (same_type_check (from, 0, to, 3) == FAILURE)
2779 return FAILURE;
2781 if (variable_check (to, 3) == FAILURE)
2782 return FAILURE;
2784 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2785 return FAILURE;
2787 return SUCCESS;
2792 gfc_check_random_number (gfc_expr * harvest)
2794 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2795 return FAILURE;
2797 if (variable_check (harvest, 0) == FAILURE)
2798 return FAILURE;
2800 return SUCCESS;
2805 gfc_check_random_seed (gfc_expr * size, gfc_expr * put, gfc_expr * get)
2807 if (size != NULL)
2809 if (scalar_check (size, 0) == FAILURE)
2810 return FAILURE;
2812 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2813 return FAILURE;
2815 if (variable_check (size, 0) == FAILURE)
2816 return FAILURE;
2818 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2819 return FAILURE;
2822 if (put != NULL)
2825 if (size != NULL)
2826 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2827 &put->where);
2829 if (array_check (put, 1) == FAILURE)
2830 return FAILURE;
2832 if (rank_check (put, 1, 1) == FAILURE)
2833 return FAILURE;
2835 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2836 return FAILURE;
2838 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2839 return FAILURE;
2842 if (get != NULL)
2845 if (size != NULL || put != NULL)
2846 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2847 &get->where);
2849 if (array_check (get, 2) == FAILURE)
2850 return FAILURE;
2852 if (rank_check (get, 2, 1) == FAILURE)
2853 return FAILURE;
2855 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2856 return FAILURE;
2858 if (variable_check (get, 2) == FAILURE)
2859 return FAILURE;
2861 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2862 return FAILURE;
2865 return SUCCESS;
2869 gfc_check_second_sub (gfc_expr * time)
2871 if (scalar_check (time, 0) == FAILURE)
2872 return FAILURE;
2874 if (type_check (time, 0, BT_REAL) == FAILURE)
2875 return FAILURE;
2877 if (kind_value_check(time, 0, 4) == FAILURE)
2878 return FAILURE;
2880 return SUCCESS;
2884 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2885 count, count_rate, and count_max are all optional arguments */
2888 gfc_check_system_clock (gfc_expr * count, gfc_expr * count_rate,
2889 gfc_expr * count_max)
2891 if (count != NULL)
2893 if (scalar_check (count, 0) == FAILURE)
2894 return FAILURE;
2896 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2897 return FAILURE;
2899 if (variable_check (count, 0) == FAILURE)
2900 return FAILURE;
2903 if (count_rate != NULL)
2905 if (scalar_check (count_rate, 1) == FAILURE)
2906 return FAILURE;
2908 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2909 return FAILURE;
2911 if (variable_check (count_rate, 1) == FAILURE)
2912 return FAILURE;
2914 if (count != NULL
2915 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2916 return FAILURE;
2920 if (count_max != NULL)
2922 if (scalar_check (count_max, 2) == FAILURE)
2923 return FAILURE;
2925 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2926 return FAILURE;
2928 if (variable_check (count_max, 2) == FAILURE)
2929 return FAILURE;
2931 if (count != NULL
2932 && same_type_check (count, 0, count_max, 2) == FAILURE)
2933 return FAILURE;
2935 if (count_rate != NULL
2936 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2937 return FAILURE;
2940 return SUCCESS;
2944 gfc_check_irand (gfc_expr * x)
2946 if (x == NULL)
2947 return SUCCESS;
2949 if (scalar_check (x, 0) == FAILURE)
2950 return FAILURE;
2952 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2953 return FAILURE;
2955 if (kind_value_check(x, 0, 4) == FAILURE)
2956 return FAILURE;
2958 return SUCCESS;
2963 gfc_check_alarm_sub (gfc_expr * seconds, gfc_expr * handler, gfc_expr * status)
2965 if (scalar_check (seconds, 0) == FAILURE)
2966 return FAILURE;
2968 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2969 return FAILURE;
2971 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2973 gfc_error (
2974 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
2975 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
2976 return FAILURE;
2979 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2980 return FAILURE;
2982 if (status == NULL)
2983 return SUCCESS;
2985 if (scalar_check (status, 2) == FAILURE)
2986 return FAILURE;
2988 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2989 return FAILURE;
2991 return SUCCESS;
2996 gfc_check_rand (gfc_expr * x)
2998 if (x == NULL)
2999 return SUCCESS;
3001 if (scalar_check (x, 0) == FAILURE)
3002 return FAILURE;
3004 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3005 return FAILURE;
3007 if (kind_value_check(x, 0, 4) == FAILURE)
3008 return FAILURE;
3010 return SUCCESS;
3014 gfc_check_srand (gfc_expr * x)
3016 if (scalar_check (x, 0) == FAILURE)
3017 return FAILURE;
3019 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3020 return FAILURE;
3022 if (kind_value_check(x, 0, 4) == FAILURE)
3023 return FAILURE;
3025 return SUCCESS;
3029 gfc_check_ctime_sub (gfc_expr * time, gfc_expr * result)
3031 if (scalar_check (time, 0) == FAILURE)
3032 return FAILURE;
3034 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3035 return FAILURE;
3037 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3038 return FAILURE;
3040 return SUCCESS;
3044 gfc_check_etime (gfc_expr * x)
3046 if (array_check (x, 0) == FAILURE)
3047 return FAILURE;
3049 if (rank_check (x, 0, 1) == FAILURE)
3050 return FAILURE;
3052 if (variable_check (x, 0) == FAILURE)
3053 return FAILURE;
3055 if (type_check (x, 0, BT_REAL) == FAILURE)
3056 return FAILURE;
3058 if (kind_value_check(x, 0, 4) == FAILURE)
3059 return FAILURE;
3061 return SUCCESS;
3065 gfc_check_etime_sub (gfc_expr * values, gfc_expr * time)
3067 if (array_check (values, 0) == FAILURE)
3068 return FAILURE;
3070 if (rank_check (values, 0, 1) == FAILURE)
3071 return FAILURE;
3073 if (variable_check (values, 0) == FAILURE)
3074 return FAILURE;
3076 if (type_check (values, 0, BT_REAL) == FAILURE)
3077 return FAILURE;
3079 if (kind_value_check(values, 0, 4) == FAILURE)
3080 return FAILURE;
3082 if (scalar_check (time, 1) == FAILURE)
3083 return FAILURE;
3085 if (type_check (time, 1, BT_REAL) == FAILURE)
3086 return FAILURE;
3088 if (kind_value_check(time, 1, 4) == FAILURE)
3089 return FAILURE;
3091 return SUCCESS;
3096 gfc_check_fdate_sub (gfc_expr * date)
3098 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3099 return FAILURE;
3101 return SUCCESS;
3106 gfc_check_gerror (gfc_expr * msg)
3108 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3109 return FAILURE;
3111 return SUCCESS;
3116 gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status)
3118 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3119 return FAILURE;
3121 if (status == NULL)
3122 return SUCCESS;
3124 if (scalar_check (status, 1) == FAILURE)
3125 return FAILURE;
3127 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3128 return FAILURE;
3130 return SUCCESS;
3135 gfc_check_getlog (gfc_expr * msg)
3137 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3138 return FAILURE;
3140 return SUCCESS;
3145 gfc_check_exit (gfc_expr * status)
3147 if (status == NULL)
3148 return SUCCESS;
3150 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3151 return FAILURE;
3153 if (scalar_check (status, 0) == FAILURE)
3154 return FAILURE;
3156 return SUCCESS;
3161 gfc_check_flush (gfc_expr * unit)
3163 if (unit == NULL)
3164 return SUCCESS;
3166 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3167 return FAILURE;
3169 if (scalar_check (unit, 0) == FAILURE)
3170 return FAILURE;
3172 return SUCCESS;
3177 gfc_check_free (gfc_expr * i)
3179 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3180 return FAILURE;
3182 if (scalar_check (i, 0) == FAILURE)
3183 return FAILURE;
3185 return SUCCESS;
3190 gfc_check_hostnm (gfc_expr * name)
3192 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3193 return FAILURE;
3195 return SUCCESS;
3200 gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status)
3202 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3203 return FAILURE;
3205 if (status == NULL)
3206 return SUCCESS;
3208 if (scalar_check (status, 1) == FAILURE)
3209 return FAILURE;
3211 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3212 return FAILURE;
3214 return SUCCESS;
3219 gfc_check_itime_idate (gfc_expr * values)
3221 if (array_check (values, 0) == FAILURE)
3222 return FAILURE;
3224 if (rank_check (values, 0, 1) == FAILURE)
3225 return FAILURE;
3227 if (variable_check (values, 0) == FAILURE)
3228 return FAILURE;
3230 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3231 return FAILURE;
3233 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3234 return FAILURE;
3236 return SUCCESS;
3241 gfc_check_ltime_gmtime (gfc_expr * time, gfc_expr * values)
3243 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3244 return FAILURE;
3246 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3247 return FAILURE;
3249 if (scalar_check (time, 0) == FAILURE)
3250 return FAILURE;
3252 if (array_check (values, 1) == FAILURE)
3253 return FAILURE;
3255 if (rank_check (values, 1, 1) == FAILURE)
3256 return FAILURE;
3258 if (variable_check (values, 1) == FAILURE)
3259 return FAILURE;
3261 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3262 return FAILURE;
3264 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3265 return FAILURE;
3267 return SUCCESS;
3272 gfc_check_ttynam_sub (gfc_expr * unit, gfc_expr * name)
3274 if (scalar_check (unit, 0) == FAILURE)
3275 return FAILURE;
3277 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3278 return FAILURE;
3280 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3281 return FAILURE;
3283 return SUCCESS;
3288 gfc_check_isatty (gfc_expr * unit)
3290 if (unit == NULL)
3291 return FAILURE;
3293 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3294 return FAILURE;
3296 if (scalar_check (unit, 0) == FAILURE)
3297 return FAILURE;
3299 return SUCCESS;
3304 gfc_check_perror (gfc_expr * string)
3306 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3307 return FAILURE;
3309 return SUCCESS;
3314 gfc_check_umask (gfc_expr * mask)
3316 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3317 return FAILURE;
3319 if (scalar_check (mask, 0) == FAILURE)
3320 return FAILURE;
3322 return SUCCESS;
3327 gfc_check_umask_sub (gfc_expr * mask, gfc_expr * old)
3329 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3330 return FAILURE;
3332 if (scalar_check (mask, 0) == FAILURE)
3333 return FAILURE;
3335 if (old == NULL)
3336 return SUCCESS;
3338 if (scalar_check (old, 1) == FAILURE)
3339 return FAILURE;
3341 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3342 return FAILURE;
3344 return SUCCESS;
3349 gfc_check_unlink (gfc_expr * name)
3351 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3352 return FAILURE;
3354 return SUCCESS;
3359 gfc_check_unlink_sub (gfc_expr * name, gfc_expr * status)
3361 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3362 return FAILURE;
3364 if (status == NULL)
3365 return SUCCESS;
3367 if (scalar_check (status, 1) == FAILURE)
3368 return FAILURE;
3370 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3371 return FAILURE;
3373 return SUCCESS;
3378 gfc_check_signal (gfc_expr * number, gfc_expr * handler)
3380 if (scalar_check (number, 0) == FAILURE)
3381 return FAILURE;
3383 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3384 return FAILURE;
3386 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3388 gfc_error (
3389 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3390 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3391 return FAILURE;
3394 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3395 return FAILURE;
3397 return SUCCESS;
3402 gfc_check_signal_sub (gfc_expr * number, gfc_expr * handler, gfc_expr * status)
3404 if (scalar_check (number, 0) == FAILURE)
3405 return FAILURE;
3407 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3408 return FAILURE;
3410 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3412 gfc_error (
3413 "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE",
3414 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &handler->where);
3415 return FAILURE;
3418 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3419 return FAILURE;
3421 if (status == NULL)
3422 return SUCCESS;
3424 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3425 return FAILURE;
3427 if (scalar_check (status, 2) == FAILURE)
3428 return FAILURE;
3430 return SUCCESS;
3435 gfc_check_system_sub (gfc_expr * cmd, gfc_expr * status)
3437 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3438 return FAILURE;
3440 if (scalar_check (status, 1) == FAILURE)
3441 return FAILURE;
3443 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3444 return FAILURE;
3446 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3447 return FAILURE;
3449 return SUCCESS;
3453 /* This is used for the GNU intrinsics AND, OR and XOR. */
3455 gfc_check_and (gfc_expr * i, gfc_expr * j)
3457 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3459 gfc_error (
3460 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3461 gfc_current_intrinsic_arg[0], gfc_current_intrinsic, &i->where);
3462 return FAILURE;
3465 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3467 gfc_error (
3468 "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL",
3469 gfc_current_intrinsic_arg[1], gfc_current_intrinsic, &j->where);
3470 return FAILURE;
3473 if (i->ts.type != j->ts.type)
3475 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3476 "have the same type", gfc_current_intrinsic_arg[0],
3477 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3478 &j->where);
3479 return FAILURE;
3482 if (scalar_check (i, 0) == FAILURE)
3483 return FAILURE;
3485 if (scalar_check (j, 1) == FAILURE)
3486 return FAILURE;
3488 return SUCCESS;