re PR fortran/30882 ([4.1 and 4.2 only] size with initialization expression value...
[gcc.git] / gcc / fortran / check.c
1 /* Check functions
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught & Katherine Holcomb
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA. */
22
23
24 /* These functions check to see if an argument list is compatible with
25 a particular intrinsic function or subroutine. Presence of
26 required arguments has already been established, the argument list
27 has been sorted into the right order and has NULL arguments in the
28 correct places for missing optional arguments. */
29
30 #include "config.h"
31 #include "system.h"
32 #include "flags.h"
33 #include "gfortran.h"
34 #include "intrinsic.h"
35
36
37 /* Check the type of an expression. */
38
39 static try
40 type_check (gfc_expr *e, int n, bt type)
41 {
42 if (e->ts.type == type)
43 return SUCCESS;
44
45 gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
46 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where,
47 gfc_basic_typename (type));
48
49 return FAILURE;
50 }
51
52
53 /* Check that the expression is a numeric type. */
54
55 static try
56 numeric_check (gfc_expr *e, int n)
57 {
58 if (gfc_numeric_ts (&e->ts))
59 return SUCCESS;
60
61 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
62 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
63
64 return FAILURE;
65 }
66
67
68 /* Check that an expression is integer or real. */
69
70 static try
71 int_or_real_check (gfc_expr *e, int n)
72 {
73 if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
74 {
75 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
76 "or REAL", gfc_current_intrinsic_arg[n],
77 gfc_current_intrinsic, &e->where);
78 return FAILURE;
79 }
80
81 return SUCCESS;
82 }
83
84
85 /* Check that an expression is real or complex. */
86
87 static try
88 real_or_complex_check (gfc_expr *e, int n)
89 {
90 if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
91 {
92 gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
93 "or COMPLEX", gfc_current_intrinsic_arg[n],
94 gfc_current_intrinsic, &e->where);
95 return FAILURE;
96 }
97
98 return SUCCESS;
99 }
100
101
102 /* Check that the expression is an optional constant integer
103 and that it specifies a valid kind for that type. */
104
105 static try
106 kind_check (gfc_expr *k, int n, bt type)
107 {
108 int kind;
109
110 if (k == NULL)
111 return SUCCESS;
112
113 if (type_check (k, n, BT_INTEGER) == FAILURE)
114 return FAILURE;
115
116 if (k->expr_type != EXPR_CONSTANT)
117 {
118 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
119 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
120 &k->where);
121 return FAILURE;
122 }
123
124 if (gfc_extract_int (k, &kind) != NULL
125 || gfc_validate_kind (type, kind, true) < 0)
126 {
127 gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
128 &k->where);
129 return FAILURE;
130 }
131
132 return SUCCESS;
133 }
134
135
136 /* Make sure the expression is a double precision real. */
137
138 static try
139 double_check (gfc_expr *d, int n)
140 {
141 if (type_check (d, n, BT_REAL) == FAILURE)
142 return FAILURE;
143
144 if (d->ts.kind != gfc_default_double_kind)
145 {
146 gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
147 "precision", gfc_current_intrinsic_arg[n],
148 gfc_current_intrinsic, &d->where);
149 return FAILURE;
150 }
151
152 return SUCCESS;
153 }
154
155
156 /* Make sure the expression is a logical array. */
157
158 static try
159 logical_array_check (gfc_expr *array, int n)
160 {
161 if (array->ts.type != BT_LOGICAL || array->rank == 0)
162 {
163 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
164 "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
165 &array->where);
166 return FAILURE;
167 }
168
169 return SUCCESS;
170 }
171
172
173 /* Make sure an expression is an array. */
174
175 static try
176 array_check (gfc_expr *e, int n)
177 {
178 if (e->rank != 0)
179 return SUCCESS;
180
181 gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
182 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
183
184 return FAILURE;
185 }
186
187
188 /* Make sure an expression is a scalar. */
189
190 static try
191 scalar_check (gfc_expr *e, int n)
192 {
193 if (e->rank == 0)
194 return SUCCESS;
195
196 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
197 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
198
199 return FAILURE;
200 }
201
202
203 /* Make sure two expressions have the same type. */
204
205 static try
206 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
207 {
208 if (gfc_compare_types (&e->ts, &f->ts))
209 return SUCCESS;
210
211 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
212 "and kind as '%s'", gfc_current_intrinsic_arg[m],
213 gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]);
214
215 return FAILURE;
216 }
217
218
219 /* Make sure that an expression has a certain (nonzero) rank. */
220
221 static try
222 rank_check (gfc_expr *e, int n, int rank)
223 {
224 if (e->rank == rank)
225 return SUCCESS;
226
227 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
228 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
229 &e->where, rank);
230
231 return FAILURE;
232 }
233
234
235 /* Make sure a variable expression is not an optional dummy argument. */
236
237 static try
238 nonoptional_check (gfc_expr *e, int n)
239 {
240 if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
241 {
242 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
243 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
244 &e->where);
245 }
246
247 /* TODO: Recursive check on nonoptional variables? */
248
249 return SUCCESS;
250 }
251
252
253 /* Check that an expression has a particular kind. */
254
255 static try
256 kind_value_check (gfc_expr *e, int n, int k)
257 {
258 if (e->ts.kind == k)
259 return SUCCESS;
260
261 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
262 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
263 &e->where, k);
264
265 return FAILURE;
266 }
267
268
269 /* Make sure an expression is a variable. */
270
271 static try
272 variable_check (gfc_expr *e, int n)
273 {
274 if ((e->expr_type == EXPR_VARIABLE
275 && e->symtree->n.sym->attr.flavor != FL_PARAMETER)
276 || (e->expr_type == EXPR_FUNCTION
277 && e->symtree->n.sym->result == e->symtree->n.sym))
278 return SUCCESS;
279
280 if (e->expr_type == EXPR_VARIABLE
281 && e->symtree->n.sym->attr.intent == INTENT_IN)
282 {
283 gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
284 gfc_current_intrinsic_arg[n], gfc_current_intrinsic,
285 &e->where);
286 return FAILURE;
287 }
288
289 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
290 gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where);
291
292 return FAILURE;
293 }
294
295
296 /* Check the common DIM parameter for correctness. */
297
298 static try
299 dim_check (gfc_expr *dim, int n, int optional)
300 {
301 if (optional && dim == NULL)
302 return SUCCESS;
303
304 if (dim == NULL)
305 {
306 gfc_error ("Missing DIM parameter in intrinsic '%s' at %L",
307 gfc_current_intrinsic, gfc_current_intrinsic_where);
308 return FAILURE;
309 }
310
311 if (type_check (dim, n, BT_INTEGER) == FAILURE)
312 return FAILURE;
313
314 if (scalar_check (dim, n) == FAILURE)
315 return FAILURE;
316
317 if (nonoptional_check (dim, n) == FAILURE)
318 return FAILURE;
319
320 return SUCCESS;
321 }
322
323
324 /* If a DIM parameter is a constant, make sure that it is greater than
325 zero and less than or equal to the rank of the given array. If
326 allow_assumed is zero then dim must be less than the rank of the array
327 for assumed size arrays. */
328
329 static try
330 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
331 {
332 gfc_array_ref *ar;
333 int rank;
334
335 if (dim->expr_type != EXPR_CONSTANT || array->expr_type != EXPR_VARIABLE)
336 return SUCCESS;
337
338 ar = gfc_find_array_ref (array);
339 rank = array->rank;
340 if (ar->as->type == AS_ASSUMED_SIZE
341 && !allow_assumed
342 && ar->type != AR_ELEMENT
343 && ar->type != AR_SECTION)
344 rank--;
345
346 if (mpz_cmp_ui (dim->value.integer, 1) < 0
347 || mpz_cmp_ui (dim->value.integer, rank) > 0)
348 {
349 gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
350 "dimension index", gfc_current_intrinsic, &dim->where);
351
352 return FAILURE;
353 }
354
355 return SUCCESS;
356 }
357
358
359 /* Compare the size of a along dimension ai with the size of b along
360 dimension bi, returning 0 if they are known not to be identical,
361 and 1 if they are identical, or if this cannot be determined. */
362
363 static int
364 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
365 {
366 mpz_t a_size, b_size;
367 int ret;
368
369 gcc_assert (a->rank > ai);
370 gcc_assert (b->rank > bi);
371
372 ret = 1;
373
374 if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
375 {
376 if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
377 {
378 if (mpz_cmp (a_size, b_size) != 0)
379 ret = 0;
380
381 mpz_clear (b_size);
382 }
383 mpz_clear (a_size);
384 }
385 return ret;
386 }
387
388
389 /* Error return for transformational intrinsics not allowed in
390 initialization expressions. */
391
392 static try
393 non_init_transformational (void)
394 {
395 gfc_error ("transformational intrinsic '%s' at %L is not permitted "
396 "in an initialization expression", gfc_current_intrinsic,
397 gfc_current_intrinsic_where);
398 return FAILURE;
399 }
400
401 /***** Check functions *****/
402
403 /* Check subroutine suitable for intrinsics taking a real argument and
404 a kind argument for the result. */
405
406 static try
407 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
408 {
409 if (type_check (a, 0, BT_REAL) == FAILURE)
410 return FAILURE;
411 if (kind_check (kind, 1, type) == FAILURE)
412 return FAILURE;
413
414 return SUCCESS;
415 }
416
417
418 /* Check subroutine suitable for ceiling, floor and nint. */
419
420 try
421 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
422 {
423 return check_a_kind (a, kind, BT_INTEGER);
424 }
425
426
427 /* Check subroutine suitable for aint, anint. */
428
429 try
430 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
431 {
432 return check_a_kind (a, kind, BT_REAL);
433 }
434
435
436 try
437 gfc_check_abs (gfc_expr *a)
438 {
439 if (numeric_check (a, 0) == FAILURE)
440 return FAILURE;
441
442 return SUCCESS;
443 }
444
445
446 try
447 gfc_check_achar (gfc_expr *a)
448 {
449 if (type_check (a, 0, BT_INTEGER) == FAILURE)
450 return FAILURE;
451
452 return SUCCESS;
453 }
454
455
456 try
457 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
458 {
459 if (type_check (name, 0, BT_CHARACTER) == FAILURE
460 || scalar_check (name, 0) == FAILURE)
461 return FAILURE;
462
463 if (type_check (mode, 1, BT_CHARACTER) == FAILURE
464 || scalar_check (mode, 1) == FAILURE)
465 return FAILURE;
466
467 return SUCCESS;
468 }
469
470
471 try
472 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
473 {
474 if (logical_array_check (mask, 0) == FAILURE)
475 return FAILURE;
476
477 if (dim_check (dim, 1, 1) == FAILURE)
478 return FAILURE;
479
480 if (gfc_init_expr)
481 return non_init_transformational ();
482
483 return SUCCESS;
484 }
485
486
487 try
488 gfc_check_allocated (gfc_expr *array)
489 {
490 symbol_attribute attr;
491
492 if (variable_check (array, 0) == FAILURE)
493 return FAILURE;
494
495 if (array_check (array, 0) == FAILURE)
496 return FAILURE;
497
498 attr = gfc_variable_attr (array, NULL);
499 if (!attr.allocatable)
500 {
501 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
502 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
503 &array->where);
504 return FAILURE;
505 }
506
507 return SUCCESS;
508 }
509
510
511 /* Common check function where the first argument must be real or
512 integer and the second argument must be the same as the first. */
513
514 try
515 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
516 {
517 if (int_or_real_check (a, 0) == FAILURE)
518 return FAILURE;
519
520 if (a->ts.type != p->ts.type)
521 {
522 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
523 "have the same type", gfc_current_intrinsic_arg[0],
524 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
525 &p->where);
526 return FAILURE;
527 }
528
529 if (a->ts.kind != p->ts.kind)
530 {
531 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
532 &p->where) == FAILURE)
533 return FAILURE;
534 }
535
536 return SUCCESS;
537 }
538
539
540 try
541 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
542 {
543 symbol_attribute attr;
544 int i;
545 try t;
546 locus *where;
547
548 where = &pointer->where;
549
550 if (pointer->expr_type == EXPR_VARIABLE)
551 attr = gfc_variable_attr (pointer, NULL);
552 else if (pointer->expr_type == EXPR_FUNCTION)
553 attr = pointer->symtree->n.sym->attr;
554 else if (pointer->expr_type == EXPR_NULL)
555 goto null_arg;
556 else
557 gcc_assert (0); /* Pointer must be a variable or a function. */
558
559 if (!attr.pointer)
560 {
561 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
562 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
563 &pointer->where);
564 return FAILURE;
565 }
566
567 /* Target argument is optional. */
568 if (target == NULL)
569 return SUCCESS;
570
571 where = &target->where;
572 if (target->expr_type == EXPR_NULL)
573 goto null_arg;
574
575 if (target->expr_type == EXPR_VARIABLE)
576 attr = gfc_variable_attr (target, NULL);
577 else if (target->expr_type == EXPR_FUNCTION)
578 attr = target->symtree->n.sym->attr;
579 else
580 {
581 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
582 "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1],
583 gfc_current_intrinsic, &target->where);
584 return FAILURE;
585 }
586
587 if (!attr.pointer && !attr.target)
588 {
589 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
590 "or a TARGET", gfc_current_intrinsic_arg[1],
591 gfc_current_intrinsic, &target->where);
592 return FAILURE;
593 }
594
595 t = SUCCESS;
596 if (same_type_check (pointer, 0, target, 1) == FAILURE)
597 t = FAILURE;
598 if (rank_check (target, 0, pointer->rank) == FAILURE)
599 t = FAILURE;
600 if (target->rank > 0)
601 {
602 for (i = 0; i < target->rank; i++)
603 if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
604 {
605 gfc_error ("Array section with a vector subscript at %L shall not "
606 "be the target of a pointer",
607 &target->where);
608 t = FAILURE;
609 break;
610 }
611 }
612 return t;
613
614 null_arg:
615
616 gfc_error ("NULL pointer at %L is not permitted as actual argument "
617 "of '%s' intrinsic function", where, gfc_current_intrinsic);
618 return FAILURE;
619
620 }
621
622
623 try
624 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
625 {
626 if (type_check (y, 0, BT_REAL) == FAILURE)
627 return FAILURE;
628 if (same_type_check (y, 0, x, 1) == FAILURE)
629 return FAILURE;
630
631 return SUCCESS;
632 }
633
634
635 /* BESJN and BESYN functions. */
636
637 try
638 gfc_check_besn (gfc_expr *n, gfc_expr *x)
639 {
640 if (scalar_check (n, 0) == FAILURE)
641 return FAILURE;
642
643 if (type_check (n, 0, BT_INTEGER) == FAILURE)
644 return FAILURE;
645
646 if (scalar_check (x, 1) == FAILURE)
647 return FAILURE;
648
649 if (type_check (x, 1, BT_REAL) == FAILURE)
650 return FAILURE;
651
652 return SUCCESS;
653 }
654
655
656 try
657 gfc_check_btest (gfc_expr *i, gfc_expr *pos)
658 {
659 if (type_check (i, 0, BT_INTEGER) == FAILURE)
660 return FAILURE;
661 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
662 return FAILURE;
663
664 return SUCCESS;
665 }
666
667
668 try
669 gfc_check_char (gfc_expr *i, gfc_expr *kind)
670 {
671 if (type_check (i, 0, BT_INTEGER) == FAILURE)
672 return FAILURE;
673 if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
674 return FAILURE;
675
676 return SUCCESS;
677 }
678
679
680 try
681 gfc_check_chdir (gfc_expr *dir)
682 {
683 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
684 return FAILURE;
685
686 return SUCCESS;
687 }
688
689
690 try
691 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
692 {
693 if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
694 return FAILURE;
695
696 if (status == NULL)
697 return SUCCESS;
698
699 if (type_check (status, 1, BT_INTEGER) == FAILURE)
700 return FAILURE;
701
702 if (scalar_check (status, 1) == FAILURE)
703 return FAILURE;
704
705 return SUCCESS;
706 }
707
708
709 try
710 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
711 {
712 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
713 return FAILURE;
714
715 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
716 return FAILURE;
717
718 return SUCCESS;
719 }
720
721
722 try
723 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
724 {
725 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
726 return FAILURE;
727
728 if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
729 return FAILURE;
730
731 if (status == NULL)
732 return SUCCESS;
733
734 if (type_check (status, 2, BT_INTEGER) == FAILURE)
735 return FAILURE;
736
737 if (scalar_check (status, 2) == FAILURE)
738 return FAILURE;
739
740 return SUCCESS;
741 }
742
743
744 try
745 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
746 {
747 if (numeric_check (x, 0) == FAILURE)
748 return FAILURE;
749
750 if (y != NULL)
751 {
752 if (numeric_check (y, 1) == FAILURE)
753 return FAILURE;
754
755 if (x->ts.type == BT_COMPLEX)
756 {
757 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
758 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
759 gfc_current_intrinsic, &y->where);
760 return FAILURE;
761 }
762 }
763
764 if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
765 return FAILURE;
766
767 return SUCCESS;
768 }
769
770
771 try
772 gfc_check_complex (gfc_expr *x, gfc_expr *y)
773 {
774 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
775 {
776 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
777 "or REAL", gfc_current_intrinsic_arg[0],
778 gfc_current_intrinsic, &x->where);
779 return FAILURE;
780 }
781 if (scalar_check (x, 0) == FAILURE)
782 return FAILURE;
783
784 if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL)
785 {
786 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
787 "or REAL", gfc_current_intrinsic_arg[1],
788 gfc_current_intrinsic, &y->where);
789 return FAILURE;
790 }
791 if (scalar_check (y, 1) == FAILURE)
792 return FAILURE;
793
794 return SUCCESS;
795 }
796
797
798 try
799 gfc_check_count (gfc_expr *mask, gfc_expr *dim)
800 {
801 if (logical_array_check (mask, 0) == FAILURE)
802 return FAILURE;
803 if (dim_check (dim, 1, 1) == FAILURE)
804 return FAILURE;
805
806 if (gfc_init_expr)
807 return non_init_transformational ();
808
809 return SUCCESS;
810 }
811
812
813 try
814 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
815 {
816 if (array_check (array, 0) == FAILURE)
817 return FAILURE;
818
819 if (array->rank == 1)
820 {
821 if (scalar_check (shift, 1) == FAILURE)
822 return FAILURE;
823 }
824 else
825 {
826 /* TODO: more requirements on shift parameter. */
827 }
828
829 if (dim_check (dim, 2, 1) == FAILURE)
830 return FAILURE;
831
832 if (gfc_init_expr)
833 return non_init_transformational ();
834
835 return SUCCESS;
836 }
837
838
839 try
840 gfc_check_ctime (gfc_expr *time)
841 {
842 if (scalar_check (time, 0) == FAILURE)
843 return FAILURE;
844
845 if (type_check (time, 0, BT_INTEGER) == FAILURE)
846 return FAILURE;
847
848 return SUCCESS;
849 }
850
851
852 try
853 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
854 {
855 if (numeric_check (x, 0) == FAILURE)
856 return FAILURE;
857
858 if (y != NULL)
859 {
860 if (numeric_check (y, 1) == FAILURE)
861 return FAILURE;
862
863 if (x->ts.type == BT_COMPLEX)
864 {
865 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
866 "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1],
867 gfc_current_intrinsic, &y->where);
868 return FAILURE;
869 }
870 }
871
872 return SUCCESS;
873 }
874
875
876 try
877 gfc_check_dble (gfc_expr *x)
878 {
879 if (numeric_check (x, 0) == FAILURE)
880 return FAILURE;
881
882 return SUCCESS;
883 }
884
885
886 try
887 gfc_check_digits (gfc_expr *x)
888 {
889 if (int_or_real_check (x, 0) == FAILURE)
890 return FAILURE;
891
892 return SUCCESS;
893 }
894
895
896 try
897 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
898 {
899 switch (vector_a->ts.type)
900 {
901 case BT_LOGICAL:
902 if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
903 return FAILURE;
904 break;
905
906 case BT_INTEGER:
907 case BT_REAL:
908 case BT_COMPLEX:
909 if (numeric_check (vector_b, 1) == FAILURE)
910 return FAILURE;
911 break;
912
913 default:
914 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
915 "or LOGICAL", gfc_current_intrinsic_arg[0],
916 gfc_current_intrinsic, &vector_a->where);
917 return FAILURE;
918 }
919
920 if (rank_check (vector_a, 0, 1) == FAILURE)
921 return FAILURE;
922
923 if (rank_check (vector_b, 1, 1) == FAILURE)
924 return FAILURE;
925
926 if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
927 {
928 gfc_error ("different shape for arguments '%s' and '%s' at %L for "
929 "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0],
930 gfc_current_intrinsic_arg[1], &vector_a->where);
931 return FAILURE;
932 }
933
934 if (gfc_init_expr)
935 return non_init_transformational ();
936
937 return SUCCESS;
938 }
939
940
941 try
942 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
943 gfc_expr *dim)
944 {
945 if (array_check (array, 0) == FAILURE)
946 return FAILURE;
947
948 if (type_check (shift, 1, BT_INTEGER) == FAILURE)
949 return FAILURE;
950
951 if (array->rank == 1)
952 {
953 if (scalar_check (shift, 2) == FAILURE)
954 return FAILURE;
955 }
956 else
957 {
958 /* TODO: more weird restrictions on shift. */
959 }
960
961 if (boundary != NULL)
962 {
963 if (same_type_check (array, 0, boundary, 2) == FAILURE)
964 return FAILURE;
965
966 /* TODO: more restrictions on boundary. */
967 }
968
969 if (dim_check (dim, 1, 1) == FAILURE)
970 return FAILURE;
971
972 if (gfc_init_expr)
973 return non_init_transformational ();
974
975 return SUCCESS;
976 }
977
978
979 /* A single complex argument. */
980
981 try
982 gfc_check_fn_c (gfc_expr *a)
983 {
984 if (type_check (a, 0, BT_COMPLEX) == FAILURE)
985 return FAILURE;
986
987 return SUCCESS;
988 }
989
990
991 /* A single real argument. */
992
993 try
994 gfc_check_fn_r (gfc_expr *a)
995 {
996 if (type_check (a, 0, BT_REAL) == FAILURE)
997 return FAILURE;
998
999 return SUCCESS;
1000 }
1001
1002
1003 /* A single real or complex argument. */
1004
1005 try
1006 gfc_check_fn_rc (gfc_expr *a)
1007 {
1008 if (real_or_complex_check (a, 0) == FAILURE)
1009 return FAILURE;
1010
1011 return SUCCESS;
1012 }
1013
1014
1015 try
1016 gfc_check_fnum (gfc_expr *unit)
1017 {
1018 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1019 return FAILURE;
1020
1021 if (scalar_check (unit, 0) == FAILURE)
1022 return FAILURE;
1023
1024 return SUCCESS;
1025 }
1026
1027
1028 /* This is used for the g77 one-argument Bessel functions, and the
1029 error function. */
1030
1031 try
1032 gfc_check_g77_math1 (gfc_expr *x)
1033 {
1034 if (scalar_check (x, 0) == FAILURE)
1035 return FAILURE;
1036
1037 if (type_check (x, 0, BT_REAL) == FAILURE)
1038 return FAILURE;
1039
1040 return SUCCESS;
1041 }
1042
1043
1044 try
1045 gfc_check_huge (gfc_expr *x)
1046 {
1047 if (int_or_real_check (x, 0) == FAILURE)
1048 return FAILURE;
1049
1050 return SUCCESS;
1051 }
1052
1053
1054 /* Check that the single argument is an integer. */
1055
1056 try
1057 gfc_check_i (gfc_expr *i)
1058 {
1059 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1060 return FAILURE;
1061
1062 return SUCCESS;
1063 }
1064
1065
1066 try
1067 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1068 {
1069 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1070 return FAILURE;
1071
1072 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1073 return FAILURE;
1074
1075 if (i->ts.kind != j->ts.kind)
1076 {
1077 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1078 &i->where) == FAILURE)
1079 return FAILURE;
1080 }
1081
1082 return SUCCESS;
1083 }
1084
1085
1086 try
1087 gfc_check_ibclr (gfc_expr *i, gfc_expr *pos)
1088 {
1089 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1090 return FAILURE;
1091
1092 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1093 return FAILURE;
1094
1095 return SUCCESS;
1096 }
1097
1098
1099 try
1100 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1101 {
1102 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1103 return FAILURE;
1104
1105 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1106 return FAILURE;
1107
1108 if (type_check (len, 2, BT_INTEGER) == FAILURE)
1109 return FAILURE;
1110
1111 return SUCCESS;
1112 }
1113
1114
1115 try
1116 gfc_check_ibset (gfc_expr *i, gfc_expr *pos)
1117 {
1118 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1119 return FAILURE;
1120
1121 if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1122 return FAILURE;
1123
1124 return SUCCESS;
1125 }
1126
1127
1128 try
1129 gfc_check_ichar_iachar (gfc_expr *c)
1130 {
1131 int i;
1132
1133 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1134 return FAILURE;
1135
1136 if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1137 {
1138 gfc_expr *start;
1139 gfc_expr *end;
1140 gfc_ref *ref;
1141
1142 /* Substring references don't have the charlength set. */
1143 ref = c->ref;
1144 while (ref && ref->type != REF_SUBSTRING)
1145 ref = ref->next;
1146
1147 gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1148
1149 if (!ref)
1150 {
1151 /* Check that the argument is length one. Non-constant lengths
1152 can't be checked here, so assume they are ok. */
1153 if (c->ts.cl && c->ts.cl->length)
1154 {
1155 /* If we already have a length for this expression then use it. */
1156 if (c->ts.cl->length->expr_type != EXPR_CONSTANT)
1157 return SUCCESS;
1158 i = mpz_get_si (c->ts.cl->length->value.integer);
1159 }
1160 else
1161 return SUCCESS;
1162 }
1163 else
1164 {
1165 start = ref->u.ss.start;
1166 end = ref->u.ss.end;
1167
1168 gcc_assert (start);
1169 if (end == NULL || end->expr_type != EXPR_CONSTANT
1170 || start->expr_type != EXPR_CONSTANT)
1171 return SUCCESS;
1172
1173 i = mpz_get_si (end->value.integer) + 1
1174 - mpz_get_si (start->value.integer);
1175 }
1176 }
1177 else
1178 return SUCCESS;
1179
1180 if (i != 1)
1181 {
1182 gfc_error ("Argument of %s at %L must be of length one",
1183 gfc_current_intrinsic, &c->where);
1184 return FAILURE;
1185 }
1186
1187 return SUCCESS;
1188 }
1189
1190
1191 try
1192 gfc_check_idnint (gfc_expr *a)
1193 {
1194 if (double_check (a, 0) == FAILURE)
1195 return FAILURE;
1196
1197 return SUCCESS;
1198 }
1199
1200
1201 try
1202 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1203 {
1204 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1205 return FAILURE;
1206
1207 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1208 return FAILURE;
1209
1210 if (i->ts.kind != j->ts.kind)
1211 {
1212 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1213 &i->where) == FAILURE)
1214 return FAILURE;
1215 }
1216
1217 return SUCCESS;
1218 }
1219
1220
1221 try
1222 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back)
1223 {
1224 if (type_check (string, 0, BT_CHARACTER) == FAILURE
1225 || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1226 return FAILURE;
1227
1228
1229 if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1230 return FAILURE;
1231
1232 if (string->ts.kind != substring->ts.kind)
1233 {
1234 gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1235 "kind as '%s'", gfc_current_intrinsic_arg[1],
1236 gfc_current_intrinsic, &substring->where,
1237 gfc_current_intrinsic_arg[0]);
1238 return FAILURE;
1239 }
1240
1241 return SUCCESS;
1242 }
1243
1244
1245 try
1246 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1247 {
1248 if (numeric_check (x, 0) == FAILURE)
1249 return FAILURE;
1250
1251 if (kind != NULL)
1252 {
1253 if (type_check (kind, 1, BT_INTEGER) == FAILURE)
1254 return FAILURE;
1255
1256 if (scalar_check (kind, 1) == FAILURE)
1257 return FAILURE;
1258 }
1259
1260 return SUCCESS;
1261 }
1262
1263
1264 try
1265 gfc_check_intconv (gfc_expr *x)
1266 {
1267 if (numeric_check (x, 0) == FAILURE)
1268 return FAILURE;
1269
1270 return SUCCESS;
1271 }
1272
1273
1274 try
1275 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1276 {
1277 if (type_check (i, 0, BT_INTEGER) == FAILURE)
1278 return FAILURE;
1279
1280 if (type_check (j, 1, BT_INTEGER) == FAILURE)
1281 return FAILURE;
1282
1283 if (i->ts.kind != j->ts.kind)
1284 {
1285 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1286 &i->where) == FAILURE)
1287 return FAILURE;
1288 }
1289
1290 return SUCCESS;
1291 }
1292
1293
1294 try
1295 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
1296 {
1297 if (type_check (i, 0, BT_INTEGER) == FAILURE
1298 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1299 return FAILURE;
1300
1301 return SUCCESS;
1302 }
1303
1304
1305 try
1306 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
1307 {
1308 if (type_check (i, 0, BT_INTEGER) == FAILURE
1309 || type_check (shift, 1, BT_INTEGER) == FAILURE)
1310 return FAILURE;
1311
1312 if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE)
1313 return FAILURE;
1314
1315 return SUCCESS;
1316 }
1317
1318
1319 try
1320 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
1321 {
1322 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1323 return FAILURE;
1324
1325 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1326 return FAILURE;
1327
1328 return SUCCESS;
1329 }
1330
1331
1332 try
1333 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
1334 {
1335 if (type_check (pid, 0, BT_INTEGER) == FAILURE)
1336 return FAILURE;
1337
1338 if (scalar_check (pid, 0) == FAILURE)
1339 return FAILURE;
1340
1341 if (type_check (sig, 1, BT_INTEGER) == FAILURE)
1342 return FAILURE;
1343
1344 if (scalar_check (sig, 1) == FAILURE)
1345 return FAILURE;
1346
1347 if (status == NULL)
1348 return SUCCESS;
1349
1350 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1351 return FAILURE;
1352
1353 if (scalar_check (status, 2) == FAILURE)
1354 return FAILURE;
1355
1356 return SUCCESS;
1357 }
1358
1359
1360 try
1361 gfc_check_kind (gfc_expr *x)
1362 {
1363 if (x->ts.type == BT_DERIVED)
1364 {
1365 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
1366 "non-derived type", gfc_current_intrinsic_arg[0],
1367 gfc_current_intrinsic, &x->where);
1368 return FAILURE;
1369 }
1370
1371 return SUCCESS;
1372 }
1373
1374
1375 try
1376 gfc_check_lbound (gfc_expr *array, gfc_expr *dim)
1377 {
1378 if (array_check (array, 0) == FAILURE)
1379 return FAILURE;
1380
1381 if (dim != NULL)
1382 {
1383 if (dim_check (dim, 1, 1) == FAILURE)
1384 return FAILURE;
1385
1386 if (dim_rank_check (dim, array, 1) == FAILURE)
1387 return FAILURE;
1388 }
1389 return SUCCESS;
1390 }
1391
1392
1393 try
1394 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
1395 {
1396 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1397 return FAILURE;
1398
1399 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1400 return FAILURE;
1401
1402 return SUCCESS;
1403 }
1404
1405
1406 try
1407 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1408 {
1409 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1410 return FAILURE;
1411
1412 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1413 return FAILURE;
1414
1415 if (status == NULL)
1416 return SUCCESS;
1417
1418 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1419 return FAILURE;
1420
1421 if (scalar_check (status, 2) == FAILURE)
1422 return FAILURE;
1423
1424 return SUCCESS;
1425 }
1426
1427
1428 try
1429 gfc_check_loc (gfc_expr *expr)
1430 {
1431 return variable_check (expr, 0);
1432 }
1433
1434
1435 try
1436 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
1437 {
1438 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1439 return FAILURE;
1440
1441 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1442 return FAILURE;
1443
1444 return SUCCESS;
1445 }
1446
1447
1448 try
1449 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
1450 {
1451 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
1452 return FAILURE;
1453
1454 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
1455 return FAILURE;
1456
1457 if (status == NULL)
1458 return SUCCESS;
1459
1460 if (type_check (status, 2, BT_INTEGER) == FAILURE)
1461 return FAILURE;
1462
1463 if (scalar_check (status, 2) == FAILURE)
1464 return FAILURE;
1465
1466 return SUCCESS;
1467 }
1468
1469
1470 try
1471 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
1472 {
1473 if (type_check (a, 0, BT_LOGICAL) == FAILURE)
1474 return FAILURE;
1475 if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
1476 return FAILURE;
1477
1478 return SUCCESS;
1479 }
1480
1481
1482 /* Min/max family. */
1483
1484 static try
1485 min_max_args (gfc_actual_arglist *arg)
1486 {
1487 if (arg == NULL || arg->next == NULL)
1488 {
1489 gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
1490 gfc_current_intrinsic, gfc_current_intrinsic_where);
1491 return FAILURE;
1492 }
1493
1494 return SUCCESS;
1495 }
1496
1497
1498 static try
1499 check_rest (bt type, int kind, gfc_actual_arglist *arg)
1500 {
1501 gfc_expr *x;
1502 int n;
1503
1504 if (min_max_args (arg) == FAILURE)
1505 return FAILURE;
1506
1507 n = 1;
1508
1509 for (; arg; arg = arg->next, n++)
1510 {
1511 x = arg->expr;
1512 if (x->ts.type != type || x->ts.kind != kind)
1513 {
1514 if (x->ts.type == type)
1515 {
1516 if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
1517 "kinds at %L", &x->where) == FAILURE)
1518 return FAILURE;
1519 }
1520 else
1521 {
1522 gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
1523 "%s(%d)", n, gfc_current_intrinsic, &x->where,
1524 gfc_basic_typename (type), kind);
1525 return FAILURE;
1526 }
1527 }
1528 }
1529
1530 return SUCCESS;
1531 }
1532
1533
1534 try
1535 gfc_check_min_max (gfc_actual_arglist *arg)
1536 {
1537 gfc_expr *x;
1538
1539 if (min_max_args (arg) == FAILURE)
1540 return FAILURE;
1541
1542 x = arg->expr;
1543
1544 if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
1545 {
1546 gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER "
1547 "or REAL", gfc_current_intrinsic, &x->where);
1548 return FAILURE;
1549 }
1550
1551 return check_rest (x->ts.type, x->ts.kind, arg);
1552 }
1553
1554
1555 try
1556 gfc_check_min_max_integer (gfc_actual_arglist *arg)
1557 {
1558 return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
1559 }
1560
1561
1562 try
1563 gfc_check_min_max_real (gfc_actual_arglist *arg)
1564 {
1565 return check_rest (BT_REAL, gfc_default_real_kind, arg);
1566 }
1567
1568
1569 try
1570 gfc_check_min_max_double (gfc_actual_arglist *arg)
1571 {
1572 return check_rest (BT_REAL, gfc_default_double_kind, arg);
1573 }
1574
1575
1576 /* End of min/max family. */
1577
1578 try
1579 gfc_check_malloc (gfc_expr *size)
1580 {
1581 if (type_check (size, 0, BT_INTEGER) == FAILURE)
1582 return FAILURE;
1583
1584 if (scalar_check (size, 0) == FAILURE)
1585 return FAILURE;
1586
1587 return SUCCESS;
1588 }
1589
1590
1591 try
1592 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
1593 {
1594 if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
1595 {
1596 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1597 "or LOGICAL", gfc_current_intrinsic_arg[0],
1598 gfc_current_intrinsic, &matrix_a->where);
1599 return FAILURE;
1600 }
1601
1602 if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
1603 {
1604 gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1605 "or LOGICAL", gfc_current_intrinsic_arg[1],
1606 gfc_current_intrinsic, &matrix_b->where);
1607 return FAILURE;
1608 }
1609
1610 switch (matrix_a->rank)
1611 {
1612 case 1:
1613 if (rank_check (matrix_b, 1, 2) == FAILURE)
1614 return FAILURE;
1615 /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
1616 if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
1617 {
1618 gfc_error ("different shape on dimension 1 for arguments '%s' "
1619 "and '%s' at %L for intrinsic matmul",
1620 gfc_current_intrinsic_arg[0],
1621 gfc_current_intrinsic_arg[1], &matrix_a->where);
1622 return FAILURE;
1623 }
1624 break;
1625
1626 case 2:
1627 if (matrix_b->rank != 2)
1628 {
1629 if (rank_check (matrix_b, 1, 1) == FAILURE)
1630 return FAILURE;
1631 }
1632 /* matrix_b has rank 1 or 2 here. Common check for the cases
1633 - matrix_a has shape (n,m) and matrix_b has shape (m, k)
1634 - matrix_a has shape (n,m) and matrix_b has shape (m). */
1635 if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
1636 {
1637 gfc_error ("different shape on dimension 2 for argument '%s' and "
1638 "dimension 1 for argument '%s' at %L for intrinsic "
1639 "matmul", gfc_current_intrinsic_arg[0],
1640 gfc_current_intrinsic_arg[1], &matrix_a->where);
1641 return FAILURE;
1642 }
1643 break;
1644
1645 default:
1646 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
1647 "1 or 2", gfc_current_intrinsic_arg[0],
1648 gfc_current_intrinsic, &matrix_a->where);
1649 return FAILURE;
1650 }
1651
1652 if (gfc_init_expr)
1653 return non_init_transformational ();
1654
1655 return SUCCESS;
1656 }
1657
1658
1659 /* Whoever came up with this interface was probably on something.
1660 The possibilities for the occupation of the second and third
1661 parameters are:
1662
1663 Arg #2 Arg #3
1664 NULL NULL
1665 DIM NULL
1666 MASK NULL
1667 NULL MASK minloc(array, mask=m)
1668 DIM MASK
1669
1670 I.e. in the case of minloc(array,mask), mask will be in the second
1671 position of the argument list and we'll have to fix that up. */
1672
1673 try
1674 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
1675 {
1676 gfc_expr *a, *m, *d;
1677
1678 a = ap->expr;
1679 if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
1680 return FAILURE;
1681
1682 d = ap->next->expr;
1683 m = ap->next->next->expr;
1684
1685 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1686 && ap->next->name == NULL)
1687 {
1688 m = d;
1689 d = NULL;
1690 ap->next->expr = NULL;
1691 ap->next->next->expr = m;
1692 }
1693
1694 if (dim_check (d, 1, 1) == FAILURE)
1695 return FAILURE;
1696
1697 if (d && dim_rank_check (d, a, 0) == FAILURE)
1698 return FAILURE;
1699
1700 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1701 return FAILURE;
1702
1703 if (m != NULL)
1704 {
1705 char buffer[80];
1706 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1707 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1708 gfc_current_intrinsic);
1709 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1710 return FAILURE;
1711 }
1712
1713 if (gfc_init_expr)
1714 return non_init_transformational ();
1715
1716 return SUCCESS;
1717 }
1718
1719
1720 /* Similar to minloc/maxloc, the argument list might need to be
1721 reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
1722 difference is that MINLOC/MAXLOC take an additional KIND argument.
1723 The possibilities are:
1724
1725 Arg #2 Arg #3
1726 NULL NULL
1727 DIM NULL
1728 MASK NULL
1729 NULL MASK minval(array, mask=m)
1730 DIM MASK
1731
1732 I.e. in the case of minval(array,mask), mask will be in the second
1733 position of the argument list and we'll have to fix that up. */
1734
1735 static try
1736 check_reduction (gfc_actual_arglist *ap)
1737 {
1738 gfc_expr *a, *m, *d;
1739
1740 a = ap->expr;
1741 d = ap->next->expr;
1742 m = ap->next->next->expr;
1743
1744 if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
1745 && ap->next->name == NULL)
1746 {
1747 m = d;
1748 d = NULL;
1749 ap->next->expr = NULL;
1750 ap->next->next->expr = m;
1751 }
1752
1753 if (dim_check (d, 1, 1) == FAILURE)
1754 return FAILURE;
1755
1756 if (d && dim_rank_check (d, a, 0) == FAILURE)
1757 return FAILURE;
1758
1759 if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
1760 return FAILURE;
1761
1762 if (m != NULL)
1763 {
1764 char buffer[80];
1765 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s",
1766 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1767 gfc_current_intrinsic);
1768 if (gfc_check_conformance (buffer, a, m) == FAILURE)
1769 return FAILURE;
1770 }
1771
1772 return SUCCESS;
1773 }
1774
1775
1776 try
1777 gfc_check_minval_maxval (gfc_actual_arglist *ap)
1778 {
1779 if (int_or_real_check (ap->expr, 0) == FAILURE
1780 || array_check (ap->expr, 0) == FAILURE)
1781 return FAILURE;
1782
1783 if (gfc_init_expr)
1784 return non_init_transformational ();
1785
1786 return check_reduction (ap);
1787 }
1788
1789
1790 try
1791 gfc_check_product_sum (gfc_actual_arglist *ap)
1792 {
1793 if (numeric_check (ap->expr, 0) == FAILURE
1794 || array_check (ap->expr, 0) == FAILURE)
1795 return FAILURE;
1796
1797 if (gfc_init_expr)
1798 return non_init_transformational ();
1799
1800 return check_reduction (ap);
1801 }
1802
1803
1804 try
1805 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
1806 {
1807 char buffer[80];
1808
1809 if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
1810 return FAILURE;
1811
1812 if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
1813 return FAILURE;
1814
1815 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
1816 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1817 gfc_current_intrinsic);
1818 if (gfc_check_conformance (buffer, tsource, fsource) == FAILURE)
1819 return FAILURE;
1820
1821 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
1822 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2],
1823 gfc_current_intrinsic);
1824 if (gfc_check_conformance (buffer, tsource, mask) == FAILURE)
1825 return FAILURE;
1826
1827 return SUCCESS;
1828 }
1829
1830 try
1831 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
1832 {
1833 symbol_attribute attr;
1834
1835 if (variable_check (from, 0) == FAILURE)
1836 return FAILURE;
1837
1838 if (array_check (from, 0) == FAILURE)
1839 return FAILURE;
1840
1841 attr = gfc_variable_attr (from, NULL);
1842 if (!attr.allocatable)
1843 {
1844 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1845 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1846 &from->where);
1847 return FAILURE;
1848 }
1849
1850 if (variable_check (to, 0) == FAILURE)
1851 return FAILURE;
1852
1853 if (array_check (to, 0) == FAILURE)
1854 return FAILURE;
1855
1856 attr = gfc_variable_attr (to, NULL);
1857 if (!attr.allocatable)
1858 {
1859 gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
1860 gfc_current_intrinsic_arg[0], gfc_current_intrinsic,
1861 &to->where);
1862 return FAILURE;
1863 }
1864
1865 if (same_type_check (from, 0, to, 1) == FAILURE)
1866 return FAILURE;
1867
1868 if (to->rank != from->rank)
1869 {
1870 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1871 "have the same rank %d/%d", gfc_current_intrinsic_arg[0],
1872 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1873 &to->where, from->rank, to->rank);
1874 return FAILURE;
1875 }
1876
1877 if (to->ts.kind != from->ts.kind)
1878 {
1879 gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
1880 "be of the same kind %d/%d", gfc_current_intrinsic_arg[0],
1881 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
1882 &to->where, from->ts.kind, to->ts.kind);
1883 return FAILURE;
1884 }
1885
1886 return SUCCESS;
1887 }
1888
1889
1890 try
1891 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
1892 {
1893 if (type_check (x, 0, BT_REAL) == FAILURE)
1894 return FAILURE;
1895
1896 if (type_check (s, 1, BT_REAL) == FAILURE)
1897 return FAILURE;
1898
1899 return SUCCESS;
1900 }
1901
1902
1903 try
1904 gfc_check_new_line (gfc_expr *a)
1905 {
1906 if (type_check (a, 0, BT_CHARACTER) == FAILURE)
1907 return FAILURE;
1908
1909 return SUCCESS;
1910 }
1911
1912
1913 try
1914 gfc_check_null (gfc_expr *mold)
1915 {
1916 symbol_attribute attr;
1917
1918 if (mold == NULL)
1919 return SUCCESS;
1920
1921 if (variable_check (mold, 0) == FAILURE)
1922 return FAILURE;
1923
1924 attr = gfc_variable_attr (mold, NULL);
1925
1926 if (!attr.pointer)
1927 {
1928 gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
1929 gfc_current_intrinsic_arg[0],
1930 gfc_current_intrinsic, &mold->where);
1931 return FAILURE;
1932 }
1933
1934 return SUCCESS;
1935 }
1936
1937
1938 try
1939 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
1940 {
1941 char buffer[80];
1942
1943 if (array_check (array, 0) == FAILURE)
1944 return FAILURE;
1945
1946 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
1947 return FAILURE;
1948
1949 snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'",
1950 gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1],
1951 gfc_current_intrinsic);
1952 if (gfc_check_conformance (buffer, array, mask) == FAILURE)
1953 return FAILURE;
1954
1955 if (vector != NULL)
1956 {
1957 if (same_type_check (array, 0, vector, 2) == FAILURE)
1958 return FAILURE;
1959
1960 if (rank_check (vector, 2, 1) == FAILURE)
1961 return FAILURE;
1962
1963 /* TODO: More constraints here. */
1964 }
1965
1966 if (gfc_init_expr)
1967 return non_init_transformational ();
1968
1969 return SUCCESS;
1970 }
1971
1972
1973 try
1974 gfc_check_precision (gfc_expr *x)
1975 {
1976 if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX)
1977 {
1978 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type "
1979 "REAL or COMPLEX", gfc_current_intrinsic_arg[0],
1980 gfc_current_intrinsic, &x->where);
1981 return FAILURE;
1982 }
1983
1984 return SUCCESS;
1985 }
1986
1987
1988 try
1989 gfc_check_present (gfc_expr *a)
1990 {
1991 gfc_symbol *sym;
1992
1993 if (variable_check (a, 0) == FAILURE)
1994 return FAILURE;
1995
1996 sym = a->symtree->n.sym;
1997 if (!sym->attr.dummy)
1998 {
1999 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2000 "dummy variable", gfc_current_intrinsic_arg[0],
2001 gfc_current_intrinsic, &a->where);
2002 return FAILURE;
2003 }
2004
2005 if (!sym->attr.optional)
2006 {
2007 gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2008 "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0],
2009 gfc_current_intrinsic, &a->where);
2010 return FAILURE;
2011 }
2012
2013 /* 13.14.82 PRESENT(A)
2014 ......
2015 Argument. A shall be the name of an optional dummy argument that is
2016 accessible in the subprogram in which the PRESENT function reference
2017 appears... */
2018
2019 if (a->ref != NULL
2020 && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
2021 && a->ref->u.ar.type == AR_FULL))
2022 {
2023 gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
2024 "subobject of '%s'", gfc_current_intrinsic_arg[0],
2025 gfc_current_intrinsic, &a->where, sym->name);
2026 return FAILURE;
2027 }
2028
2029 return SUCCESS;
2030 }
2031
2032
2033 try
2034 gfc_check_radix (gfc_expr *x)
2035 {
2036 if (int_or_real_check (x, 0) == FAILURE)
2037 return FAILURE;
2038
2039 return SUCCESS;
2040 }
2041
2042
2043 try
2044 gfc_check_range (gfc_expr *x)
2045 {
2046 if (numeric_check (x, 0) == FAILURE)
2047 return FAILURE;
2048
2049 return SUCCESS;
2050 }
2051
2052
2053 /* real, float, sngl. */
2054 try
2055 gfc_check_real (gfc_expr *a, gfc_expr *kind)
2056 {
2057 if (numeric_check (a, 0) == FAILURE)
2058 return FAILURE;
2059
2060 if (kind_check (kind, 1, BT_REAL) == FAILURE)
2061 return FAILURE;
2062
2063 return SUCCESS;
2064 }
2065
2066
2067 try
2068 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
2069 {
2070 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2071 return FAILURE;
2072
2073 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2074 return FAILURE;
2075
2076 return SUCCESS;
2077 }
2078
2079
2080 try
2081 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2082 {
2083 if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2084 return FAILURE;
2085
2086 if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2087 return FAILURE;
2088
2089 if (status == NULL)
2090 return SUCCESS;
2091
2092 if (type_check (status, 2, BT_INTEGER) == FAILURE)
2093 return FAILURE;
2094
2095 if (scalar_check (status, 2) == FAILURE)
2096 return FAILURE;
2097
2098 return SUCCESS;
2099 }
2100
2101
2102 try
2103 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
2104 {
2105 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2106 return FAILURE;
2107
2108 if (scalar_check (x, 0) == FAILURE)
2109 return FAILURE;
2110
2111 if (type_check (y, 0, BT_INTEGER) == FAILURE)
2112 return FAILURE;
2113
2114 if (scalar_check (y, 1) == FAILURE)
2115 return FAILURE;
2116
2117 return SUCCESS;
2118 }
2119
2120
2121 try
2122 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
2123 gfc_expr *pad, gfc_expr *order)
2124 {
2125 mpz_t size;
2126 mpz_t nelems;
2127 int m;
2128
2129 if (array_check (source, 0) == FAILURE)
2130 return FAILURE;
2131
2132 if (rank_check (shape, 1, 1) == FAILURE)
2133 return FAILURE;
2134
2135 if (type_check (shape, 1, BT_INTEGER) == FAILURE)
2136 return FAILURE;
2137
2138 if (gfc_array_size (shape, &size) != SUCCESS)
2139 {
2140 gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
2141 "array of constant size", &shape->where);
2142 return FAILURE;
2143 }
2144
2145 m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS);
2146 mpz_clear (size);
2147
2148 if (m > 0)
2149 {
2150 gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
2151 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
2152 return FAILURE;
2153 }
2154
2155 if (pad != NULL)
2156 {
2157 if (same_type_check (source, 0, pad, 2) == FAILURE)
2158 return FAILURE;
2159 if (array_check (pad, 2) == FAILURE)
2160 return FAILURE;
2161 }
2162
2163 if (order != NULL && array_check (order, 3) == FAILURE)
2164 return FAILURE;
2165
2166 if (pad == NULL && shape->expr_type == EXPR_ARRAY
2167 && gfc_is_constant_expr (shape)
2168 && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
2169 && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
2170 {
2171 /* Check the match in size between source and destination. */
2172 if (gfc_array_size (source, &nelems) == SUCCESS)
2173 {
2174 gfc_constructor *c;
2175 bool test;
2176
2177 c = shape->value.constructor;
2178 mpz_init_set_ui (size, 1);
2179 for (; c; c = c->next)
2180 mpz_mul (size, size, c->expr->value.integer);
2181
2182 test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
2183 mpz_clear (nelems);
2184 mpz_clear (size);
2185
2186 if (test)
2187 {
2188 gfc_error ("Without padding, there are not enough elements "
2189 "in the intrinsic RESHAPE source at %L to match "
2190 "the shape", &source->where);
2191 return FAILURE;
2192 }
2193 }
2194 }
2195
2196 return SUCCESS;
2197 }
2198
2199
2200 try
2201 gfc_check_scale (gfc_expr *x, gfc_expr *i)
2202 {
2203 if (type_check (x, 0, BT_REAL) == FAILURE)
2204 return FAILURE;
2205
2206 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2207 return FAILURE;
2208
2209 return SUCCESS;
2210 }
2211
2212
2213 try
2214 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z)
2215 {
2216 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2217 return FAILURE;
2218
2219 if (type_check (y, 1, BT_CHARACTER) == FAILURE)
2220 return FAILURE;
2221
2222 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2223 return FAILURE;
2224
2225 if (same_type_check (x, 0, y, 1) == FAILURE)
2226 return FAILURE;
2227
2228 return SUCCESS;
2229 }
2230
2231
2232 try
2233 gfc_check_secnds (gfc_expr *r)
2234 {
2235 if (type_check (r, 0, BT_REAL) == FAILURE)
2236 return FAILURE;
2237
2238 if (kind_value_check (r, 0, 4) == FAILURE)
2239 return FAILURE;
2240
2241 if (scalar_check (r, 0) == FAILURE)
2242 return FAILURE;
2243
2244 return SUCCESS;
2245 }
2246
2247
2248 try
2249 gfc_check_selected_int_kind (gfc_expr *r)
2250 {
2251 if (type_check (r, 0, BT_INTEGER) == FAILURE)
2252 return FAILURE;
2253
2254 if (scalar_check (r, 0) == FAILURE)
2255 return FAILURE;
2256
2257 return SUCCESS;
2258 }
2259
2260
2261 try
2262 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r)
2263 {
2264 if (p == NULL && r == NULL)
2265 {
2266 gfc_error ("Missing arguments to %s intrinsic at %L",
2267 gfc_current_intrinsic, gfc_current_intrinsic_where);
2268
2269 return FAILURE;
2270 }
2271
2272 if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE)
2273 return FAILURE;
2274
2275 if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE)
2276 return FAILURE;
2277
2278 return SUCCESS;
2279 }
2280
2281
2282 try
2283 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
2284 {
2285 if (type_check (x, 0, BT_REAL) == FAILURE)
2286 return FAILURE;
2287
2288 if (type_check (i, 1, BT_INTEGER) == FAILURE)
2289 return FAILURE;
2290
2291 return SUCCESS;
2292 }
2293
2294
2295 try
2296 gfc_check_shape (gfc_expr *source)
2297 {
2298 gfc_array_ref *ar;
2299
2300 if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
2301 return SUCCESS;
2302
2303 ar = gfc_find_array_ref (source);
2304
2305 if (ar->as && ar->as->type == AS_ASSUMED_SIZE)
2306 {
2307 gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
2308 "an assumed size array", &source->where);
2309 return FAILURE;
2310 }
2311
2312 return SUCCESS;
2313 }
2314
2315
2316 try
2317 gfc_check_sign (gfc_expr *a, gfc_expr *b)
2318 {
2319 if (int_or_real_check (a, 0) == FAILURE)
2320 return FAILURE;
2321
2322 if (same_type_check (a, 0, b, 1) == FAILURE)
2323 return FAILURE;
2324
2325 return SUCCESS;
2326 }
2327
2328
2329 try
2330 gfc_check_size (gfc_expr *array, gfc_expr *dim)
2331 {
2332 if (array_check (array, 0) == FAILURE)
2333 return FAILURE;
2334
2335 if (dim != NULL)
2336 {
2337 if (type_check (dim, 1, BT_INTEGER) == FAILURE)
2338 return FAILURE;
2339
2340 if (kind_value_check (dim, 1, gfc_default_integer_kind) == FAILURE)
2341 return FAILURE;
2342
2343 if (dim_rank_check (dim, array, 0) == FAILURE)
2344 return FAILURE;
2345 }
2346
2347 return SUCCESS;
2348 }
2349
2350
2351 try
2352 gfc_check_sleep_sub (gfc_expr *seconds)
2353 {
2354 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2355 return FAILURE;
2356
2357 if (scalar_check (seconds, 0) == FAILURE)
2358 return FAILURE;
2359
2360 return SUCCESS;
2361 }
2362
2363
2364 try
2365 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
2366 {
2367 if (source->rank >= GFC_MAX_DIMENSIONS)
2368 {
2369 gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
2370 "than rank %d", gfc_current_intrinsic_arg[0],
2371 gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
2372
2373 return FAILURE;
2374 }
2375
2376 if (dim_check (dim, 1, 0) == FAILURE)
2377 return FAILURE;
2378
2379 if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
2380 return FAILURE;
2381
2382 if (scalar_check (ncopies, 2) == FAILURE)
2383 return FAILURE;
2384
2385 if (gfc_init_expr)
2386 return non_init_transformational ();
2387
2388 return SUCCESS;
2389 }
2390
2391
2392 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
2393 functions). */
2394
2395 try
2396 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
2397 {
2398 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2399 return FAILURE;
2400
2401 if (scalar_check (unit, 0) == FAILURE)
2402 return FAILURE;
2403
2404 if (type_check (c, 1, BT_CHARACTER) == FAILURE)
2405 return FAILURE;
2406
2407 if (status == NULL)
2408 return SUCCESS;
2409
2410 if (type_check (status, 2, BT_INTEGER) == FAILURE
2411 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
2412 || scalar_check (status, 2) == FAILURE)
2413 return FAILURE;
2414
2415 return SUCCESS;
2416 }
2417
2418
2419 try
2420 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
2421 {
2422 return gfc_check_fgetputc_sub (unit, c, NULL);
2423 }
2424
2425
2426 try
2427 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
2428 {
2429 if (type_check (c, 0, BT_CHARACTER) == FAILURE)
2430 return FAILURE;
2431
2432 if (status == NULL)
2433 return SUCCESS;
2434
2435 if (type_check (status, 1, BT_INTEGER) == FAILURE
2436 || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
2437 || scalar_check (status, 1) == FAILURE)
2438 return FAILURE;
2439
2440 return SUCCESS;
2441 }
2442
2443
2444 try
2445 gfc_check_fgetput (gfc_expr *c)
2446 {
2447 return gfc_check_fgetput_sub (c, NULL);
2448 }
2449
2450
2451 try
2452 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
2453 {
2454 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2455 return FAILURE;
2456
2457 if (scalar_check (unit, 0) == FAILURE)
2458 return FAILURE;
2459
2460 if (type_check (array, 1, BT_INTEGER) == FAILURE
2461 || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
2462 return FAILURE;
2463
2464 if (array_check (array, 1) == FAILURE)
2465 return FAILURE;
2466
2467 return SUCCESS;
2468 }
2469
2470
2471 try
2472 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
2473 {
2474 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2475 return FAILURE;
2476
2477 if (scalar_check (unit, 0) == FAILURE)
2478 return FAILURE;
2479
2480 if (type_check (array, 1, BT_INTEGER) == FAILURE
2481 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2482 return FAILURE;
2483
2484 if (array_check (array, 1) == FAILURE)
2485 return FAILURE;
2486
2487 if (status == NULL)
2488 return SUCCESS;
2489
2490 if (type_check (status, 2, BT_INTEGER) == FAILURE
2491 || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
2492 return FAILURE;
2493
2494 if (scalar_check (status, 2) == FAILURE)
2495 return FAILURE;
2496
2497 return SUCCESS;
2498 }
2499
2500
2501 try
2502 gfc_check_ftell (gfc_expr *unit)
2503 {
2504 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2505 return FAILURE;
2506
2507 if (scalar_check (unit, 0) == FAILURE)
2508 return FAILURE;
2509
2510 return SUCCESS;
2511 }
2512
2513
2514 try
2515 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
2516 {
2517 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2518 return FAILURE;
2519
2520 if (scalar_check (unit, 0) == FAILURE)
2521 return FAILURE;
2522
2523 if (type_check (offset, 1, BT_INTEGER) == FAILURE)
2524 return FAILURE;
2525
2526 if (scalar_check (offset, 1) == FAILURE)
2527 return FAILURE;
2528
2529 return SUCCESS;
2530 }
2531
2532
2533 try
2534 gfc_check_stat (gfc_expr *name, gfc_expr *array)
2535 {
2536 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2537 return FAILURE;
2538
2539 if (type_check (array, 1, BT_INTEGER) == FAILURE
2540 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2541 return FAILURE;
2542
2543 if (array_check (array, 1) == FAILURE)
2544 return FAILURE;
2545
2546 return SUCCESS;
2547 }
2548
2549
2550 try
2551 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
2552 {
2553 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
2554 return FAILURE;
2555
2556 if (type_check (array, 1, BT_INTEGER) == FAILURE
2557 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2558 return FAILURE;
2559
2560 if (array_check (array, 1) == FAILURE)
2561 return FAILURE;
2562
2563 if (status == NULL)
2564 return SUCCESS;
2565
2566 if (type_check (status, 2, BT_INTEGER) == FAILURE
2567 || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
2568 return FAILURE;
2569
2570 if (scalar_check (status, 2) == FAILURE)
2571 return FAILURE;
2572
2573 return SUCCESS;
2574 }
2575
2576
2577 try
2578 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
2579 gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
2580 {
2581 if (size != NULL)
2582 {
2583 if (type_check (size, 2, BT_INTEGER) == FAILURE)
2584 return FAILURE;
2585
2586 if (scalar_check (size, 2) == FAILURE)
2587 return FAILURE;
2588
2589 if (nonoptional_check (size, 2) == FAILURE)
2590 return FAILURE;
2591 }
2592
2593 return SUCCESS;
2594 }
2595
2596
2597 try
2598 gfc_check_transpose (gfc_expr *matrix)
2599 {
2600 if (rank_check (matrix, 0, 2) == FAILURE)
2601 return FAILURE;
2602
2603 if (gfc_init_expr)
2604 return non_init_transformational ();
2605
2606 return SUCCESS;
2607 }
2608
2609
2610 try
2611 gfc_check_ubound (gfc_expr *array, gfc_expr *dim)
2612 {
2613 if (array_check (array, 0) == FAILURE)
2614 return FAILURE;
2615
2616 if (dim != NULL)
2617 {
2618 if (dim_check (dim, 1, 1) == FAILURE)
2619 return FAILURE;
2620
2621 if (dim_rank_check (dim, array, 0) == FAILURE)
2622 return FAILURE;
2623 }
2624
2625 return SUCCESS;
2626 }
2627
2628
2629 try
2630 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
2631 {
2632 if (rank_check (vector, 0, 1) == FAILURE)
2633 return FAILURE;
2634
2635 if (array_check (mask, 1) == FAILURE)
2636 return FAILURE;
2637
2638 if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2639 return FAILURE;
2640
2641 if (same_type_check (vector, 0, field, 2) == FAILURE)
2642 return FAILURE;
2643
2644 if (gfc_init_expr)
2645 return non_init_transformational ();
2646
2647 return SUCCESS;
2648 }
2649
2650
2651 try
2652 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z)
2653 {
2654 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2655 return FAILURE;
2656
2657 if (same_type_check (x, 0, y, 1) == FAILURE)
2658 return FAILURE;
2659
2660 if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
2661 return FAILURE;
2662
2663 return SUCCESS;
2664 }
2665
2666
2667 try
2668 gfc_check_trim (gfc_expr *x)
2669 {
2670 if (type_check (x, 0, BT_CHARACTER) == FAILURE)
2671 return FAILURE;
2672
2673 if (scalar_check (x, 0) == FAILURE)
2674 return FAILURE;
2675
2676 return SUCCESS;
2677 }
2678
2679
2680 try
2681 gfc_check_ttynam (gfc_expr *unit)
2682 {
2683 if (scalar_check (unit, 0) == FAILURE)
2684 return FAILURE;
2685
2686 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
2687 return FAILURE;
2688
2689 return SUCCESS;
2690 }
2691
2692
2693 /* Common check function for the half a dozen intrinsics that have a
2694 single real argument. */
2695
2696 try
2697 gfc_check_x (gfc_expr *x)
2698 {
2699 if (type_check (x, 0, BT_REAL) == FAILURE)
2700 return FAILURE;
2701
2702 return SUCCESS;
2703 }
2704
2705
2706 /************* Check functions for intrinsic subroutines *************/
2707
2708 try
2709 gfc_check_cpu_time (gfc_expr *time)
2710 {
2711 if (scalar_check (time, 0) == FAILURE)
2712 return FAILURE;
2713
2714 if (type_check (time, 0, BT_REAL) == FAILURE)
2715 return FAILURE;
2716
2717 if (variable_check (time, 0) == FAILURE)
2718 return FAILURE;
2719
2720 return SUCCESS;
2721 }
2722
2723
2724 try
2725 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
2726 gfc_expr *zone, gfc_expr *values)
2727 {
2728 if (date != NULL)
2729 {
2730 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
2731 return FAILURE;
2732 if (scalar_check (date, 0) == FAILURE)
2733 return FAILURE;
2734 if (variable_check (date, 0) == FAILURE)
2735 return FAILURE;
2736 }
2737
2738 if (time != NULL)
2739 {
2740 if (type_check (time, 1, BT_CHARACTER) == FAILURE)
2741 return FAILURE;
2742 if (scalar_check (time, 1) == FAILURE)
2743 return FAILURE;
2744 if (variable_check (time, 1) == FAILURE)
2745 return FAILURE;
2746 }
2747
2748 if (zone != NULL)
2749 {
2750 if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
2751 return FAILURE;
2752 if (scalar_check (zone, 2) == FAILURE)
2753 return FAILURE;
2754 if (variable_check (zone, 2) == FAILURE)
2755 return FAILURE;
2756 }
2757
2758 if (values != NULL)
2759 {
2760 if (type_check (values, 3, BT_INTEGER) == FAILURE)
2761 return FAILURE;
2762 if (array_check (values, 3) == FAILURE)
2763 return FAILURE;
2764 if (rank_check (values, 3, 1) == FAILURE)
2765 return FAILURE;
2766 if (variable_check (values, 3) == FAILURE)
2767 return FAILURE;
2768 }
2769
2770 return SUCCESS;
2771 }
2772
2773
2774 try
2775 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
2776 gfc_expr *to, gfc_expr *topos)
2777 {
2778 if (type_check (from, 0, BT_INTEGER) == FAILURE)
2779 return FAILURE;
2780
2781 if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
2782 return FAILURE;
2783
2784 if (type_check (len, 2, BT_INTEGER) == FAILURE)
2785 return FAILURE;
2786
2787 if (same_type_check (from, 0, to, 3) == FAILURE)
2788 return FAILURE;
2789
2790 if (variable_check (to, 3) == FAILURE)
2791 return FAILURE;
2792
2793 if (type_check (topos, 4, BT_INTEGER) == FAILURE)
2794 return FAILURE;
2795
2796 return SUCCESS;
2797 }
2798
2799
2800 try
2801 gfc_check_random_number (gfc_expr *harvest)
2802 {
2803 if (type_check (harvest, 0, BT_REAL) == FAILURE)
2804 return FAILURE;
2805
2806 if (variable_check (harvest, 0) == FAILURE)
2807 return FAILURE;
2808
2809 return SUCCESS;
2810 }
2811
2812
2813 try
2814 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
2815 {
2816 if (size != NULL)
2817 {
2818 if (scalar_check (size, 0) == FAILURE)
2819 return FAILURE;
2820
2821 if (type_check (size, 0, BT_INTEGER) == FAILURE)
2822 return FAILURE;
2823
2824 if (variable_check (size, 0) == FAILURE)
2825 return FAILURE;
2826
2827 if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
2828 return FAILURE;
2829 }
2830
2831 if (put != NULL)
2832 {
2833
2834 if (size != NULL)
2835 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2836 &put->where);
2837
2838 if (array_check (put, 1) == FAILURE)
2839 return FAILURE;
2840
2841 if (rank_check (put, 1, 1) == FAILURE)
2842 return FAILURE;
2843
2844 if (type_check (put, 1, BT_INTEGER) == FAILURE)
2845 return FAILURE;
2846
2847 if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
2848 return FAILURE;
2849 }
2850
2851 if (get != NULL)
2852 {
2853
2854 if (size != NULL || put != NULL)
2855 gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic,
2856 &get->where);
2857
2858 if (array_check (get, 2) == FAILURE)
2859 return FAILURE;
2860
2861 if (rank_check (get, 2, 1) == FAILURE)
2862 return FAILURE;
2863
2864 if (type_check (get, 2, BT_INTEGER) == FAILURE)
2865 return FAILURE;
2866
2867 if (variable_check (get, 2) == FAILURE)
2868 return FAILURE;
2869
2870 if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
2871 return FAILURE;
2872 }
2873
2874 return SUCCESS;
2875 }
2876
2877
2878 try
2879 gfc_check_second_sub (gfc_expr *time)
2880 {
2881 if (scalar_check (time, 0) == FAILURE)
2882 return FAILURE;
2883
2884 if (type_check (time, 0, BT_REAL) == FAILURE)
2885 return FAILURE;
2886
2887 if (kind_value_check(time, 0, 4) == FAILURE)
2888 return FAILURE;
2889
2890 return SUCCESS;
2891 }
2892
2893
2894 /* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note,
2895 count, count_rate, and count_max are all optional arguments */
2896
2897 try
2898 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
2899 gfc_expr *count_max)
2900 {
2901 if (count != NULL)
2902 {
2903 if (scalar_check (count, 0) == FAILURE)
2904 return FAILURE;
2905
2906 if (type_check (count, 0, BT_INTEGER) == FAILURE)
2907 return FAILURE;
2908
2909 if (variable_check (count, 0) == FAILURE)
2910 return FAILURE;
2911 }
2912
2913 if (count_rate != NULL)
2914 {
2915 if (scalar_check (count_rate, 1) == FAILURE)
2916 return FAILURE;
2917
2918 if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
2919 return FAILURE;
2920
2921 if (variable_check (count_rate, 1) == FAILURE)
2922 return FAILURE;
2923
2924 if (count != NULL
2925 && same_type_check (count, 0, count_rate, 1) == FAILURE)
2926 return FAILURE;
2927
2928 }
2929
2930 if (count_max != NULL)
2931 {
2932 if (scalar_check (count_max, 2) == FAILURE)
2933 return FAILURE;
2934
2935 if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
2936 return FAILURE;
2937
2938 if (variable_check (count_max, 2) == FAILURE)
2939 return FAILURE;
2940
2941 if (count != NULL
2942 && same_type_check (count, 0, count_max, 2) == FAILURE)
2943 return FAILURE;
2944
2945 if (count_rate != NULL
2946 && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
2947 return FAILURE;
2948 }
2949
2950 return SUCCESS;
2951 }
2952
2953
2954 try
2955 gfc_check_irand (gfc_expr *x)
2956 {
2957 if (x == NULL)
2958 return SUCCESS;
2959
2960 if (scalar_check (x, 0) == FAILURE)
2961 return FAILURE;
2962
2963 if (type_check (x, 0, BT_INTEGER) == FAILURE)
2964 return FAILURE;
2965
2966 if (kind_value_check(x, 0, 4) == FAILURE)
2967 return FAILURE;
2968
2969 return SUCCESS;
2970 }
2971
2972
2973 try
2974 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
2975 {
2976 if (scalar_check (seconds, 0) == FAILURE)
2977 return FAILURE;
2978
2979 if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
2980 return FAILURE;
2981
2982 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
2983 {
2984 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
2985 "or PROCEDURE", gfc_current_intrinsic_arg[1],
2986 gfc_current_intrinsic, &handler->where);
2987 return FAILURE;
2988 }
2989
2990 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
2991 return FAILURE;
2992
2993 if (status == NULL)
2994 return SUCCESS;
2995
2996 if (scalar_check (status, 2) == FAILURE)
2997 return FAILURE;
2998
2999 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3000 return FAILURE;
3001
3002 return SUCCESS;
3003 }
3004
3005
3006 try
3007 gfc_check_rand (gfc_expr *x)
3008 {
3009 if (x == NULL)
3010 return SUCCESS;
3011
3012 if (scalar_check (x, 0) == FAILURE)
3013 return FAILURE;
3014
3015 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3016 return FAILURE;
3017
3018 if (kind_value_check(x, 0, 4) == FAILURE)
3019 return FAILURE;
3020
3021 return SUCCESS;
3022 }
3023
3024
3025 try
3026 gfc_check_srand (gfc_expr *x)
3027 {
3028 if (scalar_check (x, 0) == FAILURE)
3029 return FAILURE;
3030
3031 if (type_check (x, 0, BT_INTEGER) == FAILURE)
3032 return FAILURE;
3033
3034 if (kind_value_check(x, 0, 4) == FAILURE)
3035 return FAILURE;
3036
3037 return SUCCESS;
3038 }
3039
3040
3041 try
3042 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
3043 {
3044 if (scalar_check (time, 0) == FAILURE)
3045 return FAILURE;
3046
3047 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3048 return FAILURE;
3049
3050 if (type_check (result, 1, BT_CHARACTER) == FAILURE)
3051 return FAILURE;
3052
3053 return SUCCESS;
3054 }
3055
3056
3057 try
3058 gfc_check_etime (gfc_expr *x)
3059 {
3060 if (array_check (x, 0) == FAILURE)
3061 return FAILURE;
3062
3063 if (rank_check (x, 0, 1) == FAILURE)
3064 return FAILURE;
3065
3066 if (variable_check (x, 0) == FAILURE)
3067 return FAILURE;
3068
3069 if (type_check (x, 0, BT_REAL) == FAILURE)
3070 return FAILURE;
3071
3072 if (kind_value_check(x, 0, 4) == FAILURE)
3073 return FAILURE;
3074
3075 return SUCCESS;
3076 }
3077
3078
3079 try
3080 gfc_check_etime_sub (gfc_expr *values, gfc_expr *time)
3081 {
3082 if (array_check (values, 0) == FAILURE)
3083 return FAILURE;
3084
3085 if (rank_check (values, 0, 1) == FAILURE)
3086 return FAILURE;
3087
3088 if (variable_check (values, 0) == FAILURE)
3089 return FAILURE;
3090
3091 if (type_check (values, 0, BT_REAL) == FAILURE)
3092 return FAILURE;
3093
3094 if (kind_value_check(values, 0, 4) == FAILURE)
3095 return FAILURE;
3096
3097 if (scalar_check (time, 1) == FAILURE)
3098 return FAILURE;
3099
3100 if (type_check (time, 1, BT_REAL) == FAILURE)
3101 return FAILURE;
3102
3103 if (kind_value_check(time, 1, 4) == FAILURE)
3104 return FAILURE;
3105
3106 return SUCCESS;
3107 }
3108
3109
3110 try
3111 gfc_check_fdate_sub (gfc_expr *date)
3112 {
3113 if (type_check (date, 0, BT_CHARACTER) == FAILURE)
3114 return FAILURE;
3115
3116 return SUCCESS;
3117 }
3118
3119
3120 try
3121 gfc_check_gerror (gfc_expr *msg)
3122 {
3123 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3124 return FAILURE;
3125
3126 return SUCCESS;
3127 }
3128
3129
3130 try
3131 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
3132 {
3133 if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
3134 return FAILURE;
3135
3136 if (status == NULL)
3137 return SUCCESS;
3138
3139 if (scalar_check (status, 1) == FAILURE)
3140 return FAILURE;
3141
3142 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3143 return FAILURE;
3144
3145 return SUCCESS;
3146 }
3147
3148
3149 try
3150 gfc_check_getlog (gfc_expr *msg)
3151 {
3152 if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
3153 return FAILURE;
3154
3155 return SUCCESS;
3156 }
3157
3158
3159 try
3160 gfc_check_exit (gfc_expr *status)
3161 {
3162 if (status == NULL)
3163 return SUCCESS;
3164
3165 if (type_check (status, 0, BT_INTEGER) == FAILURE)
3166 return FAILURE;
3167
3168 if (scalar_check (status, 0) == FAILURE)
3169 return FAILURE;
3170
3171 return SUCCESS;
3172 }
3173
3174
3175 try
3176 gfc_check_flush (gfc_expr *unit)
3177 {
3178 if (unit == NULL)
3179 return SUCCESS;
3180
3181 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3182 return FAILURE;
3183
3184 if (scalar_check (unit, 0) == FAILURE)
3185 return FAILURE;
3186
3187 return SUCCESS;
3188 }
3189
3190
3191 try
3192 gfc_check_free (gfc_expr *i)
3193 {
3194 if (type_check (i, 0, BT_INTEGER) == FAILURE)
3195 return FAILURE;
3196
3197 if (scalar_check (i, 0) == FAILURE)
3198 return FAILURE;
3199
3200 return SUCCESS;
3201 }
3202
3203
3204 try
3205 gfc_check_hostnm (gfc_expr *name)
3206 {
3207 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3208 return FAILURE;
3209
3210 return SUCCESS;
3211 }
3212
3213
3214 try
3215 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
3216 {
3217 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3218 return FAILURE;
3219
3220 if (status == NULL)
3221 return SUCCESS;
3222
3223 if (scalar_check (status, 1) == FAILURE)
3224 return FAILURE;
3225
3226 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3227 return FAILURE;
3228
3229 return SUCCESS;
3230 }
3231
3232
3233 try
3234 gfc_check_itime_idate (gfc_expr *values)
3235 {
3236 if (array_check (values, 0) == FAILURE)
3237 return FAILURE;
3238
3239 if (rank_check (values, 0, 1) == FAILURE)
3240 return FAILURE;
3241
3242 if (variable_check (values, 0) == FAILURE)
3243 return FAILURE;
3244
3245 if (type_check (values, 0, BT_INTEGER) == FAILURE)
3246 return FAILURE;
3247
3248 if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
3249 return FAILURE;
3250
3251 return SUCCESS;
3252 }
3253
3254
3255 try
3256 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
3257 {
3258 if (type_check (time, 0, BT_INTEGER) == FAILURE)
3259 return FAILURE;
3260
3261 if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
3262 return FAILURE;
3263
3264 if (scalar_check (time, 0) == FAILURE)
3265 return FAILURE;
3266
3267 if (array_check (values, 1) == FAILURE)
3268 return FAILURE;
3269
3270 if (rank_check (values, 1, 1) == FAILURE)
3271 return FAILURE;
3272
3273 if (variable_check (values, 1) == FAILURE)
3274 return FAILURE;
3275
3276 if (type_check (values, 1, BT_INTEGER) == FAILURE)
3277 return FAILURE;
3278
3279 if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
3280 return FAILURE;
3281
3282 return SUCCESS;
3283 }
3284
3285
3286 try
3287 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
3288 {
3289 if (scalar_check (unit, 0) == FAILURE)
3290 return FAILURE;
3291
3292 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3293 return FAILURE;
3294
3295 if (type_check (name, 1, BT_CHARACTER) == FAILURE)
3296 return FAILURE;
3297
3298 return SUCCESS;
3299 }
3300
3301
3302 try
3303 gfc_check_isatty (gfc_expr *unit)
3304 {
3305 if (unit == NULL)
3306 return FAILURE;
3307
3308 if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3309 return FAILURE;
3310
3311 if (scalar_check (unit, 0) == FAILURE)
3312 return FAILURE;
3313
3314 return SUCCESS;
3315 }
3316
3317
3318 try
3319 gfc_check_perror (gfc_expr *string)
3320 {
3321 if (type_check (string, 0, BT_CHARACTER) == FAILURE)
3322 return FAILURE;
3323
3324 return SUCCESS;
3325 }
3326
3327
3328 try
3329 gfc_check_umask (gfc_expr *mask)
3330 {
3331 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3332 return FAILURE;
3333
3334 if (scalar_check (mask, 0) == FAILURE)
3335 return FAILURE;
3336
3337 return SUCCESS;
3338 }
3339
3340
3341 try
3342 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
3343 {
3344 if (type_check (mask, 0, BT_INTEGER) == FAILURE)
3345 return FAILURE;
3346
3347 if (scalar_check (mask, 0) == FAILURE)
3348 return FAILURE;
3349
3350 if (old == NULL)
3351 return SUCCESS;
3352
3353 if (scalar_check (old, 1) == FAILURE)
3354 return FAILURE;
3355
3356 if (type_check (old, 1, BT_INTEGER) == FAILURE)
3357 return FAILURE;
3358
3359 return SUCCESS;
3360 }
3361
3362
3363 try
3364 gfc_check_unlink (gfc_expr *name)
3365 {
3366 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3367 return FAILURE;
3368
3369 return SUCCESS;
3370 }
3371
3372
3373 try
3374 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
3375 {
3376 if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3377 return FAILURE;
3378
3379 if (status == NULL)
3380 return SUCCESS;
3381
3382 if (scalar_check (status, 1) == FAILURE)
3383 return FAILURE;
3384
3385 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3386 return FAILURE;
3387
3388 return SUCCESS;
3389 }
3390
3391
3392 try
3393 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
3394 {
3395 if (scalar_check (number, 0) == FAILURE)
3396 return FAILURE;
3397
3398 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3399 return FAILURE;
3400
3401 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3402 {
3403 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3404 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3405 gfc_current_intrinsic, &handler->where);
3406 return FAILURE;
3407 }
3408
3409 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3410 return FAILURE;
3411
3412 return SUCCESS;
3413 }
3414
3415
3416 try
3417 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
3418 {
3419 if (scalar_check (number, 0) == FAILURE)
3420 return FAILURE;
3421
3422 if (type_check (number, 0, BT_INTEGER) == FAILURE)
3423 return FAILURE;
3424
3425 if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE)
3426 {
3427 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3428 "or PROCEDURE", gfc_current_intrinsic_arg[1],
3429 gfc_current_intrinsic, &handler->where);
3430 return FAILURE;
3431 }
3432
3433 if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
3434 return FAILURE;
3435
3436 if (status == NULL)
3437 return SUCCESS;
3438
3439 if (type_check (status, 2, BT_INTEGER) == FAILURE)
3440 return FAILURE;
3441
3442 if (scalar_check (status, 2) == FAILURE)
3443 return FAILURE;
3444
3445 return SUCCESS;
3446 }
3447
3448
3449 try
3450 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
3451 {
3452 if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
3453 return FAILURE;
3454
3455 if (scalar_check (status, 1) == FAILURE)
3456 return FAILURE;
3457
3458 if (type_check (status, 1, BT_INTEGER) == FAILURE)
3459 return FAILURE;
3460
3461 if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
3462 return FAILURE;
3463
3464 return SUCCESS;
3465 }
3466
3467
3468 /* This is used for the GNU intrinsics AND, OR and XOR. */
3469 try
3470 gfc_check_and (gfc_expr *i, gfc_expr *j)
3471 {
3472 if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
3473 {
3474 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3475 "or LOGICAL", gfc_current_intrinsic_arg[0],
3476 gfc_current_intrinsic, &i->where);
3477 return FAILURE;
3478 }
3479
3480 if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
3481 {
3482 gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
3483 "or LOGICAL", gfc_current_intrinsic_arg[1],
3484 gfc_current_intrinsic, &j->where);
3485 return FAILURE;
3486 }
3487
3488 if (i->ts.type != j->ts.type)
3489 {
3490 gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
3491 "have the same type", gfc_current_intrinsic_arg[0],
3492 gfc_current_intrinsic_arg[1], gfc_current_intrinsic,
3493 &j->where);
3494 return FAILURE;
3495 }
3496
3497 if (scalar_check (i, 0) == FAILURE)
3498 return FAILURE;
3499
3500 if (scalar_check (j, 1) == FAILURE)
3501 return FAILURE;
3502
3503 return SUCCESS;
3504 }