OSDN Git Service

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