OSDN Git Service

2012-01-23 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / gcc / fortran / check.c
1 /* Check functions
2    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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 #include "constructor.h"
35 #include "target-memory.h"
36
37
38 /* Make sure an expression is a scalar.  */
39
40 static gfc_try
41 scalar_check (gfc_expr *e, int n)
42 {
43   if (e->rank == 0)
44     return SUCCESS;
45
46   gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar",
47              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
48              &e->where);
49
50   return FAILURE;
51 }
52
53
54 /* Check the type of an expression.  */
55
56 static gfc_try
57 type_check (gfc_expr *e, int n, bt type)
58 {
59   if (e->ts.type == type)
60     return SUCCESS;
61
62   gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s",
63              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
64              &e->where, gfc_basic_typename (type));
65
66   return FAILURE;
67 }
68
69
70 /* Check that the expression is a numeric type.  */
71
72 static gfc_try
73 numeric_check (gfc_expr *e, int n)
74 {
75   if (gfc_numeric_ts (&e->ts))
76     return SUCCESS;
77
78   /* If the expression has not got a type, check if its namespace can
79      offer a default type.  */
80   if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE)
81         && e->symtree->n.sym->ts.type == BT_UNKNOWN
82         && gfc_set_default_type (e->symtree->n.sym, 0,
83                                  e->symtree->n.sym->ns) == SUCCESS
84         && gfc_numeric_ts (&e->symtree->n.sym->ts))
85     {
86       e->ts = e->symtree->n.sym->ts;
87       return SUCCESS;
88     }
89
90   gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type",
91              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
92              &e->where);
93
94   return FAILURE;
95 }
96
97
98 /* Check that an expression is integer or real.  */
99
100 static gfc_try
101 int_or_real_check (gfc_expr *e, int n)
102 {
103   if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
104     {
105       gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
106                  "or REAL", gfc_current_intrinsic_arg[n]->name,
107                  gfc_current_intrinsic, &e->where);
108       return FAILURE;
109     }
110
111   return SUCCESS;
112 }
113
114
115 /* Check that an expression is real or complex.  */
116
117 static gfc_try
118 real_or_complex_check (gfc_expr *e, int n)
119 {
120   if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
121     {
122       gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL "
123                  "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
124                  gfc_current_intrinsic, &e->where);
125       return FAILURE;
126     }
127
128   return SUCCESS;
129 }
130
131
132 /* Check that an expression is INTEGER or PROCEDURE.  */
133
134 static gfc_try
135 int_or_proc_check (gfc_expr *e, int n)
136 {
137   if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
138     {
139       gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
140                  "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
141                  gfc_current_intrinsic, &e->where);
142       return FAILURE;
143     }
144
145   return SUCCESS;
146 }
147
148
149 /* Check that the expression is an optional constant integer
150    and that it specifies a valid kind for that type.  */
151
152 static gfc_try
153 kind_check (gfc_expr *k, int n, bt type)
154 {
155   int kind;
156
157   if (k == NULL)
158     return SUCCESS;
159
160   if (type_check (k, n, BT_INTEGER) == FAILURE)
161     return FAILURE;
162
163   if (scalar_check (k, n) == FAILURE)
164     return FAILURE;
165
166   if (k->expr_type != EXPR_CONSTANT)
167     {
168       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
169                  gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
170                  &k->where);
171       return FAILURE;
172     }
173
174   if (gfc_extract_int (k, &kind) != NULL
175       || gfc_validate_kind (type, kind, true) < 0)
176     {
177       gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
178                  &k->where);
179       return FAILURE;
180     }
181
182   return SUCCESS;
183 }
184
185
186 /* Make sure the expression is a double precision real.  */
187
188 static gfc_try
189 double_check (gfc_expr *d, int n)
190 {
191   if (type_check (d, n, BT_REAL) == FAILURE)
192     return FAILURE;
193
194   if (d->ts.kind != gfc_default_double_kind)
195     {
196       gfc_error ("'%s' argument of '%s' intrinsic at %L must be double "
197                  "precision", gfc_current_intrinsic_arg[n]->name,
198                  gfc_current_intrinsic, &d->where);
199       return FAILURE;
200     }
201
202   return SUCCESS;
203 }
204
205
206 static gfc_try
207 coarray_check (gfc_expr *e, int n)
208 {
209   if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
210         && CLASS_DATA (e)->attr.codimension
211         && CLASS_DATA (e)->as->corank)
212     {
213       gfc_add_class_array_ref (e);
214       return SUCCESS;
215     }
216
217   if (!gfc_is_coarray (e))
218     {
219       gfc_error ("Expected coarray variable as '%s' argument to the %s "
220                  "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
221                  gfc_current_intrinsic, &e->where);
222       return FAILURE;
223     }
224
225   return SUCCESS;
226
227
228
229 /* Make sure the expression is a logical array.  */
230
231 static gfc_try
232 logical_array_check (gfc_expr *array, int n)
233 {
234   if (array->ts.type != BT_LOGICAL || array->rank == 0)
235     {
236       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical "
237                  "array", gfc_current_intrinsic_arg[n]->name,
238                  gfc_current_intrinsic, &array->where);
239       return FAILURE;
240     }
241
242   return SUCCESS;
243 }
244
245
246 /* Make sure an expression is an array.  */
247
248 static gfc_try
249 array_check (gfc_expr *e, int n)
250 {
251   if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
252         && CLASS_DATA (e)->attr.dimension
253         && CLASS_DATA (e)->as->rank)
254     {
255       gfc_add_class_array_ref (e);
256       return SUCCESS;
257     }
258
259   if (e->rank != 0)
260     return SUCCESS;
261
262   gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
263              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
264              &e->where);
265
266   return FAILURE;
267 }
268
269
270 /* If expr is a constant, then check to ensure that it is greater than
271    of equal to zero.  */
272
273 static gfc_try
274 nonnegative_check (const char *arg, gfc_expr *expr)
275 {
276   int i;
277
278   if (expr->expr_type == EXPR_CONSTANT)
279     {
280       gfc_extract_int (expr, &i);
281       if (i < 0)
282         {
283           gfc_error ("'%s' at %L must be nonnegative", arg, &expr->where);
284           return FAILURE;
285         }
286     }
287
288   return SUCCESS;
289 }
290
291
292 /* If expr2 is constant, then check that the value is less than
293    (less than or equal to, if 'or_equal' is true) bit_size(expr1).  */
294
295 static gfc_try
296 less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
297                     gfc_expr *expr2, bool or_equal)
298 {
299   int i2, i3;
300
301   if (expr2->expr_type == EXPR_CONSTANT)
302     {
303       gfc_extract_int (expr2, &i2);
304       i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
305  
306       /* For ISHFT[C], check that |shift| <= bit_size(i).  */
307       if (arg2 == NULL)
308         {
309           if (i2 < 0)
310             i2 = -i2;
311
312           if (i2 > gfc_integer_kinds[i3].bit_size)
313             {
314               gfc_error ("The absolute value of SHIFT at %L must be less "
315                          "than or equal to BIT_SIZE('%s')",
316                          &expr2->where, arg1);
317               return FAILURE;
318             }
319         }
320
321       if (or_equal)
322         {
323           if (i2 > gfc_integer_kinds[i3].bit_size)
324             {
325               gfc_error ("'%s' at %L must be less than "
326                          "or equal to BIT_SIZE('%s')",
327                          arg2, &expr2->where, arg1);
328               return FAILURE;
329             }
330         }
331       else
332         {
333           if (i2 >= gfc_integer_kinds[i3].bit_size)
334             {
335               gfc_error ("'%s' at %L must be less than BIT_SIZE('%s')",
336                          arg2, &expr2->where, arg1);
337               return FAILURE;
338             }
339         }
340     }
341
342   return SUCCESS;
343 }
344
345
346 /* If expr is constant, then check that the value is less than or equal
347    to the bit_size of the kind k.  */
348
349 static gfc_try
350 less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
351 {
352   int i, val;
353
354   if (expr->expr_type != EXPR_CONSTANT)
355     return SUCCESS;
356  
357   i = gfc_validate_kind (BT_INTEGER, k, false);
358   gfc_extract_int (expr, &val);
359
360   if (val > gfc_integer_kinds[i].bit_size)
361     {
362       gfc_error ("'%s' at %L must be less than or equal to the BIT_SIZE of "
363                  "INTEGER(KIND=%d)", arg, &expr->where, k);
364       return FAILURE;
365     }
366
367   return SUCCESS;
368 }
369
370
371 /* If expr2 and expr3 are constants, then check that the value is less than
372    or equal to bit_size(expr1).  */
373
374 static gfc_try
375 less_than_bitsize2 (const char *arg1, gfc_expr *expr1, const char *arg2,
376                gfc_expr *expr2, const char *arg3, gfc_expr *expr3)
377 {
378   int i2, i3;
379
380   if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
381     {
382       gfc_extract_int (expr2, &i2);
383       gfc_extract_int (expr3, &i3);
384       i2 += i3;
385       i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
386       if (i2 > gfc_integer_kinds[i3].bit_size)
387         {
388           gfc_error ("'%s + %s' at %L must be less than or equal "
389                      "to BIT_SIZE('%s')",
390                      arg2, arg3, &expr2->where, arg1);
391           return FAILURE;
392         }
393     }
394
395   return SUCCESS;
396 }
397
398 /* Make sure two expressions have the same type.  */
399
400 static gfc_try
401 same_type_check (gfc_expr *e, int n, gfc_expr *f, int m)
402 {
403   if (gfc_compare_types (&e->ts, &f->ts))
404     return SUCCESS;
405
406   gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type "
407              "and kind as '%s'", gfc_current_intrinsic_arg[m]->name,
408              gfc_current_intrinsic, &f->where,
409              gfc_current_intrinsic_arg[n]->name);
410
411   return FAILURE;
412 }
413
414
415 /* Make sure that an expression has a certain (nonzero) rank.  */
416
417 static gfc_try
418 rank_check (gfc_expr *e, int n, int rank)
419 {
420   if (e->rank == rank)
421     return SUCCESS;
422
423   gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d",
424              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
425              &e->where, rank);
426
427   return FAILURE;
428 }
429
430
431 /* Make sure a variable expression is not an optional dummy argument.  */
432
433 static gfc_try
434 nonoptional_check (gfc_expr *e, int n)
435 {
436   if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
437     {
438       gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL",
439                  gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
440                  &e->where);
441     }
442
443   /* TODO: Recursive check on nonoptional variables?  */
444
445   return SUCCESS;
446 }
447
448
449 /* Check for ALLOCATABLE attribute.  */
450
451 static gfc_try
452 allocatable_check (gfc_expr *e, int n)
453 {
454   symbol_attribute attr;
455
456   attr = gfc_variable_attr (e, NULL);
457   if (!attr.allocatable)
458     {
459       gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE",
460                  gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
461                  &e->where);
462       return FAILURE;
463     }
464
465   return SUCCESS;
466 }
467
468
469 /* Check that an expression has a particular kind.  */
470
471 static gfc_try
472 kind_value_check (gfc_expr *e, int n, int k)
473 {
474   if (e->ts.kind == k)
475     return SUCCESS;
476
477   gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d",
478              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
479              &e->where, k);
480
481   return FAILURE;
482 }
483
484
485 /* Make sure an expression is a variable.  */
486
487 static gfc_try
488 variable_check (gfc_expr *e, int n, bool allow_proc)
489 {
490   if (e->expr_type == EXPR_VARIABLE
491       && e->symtree->n.sym->attr.intent == INTENT_IN
492       && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
493           || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
494     {
495       gfc_ref *ref;
496       bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
497                      && CLASS_DATA (e->symtree->n.sym)
498                      ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
499                      : e->symtree->n.sym->attr.pointer;
500
501       for (ref = e->ref; ref; ref = ref->next)
502         {
503           if (pointer && ref->type == REF_COMPONENT)
504             break;
505           if (ref->type == REF_COMPONENT
506               && ((ref->u.c.component->ts.type == BT_CLASS
507                    && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
508                   || (ref->u.c.component->ts.type != BT_CLASS
509                       && ref->u.c.component->attr.pointer)))
510             break;
511         } 
512
513       if (!ref)
514         {
515           gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
516                      "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
517                      gfc_current_intrinsic, &e->where);
518           return FAILURE;
519         }
520     }
521
522   if (e->expr_type == EXPR_VARIABLE
523       && e->symtree->n.sym->attr.flavor != FL_PARAMETER
524       && (allow_proc || !e->symtree->n.sym->attr.function))
525     return SUCCESS;
526
527   if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.function
528       && e->symtree->n.sym == e->symtree->n.sym->result)
529     {
530       gfc_namespace *ns;
531       for (ns = gfc_current_ns; ns; ns = ns->parent)
532         if (ns->proc_name == e->symtree->n.sym)
533           return SUCCESS;
534     }
535
536   gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable",
537              gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
538
539   return FAILURE;
540 }
541
542
543 /* Check the common DIM parameter for correctness.  */
544
545 static gfc_try
546 dim_check (gfc_expr *dim, int n, bool optional)
547 {
548   if (dim == NULL)
549     return SUCCESS;
550
551   if (type_check (dim, n, BT_INTEGER) == FAILURE)
552     return FAILURE;
553
554   if (scalar_check (dim, n) == FAILURE)
555     return FAILURE;
556
557   if (!optional && nonoptional_check (dim, n) == FAILURE)
558     return FAILURE;
559
560   return SUCCESS;
561 }
562
563
564 /* If a coarray DIM parameter is a constant, make sure that it is greater than
565    zero and less than or equal to the corank of the given array.  */
566
567 static gfc_try
568 dim_corank_check (gfc_expr *dim, gfc_expr *array)
569 {
570   int corank;
571
572   gcc_assert (array->expr_type == EXPR_VARIABLE);
573
574   if (dim->expr_type != EXPR_CONSTANT)
575     return SUCCESS;
576   
577   if (array->ts.type == BT_CLASS)
578     return SUCCESS;
579
580   corank = gfc_get_corank (array);
581
582   if (mpz_cmp_ui (dim->value.integer, 1) < 0
583       || mpz_cmp_ui (dim->value.integer, corank) > 0)
584     {
585       gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
586                  "codimension index", gfc_current_intrinsic, &dim->where);
587
588       return FAILURE;
589     }
590
591   return SUCCESS;
592 }
593
594
595 /* If a DIM parameter is a constant, make sure that it is greater than
596    zero and less than or equal to the rank of the given array.  If
597    allow_assumed is zero then dim must be less than the rank of the array
598    for assumed size arrays.  */
599
600 static gfc_try
601 dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
602 {
603   gfc_array_ref *ar;
604   int rank;
605
606   if (dim == NULL)
607     return SUCCESS;
608
609   if (dim->expr_type != EXPR_CONSTANT)
610     return SUCCESS;
611
612   if (array->ts.type == BT_CLASS)
613     return SUCCESS;
614
615   if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
616       && array->value.function.isym->id == GFC_ISYM_SPREAD)
617     rank = array->rank + 1;
618   else
619     rank = array->rank;
620
621   if (array->expr_type == EXPR_VARIABLE)
622     {
623       ar = gfc_find_array_ref (array);
624       if (ar->as->type == AS_ASSUMED_SIZE
625           && !allow_assumed
626           && ar->type != AR_ELEMENT
627           && ar->type != AR_SECTION)
628         rank--;
629     }
630
631   if (mpz_cmp_ui (dim->value.integer, 1) < 0
632       || mpz_cmp_ui (dim->value.integer, rank) > 0)
633     {
634       gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid "
635                  "dimension index", gfc_current_intrinsic, &dim->where);
636
637       return FAILURE;
638     }
639
640   return SUCCESS;
641 }
642
643
644 /* Compare the size of a along dimension ai with the size of b along
645    dimension bi, returning 0 if they are known not to be identical,
646    and 1 if they are identical, or if this cannot be determined.  */
647
648 static int
649 identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
650 {
651   mpz_t a_size, b_size;
652   int ret;
653
654   gcc_assert (a->rank > ai);
655   gcc_assert (b->rank > bi);
656
657   ret = 1;
658
659   if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS)
660     {
661       if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS)
662         {
663           if (mpz_cmp (a_size, b_size) != 0)
664             ret = 0;
665   
666           mpz_clear (b_size);
667         }
668       mpz_clear (a_size);
669     }
670   return ret;
671 }
672
673 /*  Calculate the length of a character variable, including substrings.
674     Strip away parentheses if necessary.  Return -1 if no length could
675     be determined.  */
676
677 static long
678 gfc_var_strlen (const gfc_expr *a)
679 {
680   gfc_ref *ra;
681
682   while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
683     a = a->value.op.op1;
684
685   for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
686     ;
687
688   if (ra)
689     {
690       long start_a, end_a;
691
692       if (ra->u.ss.start->expr_type == EXPR_CONSTANT
693           && ra->u.ss.end->expr_type == EXPR_CONSTANT)
694         {
695           start_a = mpz_get_si (ra->u.ss.start->value.integer);
696           end_a = mpz_get_si (ra->u.ss.end->value.integer);
697           return end_a - start_a + 1;
698         }
699       else if (gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
700         return 1;
701       else
702         return -1;
703     }
704
705   if (a->ts.u.cl && a->ts.u.cl->length
706       && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
707     return mpz_get_si (a->ts.u.cl->length->value.integer);
708   else if (a->expr_type == EXPR_CONSTANT
709            && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
710     return a->value.character.length;
711   else
712     return -1;
713
714 }
715
716 /* Check whether two character expressions have the same length;
717    returns SUCCESS if they have or if the length cannot be determined,
718    otherwise return FAILURE and raise a gfc_error.  */
719
720 gfc_try
721 gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
722 {
723    long len_a, len_b;
724
725    len_a = gfc_var_strlen(a);
726    len_b = gfc_var_strlen(b);
727
728    if (len_a == -1 || len_b == -1 || len_a == len_b)
729      return SUCCESS;
730    else
731      {
732        gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
733                   len_a, len_b, name, &a->where);
734        return FAILURE;
735      }
736 }
737
738
739 /***** Check functions *****/
740
741 /* Check subroutine suitable for intrinsics taking a real argument and
742    a kind argument for the result.  */
743
744 static gfc_try
745 check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
746 {
747   if (type_check (a, 0, BT_REAL) == FAILURE)
748     return FAILURE;
749   if (kind_check (kind, 1, type) == FAILURE)
750     return FAILURE;
751
752   return SUCCESS;
753 }
754
755
756 /* Check subroutine suitable for ceiling, floor and nint.  */
757
758 gfc_try
759 gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
760 {
761   return check_a_kind (a, kind, BT_INTEGER);
762 }
763
764
765 /* Check subroutine suitable for aint, anint.  */
766
767 gfc_try
768 gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
769 {
770   return check_a_kind (a, kind, BT_REAL);
771 }
772
773
774 gfc_try
775 gfc_check_abs (gfc_expr *a)
776 {
777   if (numeric_check (a, 0) == FAILURE)
778     return FAILURE;
779
780   return SUCCESS;
781 }
782
783
784 gfc_try
785 gfc_check_achar (gfc_expr *a, gfc_expr *kind)
786 {
787   if (type_check (a, 0, BT_INTEGER) == FAILURE)
788     return FAILURE;
789   if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
790     return FAILURE;
791
792   return SUCCESS;
793 }
794
795
796 gfc_try
797 gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
798 {
799   if (type_check (name, 0, BT_CHARACTER) == FAILURE
800       || scalar_check (name, 0) == FAILURE)
801     return FAILURE;
802   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
803     return FAILURE;
804
805   if (type_check (mode, 1, BT_CHARACTER) == FAILURE
806       || scalar_check (mode, 1) == FAILURE)
807     return FAILURE;
808   if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
809     return FAILURE;
810
811   return SUCCESS;
812 }
813
814
815 gfc_try
816 gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
817 {
818   if (logical_array_check (mask, 0) == FAILURE)
819     return FAILURE;
820
821   if (dim_check (dim, 1, false) == FAILURE)
822     return FAILURE;
823
824   if (dim_rank_check (dim, mask, 0) == FAILURE)
825     return FAILURE;
826
827   return SUCCESS;
828 }
829
830
831 gfc_try
832 gfc_check_allocated (gfc_expr *array)
833 {
834   if (variable_check (array, 0, false) == FAILURE)
835     return FAILURE;
836   if (allocatable_check (array, 0) == FAILURE)
837     return FAILURE;
838   
839   return SUCCESS;
840 }
841
842
843 /* Common check function where the first argument must be real or
844    integer and the second argument must be the same as the first.  */
845
846 gfc_try
847 gfc_check_a_p (gfc_expr *a, gfc_expr *p)
848 {
849   if (int_or_real_check (a, 0) == FAILURE)
850     return FAILURE;
851
852   if (a->ts.type != p->ts.type)
853     {
854       gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
855                  "have the same type", gfc_current_intrinsic_arg[0]->name,
856                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
857                  &p->where);
858       return FAILURE;
859     }
860
861   if (a->ts.kind != p->ts.kind)
862     {
863       if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
864                           &p->where) == FAILURE)
865        return FAILURE;
866     }
867
868   return SUCCESS;
869 }
870
871
872 gfc_try
873 gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
874 {
875   if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE)
876     return FAILURE;
877
878   return SUCCESS;
879 }
880
881
882 gfc_try
883 gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
884 {
885   symbol_attribute attr1, attr2;
886   int i;
887   gfc_try t;
888   locus *where;
889
890   where = &pointer->where;
891
892   if (pointer->expr_type == EXPR_VARIABLE || pointer->expr_type == EXPR_FUNCTION)
893     attr1 = gfc_expr_attr (pointer);
894   else if (pointer->expr_type == EXPR_NULL)
895     goto null_arg;
896   else
897     gcc_assert (0); /* Pointer must be a variable or a function.  */
898
899   if (!attr1.pointer && !attr1.proc_pointer)
900     {
901       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER",
902                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
903                  &pointer->where);
904       return FAILURE;
905     }
906
907   /* F2008, C1242.  */
908   if (attr1.pointer && gfc_is_coindexed (pointer))
909     {
910       gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
911                  "conindexed", gfc_current_intrinsic_arg[0]->name,
912                  gfc_current_intrinsic, &pointer->where);
913       return FAILURE;
914     }
915
916   /* Target argument is optional.  */
917   if (target == NULL)
918     return SUCCESS;
919
920   where = &target->where;
921   if (target->expr_type == EXPR_NULL)
922     goto null_arg;
923
924   if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
925     attr2 = gfc_expr_attr (target);
926   else
927     {
928       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer "
929                  "or target VARIABLE or FUNCTION",
930                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
931                  &target->where);
932       return FAILURE;
933     }
934
935   if (attr1.pointer && !attr2.pointer && !attr2.target)
936     {
937       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER "
938                  "or a TARGET", gfc_current_intrinsic_arg[1]->name,
939                  gfc_current_intrinsic, &target->where);
940       return FAILURE;
941     }
942
943   /* F2008, C1242.  */
944   if (attr1.pointer && gfc_is_coindexed (target))
945     {
946       gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
947                  "conindexed", gfc_current_intrinsic_arg[1]->name,
948                  gfc_current_intrinsic, &target->where);
949       return FAILURE;
950     }
951
952   t = SUCCESS;
953   if (same_type_check (pointer, 0, target, 1) == FAILURE)
954     t = FAILURE;
955   if (rank_check (target, 0, pointer->rank) == FAILURE)
956     t = FAILURE;
957   if (target->rank > 0)
958     {
959       for (i = 0; i < target->rank; i++)
960         if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
961           {
962             gfc_error ("Array section with a vector subscript at %L shall not "
963                        "be the target of a pointer",
964                        &target->where);
965             t = FAILURE;
966             break;
967           }
968     }
969   return t;
970
971 null_arg:
972
973   gfc_error ("NULL pointer at %L is not permitted as actual argument "
974              "of '%s' intrinsic function", where, gfc_current_intrinsic);
975   return FAILURE;
976
977 }
978
979
980 gfc_try
981 gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
982 {
983   /* gfc_notify_std would be a waste of time as the return value
984      is seemingly used only for the generic resolution.  The error
985      will be: Too many arguments.  */
986   if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
987     return FAILURE;
988
989   return gfc_check_atan2 (y, x);
990 }
991
992
993 gfc_try
994 gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
995 {
996   if (type_check (y, 0, BT_REAL) == FAILURE)
997     return FAILURE;
998   if (same_type_check (y, 0, x, 1) == FAILURE)
999     return FAILURE;
1000
1001   return SUCCESS;
1002 }
1003
1004
1005 static gfc_try
1006 gfc_check_atomic (gfc_expr *atom, gfc_expr *value)
1007 {
1008   if (!(atom->ts.type == BT_INTEGER && atom->ts.kind == gfc_atomic_int_kind)
1009       && !(atom->ts.type == BT_LOGICAL
1010            && atom->ts.kind == gfc_atomic_logical_kind))
1011     {
1012       gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1013                  "integer of ATOMIC_INT_KIND or a logical of "
1014                  "ATOMIC_LOGICAL_KIND", &atom->where, gfc_current_intrinsic);
1015       return FAILURE;
1016     }
1017
1018   if (!gfc_expr_attr (atom).codimension)
1019     {
1020       gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1021                  "coarray or coindexed", &atom->where, gfc_current_intrinsic);
1022       return FAILURE;
1023     }
1024
1025   if (atom->ts.type != value->ts.type)
1026     {
1027       gfc_error ("ATOM and VALUE argument of the %s intrinsic function shall "
1028                  "have the same type at %L", gfc_current_intrinsic,
1029                  &value->where);
1030       return FAILURE;
1031     }
1032
1033   return SUCCESS;
1034 }
1035
1036
1037 gfc_try
1038 gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value)
1039 {
1040   if (scalar_check (atom, 0) == FAILURE || scalar_check (value, 1) == FAILURE)
1041     return FAILURE;
1042
1043   if (gfc_check_vardef_context (atom, false, false, NULL) == FAILURE)
1044     {
1045       gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1046                  "definable", gfc_current_intrinsic, &atom->where);
1047       return FAILURE;
1048     }
1049
1050   return gfc_check_atomic (atom, value);
1051 }
1052
1053
1054 gfc_try
1055 gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom)
1056 {
1057   if (scalar_check (value, 0) == FAILURE || scalar_check (atom, 1) == FAILURE)
1058     return FAILURE;
1059
1060   if (gfc_check_vardef_context (value, false, false, NULL) == FAILURE)
1061     {
1062       gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1063                  "definable", gfc_current_intrinsic, &value->where);
1064       return FAILURE;
1065     }
1066
1067   return gfc_check_atomic (atom, value);
1068 }
1069
1070
1071 /* BESJN and BESYN functions.  */
1072
1073 gfc_try
1074 gfc_check_besn (gfc_expr *n, gfc_expr *x)
1075 {
1076   if (type_check (n, 0, BT_INTEGER) == FAILURE)
1077     return FAILURE;
1078   if (n->expr_type == EXPR_CONSTANT)
1079     {
1080       int i;
1081       gfc_extract_int (n, &i);
1082       if (i < 0 && gfc_notify_std (GFC_STD_GNU, "Extension: Negative argument "
1083                                    "N at %L", &n->where) == FAILURE)
1084         return FAILURE;
1085     }
1086
1087   if (type_check (x, 1, BT_REAL) == FAILURE)
1088     return FAILURE;
1089
1090   return SUCCESS;
1091 }
1092
1093
1094 /* Transformational version of the Bessel JN and YN functions.  */
1095
1096 gfc_try
1097 gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
1098 {
1099   if (type_check (n1, 0, BT_INTEGER) == FAILURE)
1100     return FAILURE;
1101   if (scalar_check (n1, 0) == FAILURE)
1102     return FAILURE;
1103   if (nonnegative_check("N1", n1) == FAILURE)
1104     return FAILURE;
1105
1106   if (type_check (n2, 1, BT_INTEGER) == FAILURE)
1107     return FAILURE;
1108   if (scalar_check (n2, 1) == FAILURE)
1109     return FAILURE;
1110   if (nonnegative_check("N2", n2) == FAILURE)
1111     return FAILURE;
1112
1113   if (type_check (x, 2, BT_REAL) == FAILURE)
1114     return FAILURE;
1115   if (scalar_check (x, 2) == FAILURE)
1116     return FAILURE;
1117
1118   return SUCCESS;
1119 }
1120
1121
1122 gfc_try
1123 gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1124 {
1125   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1126     return FAILURE;
1127
1128   if (type_check (j, 1, BT_INTEGER) == FAILURE)
1129     return FAILURE;
1130
1131   return SUCCESS;
1132 }
1133
1134
1135 gfc_try
1136 gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1137 {
1138   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1139     return FAILURE;
1140
1141   if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1142     return FAILURE;
1143
1144   if (nonnegative_check ("pos", pos) == FAILURE)
1145     return FAILURE;
1146
1147   if (less_than_bitsize1 ("i", i, "pos", pos, false) == FAILURE)
1148     return FAILURE;
1149
1150   return SUCCESS;
1151 }
1152
1153
1154 gfc_try
1155 gfc_check_char (gfc_expr *i, gfc_expr *kind)
1156 {
1157   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1158     return FAILURE;
1159   if (kind_check (kind, 1, BT_CHARACTER) == FAILURE)
1160     return FAILURE;
1161
1162   return SUCCESS;
1163 }
1164
1165
1166 gfc_try
1167 gfc_check_chdir (gfc_expr *dir)
1168 {
1169   if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1170     return FAILURE;
1171   if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1172     return FAILURE;
1173
1174   return SUCCESS;
1175 }
1176
1177
1178 gfc_try
1179 gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1180 {
1181   if (type_check (dir, 0, BT_CHARACTER) == FAILURE)
1182     return FAILURE;
1183   if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE)
1184     return FAILURE;
1185
1186   if (status == NULL)
1187     return SUCCESS;
1188
1189   if (type_check (status, 1, BT_INTEGER) == FAILURE)
1190     return FAILURE;
1191   if (scalar_check (status, 1) == FAILURE)
1192     return FAILURE;
1193
1194   return SUCCESS;
1195 }
1196
1197
1198 gfc_try
1199 gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
1200 {
1201   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1202     return FAILURE;
1203   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1204     return FAILURE;
1205
1206   if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1207     return FAILURE;
1208   if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1209     return FAILURE;
1210
1211   return SUCCESS;
1212 }
1213
1214
1215 gfc_try
1216 gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
1217 {
1218   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
1219     return FAILURE;
1220   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
1221     return FAILURE;
1222
1223   if (type_check (mode, 1, BT_CHARACTER) == FAILURE)
1224     return FAILURE;
1225   if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE)
1226     return FAILURE;
1227
1228   if (status == NULL)
1229     return SUCCESS;
1230
1231   if (type_check (status, 2, BT_INTEGER) == FAILURE)
1232     return FAILURE;
1233
1234   if (scalar_check (status, 2) == FAILURE)
1235     return FAILURE;
1236
1237   return SUCCESS;
1238 }
1239
1240
1241 gfc_try
1242 gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
1243 {
1244   if (numeric_check (x, 0) == FAILURE)
1245     return FAILURE;
1246
1247   if (y != NULL)
1248     {
1249       if (numeric_check (y, 1) == FAILURE)
1250         return FAILURE;
1251
1252       if (x->ts.type == BT_COMPLEX)
1253         {
1254           gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1255                      "present if 'x' is COMPLEX",
1256                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1257                      &y->where);
1258           return FAILURE;
1259         }
1260
1261       if (y->ts.type == BT_COMPLEX)
1262         {
1263           gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1264                      "of either REAL or INTEGER",
1265                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1266                      &y->where);
1267           return FAILURE;
1268         }
1269
1270     }
1271
1272   if (kind_check (kind, 2, BT_COMPLEX) == FAILURE)
1273     return FAILURE;
1274
1275   return SUCCESS;
1276 }
1277
1278
1279 gfc_try
1280 gfc_check_complex (gfc_expr *x, gfc_expr *y)
1281 {
1282   if (int_or_real_check (x, 0) == FAILURE)
1283     return FAILURE;
1284   if (scalar_check (x, 0) == FAILURE)
1285     return FAILURE;
1286
1287   if (int_or_real_check (y, 1) == FAILURE)
1288     return FAILURE;
1289   if (scalar_check (y, 1) == FAILURE)
1290     return FAILURE;
1291
1292   return SUCCESS;
1293 }
1294
1295
1296 gfc_try
1297 gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
1298 {
1299   if (logical_array_check (mask, 0) == FAILURE)
1300     return FAILURE;
1301   if (dim_check (dim, 1, false) == FAILURE)
1302     return FAILURE;
1303   if (dim_rank_check (dim, mask, 0) == FAILURE)
1304     return FAILURE;
1305   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
1306     return FAILURE;
1307   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1308                               "with KIND argument at %L",
1309                               gfc_current_intrinsic, &kind->where) == FAILURE)
1310     return FAILURE;
1311
1312   return SUCCESS;
1313 }
1314
1315
1316 gfc_try
1317 gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
1318 {
1319   if (array_check (array, 0) == FAILURE)
1320     return FAILURE;
1321
1322   if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1323     return FAILURE;
1324
1325   if (dim_check (dim, 2, true) == FAILURE)
1326     return FAILURE;
1327
1328   if (dim_rank_check (dim, array, false) == FAILURE)
1329     return FAILURE;
1330
1331   if (array->rank == 1 || shift->rank == 0)
1332     {
1333       if (scalar_check (shift, 1) == FAILURE)
1334         return FAILURE;
1335     }
1336   else if (shift->rank == array->rank - 1)
1337     {
1338       int d;
1339       if (!dim)
1340         d = 1;
1341       else if (dim->expr_type == EXPR_CONSTANT)
1342         gfc_extract_int (dim, &d);
1343       else
1344         d = -1;
1345
1346       if (d > 0)
1347         {
1348           int i, j;
1349           for (i = 0, j = 0; i < array->rank; i++)
1350             if (i != d - 1)
1351               {
1352                 if (!identical_dimen_shape (array, i, shift, j))
1353                   {
1354                     gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1355                                "invalid shape in dimension %d (%ld/%ld)",
1356                                gfc_current_intrinsic_arg[1]->name,
1357                                gfc_current_intrinsic, &shift->where, i + 1,
1358                                mpz_get_si (array->shape[i]),
1359                                mpz_get_si (shift->shape[j]));
1360                     return FAILURE;
1361                   }
1362
1363                 j += 1;
1364               }
1365         }
1366     }
1367   else
1368     {
1369       gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1370                  "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1371                  gfc_current_intrinsic, &shift->where, array->rank - 1);
1372       return FAILURE;
1373     }
1374
1375   return SUCCESS;
1376 }
1377
1378
1379 gfc_try
1380 gfc_check_ctime (gfc_expr *time)
1381 {
1382   if (scalar_check (time, 0) == FAILURE)
1383     return FAILURE;
1384
1385   if (type_check (time, 0, BT_INTEGER) == FAILURE)
1386     return FAILURE;
1387
1388   return SUCCESS;
1389 }
1390
1391
1392 gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
1393 {
1394   if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE)
1395     return FAILURE;
1396
1397   return SUCCESS;
1398 }
1399
1400 gfc_try
1401 gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
1402 {
1403   if (numeric_check (x, 0) == FAILURE)
1404     return FAILURE;
1405
1406   if (y != NULL)
1407     {
1408       if (numeric_check (y, 1) == FAILURE)
1409         return FAILURE;
1410
1411       if (x->ts.type == BT_COMPLEX)
1412         {
1413           gfc_error ("'%s' argument of '%s' intrinsic at %L must not be "
1414                      "present if 'x' is COMPLEX",
1415                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1416                      &y->where);
1417           return FAILURE;
1418         }
1419
1420       if (y->ts.type == BT_COMPLEX)
1421         {
1422           gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type "
1423                      "of either REAL or INTEGER",
1424                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1425                      &y->where);
1426           return FAILURE;
1427         }
1428     }
1429
1430   return SUCCESS;
1431 }
1432
1433
1434 gfc_try
1435 gfc_check_dble (gfc_expr *x)
1436 {
1437   if (numeric_check (x, 0) == FAILURE)
1438     return FAILURE;
1439
1440   return SUCCESS;
1441 }
1442
1443
1444 gfc_try
1445 gfc_check_digits (gfc_expr *x)
1446 {
1447   if (int_or_real_check (x, 0) == FAILURE)
1448     return FAILURE;
1449
1450   return SUCCESS;
1451 }
1452
1453
1454 gfc_try
1455 gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
1456 {
1457   switch (vector_a->ts.type)
1458     {
1459     case BT_LOGICAL:
1460       if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE)
1461         return FAILURE;
1462       break;
1463
1464     case BT_INTEGER:
1465     case BT_REAL:
1466     case BT_COMPLEX:
1467       if (numeric_check (vector_b, 1) == FAILURE)
1468         return FAILURE;
1469       break;
1470
1471     default:
1472       gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
1473                  "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
1474                  gfc_current_intrinsic, &vector_a->where);
1475       return FAILURE;
1476     }
1477
1478   if (rank_check (vector_a, 0, 1) == FAILURE)
1479     return FAILURE;
1480
1481   if (rank_check (vector_b, 1, 1) == FAILURE)
1482     return FAILURE;
1483
1484   if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
1485     {
1486       gfc_error ("Different shape for arguments '%s' and '%s' at %L for "
1487                  "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0]->name,
1488                  gfc_current_intrinsic_arg[1]->name, &vector_a->where);
1489       return FAILURE;
1490     }
1491
1492   return SUCCESS;
1493 }
1494
1495
1496 gfc_try
1497 gfc_check_dprod (gfc_expr *x, gfc_expr *y)
1498 {
1499   if (type_check (x, 0, BT_REAL) == FAILURE
1500       || type_check (y, 1, BT_REAL) == FAILURE)
1501     return FAILURE;
1502
1503   if (x->ts.kind != gfc_default_real_kind)
1504     {
1505       gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1506                  "real", gfc_current_intrinsic_arg[0]->name,
1507                  gfc_current_intrinsic, &x->where);
1508       return FAILURE;
1509     }
1510
1511   if (y->ts.kind != gfc_default_real_kind)
1512     {
1513       gfc_error ("'%s' argument of '%s' intrinsic at %L must be default "
1514                  "real", gfc_current_intrinsic_arg[1]->name,
1515                  gfc_current_intrinsic, &y->where);
1516       return FAILURE;
1517     }
1518
1519   return SUCCESS;
1520 }
1521
1522
1523 gfc_try
1524 gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
1525 {
1526   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1527     return FAILURE;
1528
1529   if (type_check (j, 1, BT_INTEGER) == FAILURE)
1530     return FAILURE;
1531
1532   if (i->is_boz && j->is_boz)
1533     {
1534       gfc_error ("'I' at %L and 'J' at %L cannot both be BOZ literal "
1535                  "constants", &i->where, &j->where);
1536       return FAILURE;
1537     }
1538
1539   if (!i->is_boz && !j->is_boz && same_type_check (i, 0, j, 1) == FAILURE)
1540     return FAILURE;
1541
1542   if (type_check (shift, 2, BT_INTEGER) == FAILURE)
1543     return FAILURE;
1544
1545   if (nonnegative_check ("SHIFT", shift) == FAILURE)
1546     return FAILURE;
1547
1548   if (i->is_boz)
1549     {
1550       if (less_than_bitsize1 ("J", j, "SHIFT", shift, true) == FAILURE)
1551         return FAILURE;
1552       i->ts.kind = j->ts.kind;
1553     }
1554   else
1555     {
1556       if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
1557         return FAILURE;
1558       j->ts.kind = i->ts.kind;
1559     }
1560
1561   return SUCCESS;
1562 }
1563
1564
1565 gfc_try
1566 gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
1567                    gfc_expr *dim)
1568 {
1569   if (array_check (array, 0) == FAILURE)
1570     return FAILURE;
1571
1572   if (type_check (shift, 1, BT_INTEGER) == FAILURE)
1573     return FAILURE;
1574
1575   if (dim_check (dim, 3, true) == FAILURE)
1576     return FAILURE;
1577
1578   if (dim_rank_check (dim, array, false) == FAILURE)
1579     return FAILURE;
1580
1581   if (array->rank == 1 || shift->rank == 0)
1582     {
1583       if (scalar_check (shift, 1) == FAILURE)
1584         return FAILURE;
1585     }
1586   else if (shift->rank == array->rank - 1)
1587     {
1588       int d;
1589       if (!dim)
1590         d = 1;
1591       else if (dim->expr_type == EXPR_CONSTANT)
1592         gfc_extract_int (dim, &d);
1593       else
1594         d = -1;
1595
1596       if (d > 0)
1597         {
1598           int i, j;
1599           for (i = 0, j = 0; i < array->rank; i++)
1600             if (i != d - 1)
1601               {
1602                 if (!identical_dimen_shape (array, i, shift, j))
1603                   {
1604                     gfc_error ("'%s' argument of '%s' intrinsic at %L has "
1605                                "invalid shape in dimension %d (%ld/%ld)",
1606                                gfc_current_intrinsic_arg[1]->name,
1607                                gfc_current_intrinsic, &shift->where, i + 1,
1608                                mpz_get_si (array->shape[i]),
1609                                mpz_get_si (shift->shape[j]));
1610                     return FAILURE;
1611                   }
1612
1613                 j += 1;
1614               }
1615         }
1616     }
1617   else
1618     {
1619       gfc_error ("'%s' argument of intrinsic '%s' at %L of must have rank "
1620                  "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
1621                  gfc_current_intrinsic, &shift->where, array->rank - 1);
1622       return FAILURE;
1623     }
1624
1625   if (boundary != NULL)
1626     {
1627       if (same_type_check (array, 0, boundary, 2) == FAILURE)
1628         return FAILURE;
1629
1630       if (array->rank == 1 || boundary->rank == 0)
1631         {
1632           if (scalar_check (boundary, 2) == FAILURE)
1633             return FAILURE;
1634         }
1635       else if (boundary->rank == array->rank - 1)
1636         {
1637           if (gfc_check_conformance (shift, boundary,
1638                                      "arguments '%s' and '%s' for "
1639                                      "intrinsic %s",
1640                                      gfc_current_intrinsic_arg[1]->name,
1641                                      gfc_current_intrinsic_arg[2]->name,
1642                                      gfc_current_intrinsic ) == FAILURE)
1643             return FAILURE;
1644         }
1645       else
1646         {
1647           gfc_error ("'%s' argument of intrinsic '%s' at %L of must have "
1648                      "rank %d or be a scalar",
1649                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1650                      &shift->where, array->rank - 1);
1651           return FAILURE;
1652         }
1653     }
1654
1655   return SUCCESS;
1656 }
1657
1658 gfc_try
1659 gfc_check_float (gfc_expr *a)
1660 {
1661   if (type_check (a, 0, BT_INTEGER) == FAILURE)
1662     return FAILURE;
1663
1664   if ((a->ts.kind != gfc_default_integer_kind)
1665       && gfc_notify_std (GFC_STD_GNU, "GNU extension: non-default INTEGER "
1666                          "kind argument to %s intrinsic at %L",
1667                          gfc_current_intrinsic, &a->where) == FAILURE   )
1668     return FAILURE;
1669
1670   return SUCCESS;
1671 }
1672
1673 /* A single complex argument.  */
1674
1675 gfc_try
1676 gfc_check_fn_c (gfc_expr *a)
1677 {
1678   if (type_check (a, 0, BT_COMPLEX) == FAILURE)
1679     return FAILURE;
1680
1681   return SUCCESS;
1682 }
1683
1684 /* A single real argument.  */
1685
1686 gfc_try
1687 gfc_check_fn_r (gfc_expr *a)
1688 {
1689   if (type_check (a, 0, BT_REAL) == FAILURE)
1690     return FAILURE;
1691
1692   return SUCCESS;
1693 }
1694
1695 /* A single double argument.  */
1696
1697 gfc_try
1698 gfc_check_fn_d (gfc_expr *a)
1699 {
1700   if (double_check (a, 0) == FAILURE)
1701     return FAILURE;
1702
1703   return SUCCESS;
1704 }
1705
1706 /* A single real or complex argument.  */
1707
1708 gfc_try
1709 gfc_check_fn_rc (gfc_expr *a)
1710 {
1711   if (real_or_complex_check (a, 0) == FAILURE)
1712     return FAILURE;
1713
1714   return SUCCESS;
1715 }
1716
1717
1718 gfc_try
1719 gfc_check_fn_rc2008 (gfc_expr *a)
1720 {
1721   if (real_or_complex_check (a, 0) == FAILURE)
1722     return FAILURE;
1723
1724   if (a->ts.type == BT_COMPLEX
1725       && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: COMPLEX argument '%s' "
1726                          "argument of '%s' intrinsic at %L",
1727                          gfc_current_intrinsic_arg[0]->name,
1728                          gfc_current_intrinsic, &a->where) == FAILURE)
1729     return FAILURE;
1730
1731   return SUCCESS;
1732 }
1733
1734
1735 gfc_try
1736 gfc_check_fnum (gfc_expr *unit)
1737 {
1738   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
1739     return FAILURE;
1740
1741   if (scalar_check (unit, 0) == FAILURE)
1742     return FAILURE;
1743
1744   return SUCCESS;
1745 }
1746
1747
1748 gfc_try
1749 gfc_check_huge (gfc_expr *x)
1750 {
1751   if (int_or_real_check (x, 0) == FAILURE)
1752     return FAILURE;
1753
1754   return SUCCESS;
1755 }
1756
1757
1758 gfc_try
1759 gfc_check_hypot (gfc_expr *x, gfc_expr *y)
1760 {
1761   if (type_check (x, 0, BT_REAL) == FAILURE)
1762     return FAILURE;
1763   if (same_type_check (x, 0, y, 1) == FAILURE)
1764     return FAILURE;
1765
1766   return SUCCESS;
1767 }
1768
1769
1770 /* Check that the single argument is an integer.  */
1771
1772 gfc_try
1773 gfc_check_i (gfc_expr *i)
1774 {
1775   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1776     return FAILURE;
1777
1778   return SUCCESS;
1779 }
1780
1781
1782 gfc_try
1783 gfc_check_iand (gfc_expr *i, gfc_expr *j)
1784 {
1785   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1786     return FAILURE;
1787
1788   if (type_check (j, 1, BT_INTEGER) == FAILURE)
1789     return FAILURE;
1790
1791   if (i->ts.kind != j->ts.kind)
1792     {
1793       if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1794                           &i->where) == FAILURE)
1795         return FAILURE;
1796     }
1797
1798   return SUCCESS;
1799 }
1800
1801
1802 gfc_try
1803 gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
1804 {
1805   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1806     return FAILURE;
1807
1808   if (type_check (pos, 1, BT_INTEGER) == FAILURE)
1809     return FAILURE;
1810
1811   if (type_check (len, 2, BT_INTEGER) == FAILURE)
1812     return FAILURE;
1813
1814   if (nonnegative_check ("pos", pos) == FAILURE)
1815     return FAILURE;
1816
1817   if (nonnegative_check ("len", len) == FAILURE)
1818     return FAILURE;
1819
1820   if (less_than_bitsize2 ("i", i, "pos", pos, "len", len) == FAILURE)
1821     return FAILURE;
1822
1823   return SUCCESS;
1824 }
1825
1826
1827 gfc_try
1828 gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
1829 {
1830   int i;
1831
1832   if (type_check (c, 0, BT_CHARACTER) == FAILURE)
1833     return FAILURE;
1834
1835   if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1836     return FAILURE;
1837
1838   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1839                               "with KIND argument at %L",
1840                               gfc_current_intrinsic, &kind->where) == FAILURE)
1841     return FAILURE;
1842
1843   if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
1844     {
1845       gfc_expr *start;
1846       gfc_expr *end;
1847       gfc_ref *ref;
1848
1849       /* Substring references don't have the charlength set.  */
1850       ref = c->ref;
1851       while (ref && ref->type != REF_SUBSTRING)
1852         ref = ref->next;
1853
1854       gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
1855
1856       if (!ref)
1857         {
1858           /* Check that the argument is length one.  Non-constant lengths
1859              can't be checked here, so assume they are ok.  */
1860           if (c->ts.u.cl && c->ts.u.cl->length)
1861             {
1862               /* If we already have a length for this expression then use it.  */
1863               if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
1864                 return SUCCESS;
1865               i = mpz_get_si (c->ts.u.cl->length->value.integer);
1866             }
1867           else 
1868             return SUCCESS;
1869         }
1870       else
1871         {
1872           start = ref->u.ss.start;
1873           end = ref->u.ss.end;
1874
1875           gcc_assert (start);
1876           if (end == NULL || end->expr_type != EXPR_CONSTANT
1877               || start->expr_type != EXPR_CONSTANT)
1878             return SUCCESS;
1879
1880           i = mpz_get_si (end->value.integer) + 1
1881             - mpz_get_si (start->value.integer);
1882         }
1883     }
1884   else
1885     return SUCCESS;
1886
1887   if (i != 1)
1888     {
1889       gfc_error ("Argument of %s at %L must be of length one", 
1890                  gfc_current_intrinsic, &c->where);
1891       return FAILURE;
1892     }
1893
1894   return SUCCESS;
1895 }
1896
1897
1898 gfc_try
1899 gfc_check_idnint (gfc_expr *a)
1900 {
1901   if (double_check (a, 0) == FAILURE)
1902     return FAILURE;
1903
1904   return SUCCESS;
1905 }
1906
1907
1908 gfc_try
1909 gfc_check_ieor (gfc_expr *i, gfc_expr *j)
1910 {
1911   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1912     return FAILURE;
1913
1914   if (type_check (j, 1, BT_INTEGER) == FAILURE)
1915     return FAILURE;
1916
1917   if (i->ts.kind != j->ts.kind)
1918     {
1919       if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1920                           &i->where) == FAILURE)
1921         return FAILURE;
1922     }
1923
1924   return SUCCESS;
1925 }
1926
1927
1928 gfc_try
1929 gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
1930                  gfc_expr *kind)
1931 {
1932   if (type_check (string, 0, BT_CHARACTER) == FAILURE
1933       || type_check (substring, 1, BT_CHARACTER) == FAILURE)
1934     return FAILURE;
1935
1936   if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE)
1937     return FAILURE;
1938
1939   if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
1940     return FAILURE;
1941   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
1942                               "with KIND argument at %L",
1943                               gfc_current_intrinsic, &kind->where) == FAILURE)
1944     return FAILURE;
1945
1946   if (string->ts.kind != substring->ts.kind)
1947     {
1948       gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same "
1949                  "kind as '%s'", gfc_current_intrinsic_arg[1]->name,
1950                  gfc_current_intrinsic, &substring->where,
1951                  gfc_current_intrinsic_arg[0]->name);
1952       return FAILURE;
1953     }
1954
1955   return SUCCESS;
1956 }
1957
1958
1959 gfc_try
1960 gfc_check_int (gfc_expr *x, gfc_expr *kind)
1961 {
1962   if (numeric_check (x, 0) == FAILURE)
1963     return FAILURE;
1964
1965   if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
1966     return FAILURE;
1967
1968   return SUCCESS;
1969 }
1970
1971
1972 gfc_try
1973 gfc_check_intconv (gfc_expr *x)
1974 {
1975   if (numeric_check (x, 0) == FAILURE)
1976     return FAILURE;
1977
1978   return SUCCESS;
1979 }
1980
1981
1982 gfc_try
1983 gfc_check_ior (gfc_expr *i, gfc_expr *j)
1984 {
1985   if (type_check (i, 0, BT_INTEGER) == FAILURE)
1986     return FAILURE;
1987
1988   if (type_check (j, 1, BT_INTEGER) == FAILURE)
1989     return FAILURE;
1990
1991   if (i->ts.kind != j->ts.kind)
1992     {
1993       if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L",
1994                           &i->where) == FAILURE)
1995         return FAILURE;
1996     }
1997
1998   return SUCCESS;
1999 }
2000
2001
2002 gfc_try
2003 gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
2004 {
2005   if (type_check (i, 0, BT_INTEGER) == FAILURE
2006       || type_check (shift, 1, BT_INTEGER) == FAILURE)
2007     return FAILURE;
2008
2009   if (less_than_bitsize1 ("I", i, NULL, shift, true) == FAILURE)
2010     return FAILURE;
2011
2012   return SUCCESS;
2013 }
2014
2015
2016 gfc_try
2017 gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
2018 {
2019   if (type_check (i, 0, BT_INTEGER) == FAILURE
2020       || type_check (shift, 1, BT_INTEGER) == FAILURE)
2021     return FAILURE;
2022
2023   if (size != NULL) 
2024     {
2025       int i2, i3;
2026
2027       if (type_check (size, 2, BT_INTEGER) == FAILURE)
2028         return FAILURE;
2029
2030       if (less_than_bitsize1 ("I", i, "SIZE", size, true) == FAILURE)
2031         return FAILURE;
2032
2033       if (size->expr_type == EXPR_CONSTANT)
2034         {
2035           gfc_extract_int (size, &i3);
2036           if (i3 <= 0)
2037             {
2038               gfc_error ("SIZE at %L must be positive", &size->where);
2039               return FAILURE;
2040             }
2041
2042           if (shift->expr_type == EXPR_CONSTANT)
2043             {
2044               gfc_extract_int (shift, &i2);
2045               if (i2 < 0)
2046                 i2 = -i2;
2047
2048               if (i2 > i3)
2049                 {
2050                   gfc_error ("The absolute value of SHIFT at %L must be less "
2051                              "than or equal to SIZE at %L", &shift->where,
2052                              &size->where);
2053                   return FAILURE;
2054                 }
2055              }
2056         }
2057     }
2058   else if (less_than_bitsize1 ("I", i, NULL, shift, true) == FAILURE)
2059     return FAILURE;
2060
2061   return SUCCESS;
2062 }
2063
2064
2065 gfc_try
2066 gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
2067 {
2068   if (type_check (pid, 0, BT_INTEGER) == FAILURE)
2069     return FAILURE;
2070
2071   if (type_check (sig, 1, BT_INTEGER) == FAILURE)
2072     return FAILURE;
2073
2074   return SUCCESS;
2075 }
2076
2077
2078 gfc_try
2079 gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
2080 {
2081   if (type_check (pid, 0, BT_INTEGER) == FAILURE)
2082     return FAILURE;
2083
2084   if (scalar_check (pid, 0) == FAILURE)
2085     return FAILURE;
2086
2087   if (type_check (sig, 1, BT_INTEGER) == FAILURE)
2088     return FAILURE;
2089
2090   if (scalar_check (sig, 1) == FAILURE)
2091     return FAILURE;
2092
2093   if (status == NULL)
2094     return SUCCESS;
2095
2096   if (type_check (status, 2, BT_INTEGER) == FAILURE)
2097     return FAILURE;
2098
2099   if (scalar_check (status, 2) == FAILURE)
2100     return FAILURE;
2101
2102   return SUCCESS;
2103 }
2104
2105
2106 gfc_try
2107 gfc_check_kind (gfc_expr *x)
2108 {
2109   if (x->ts.type == BT_DERIVED)
2110     {
2111       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a "
2112                  "non-derived type", gfc_current_intrinsic_arg[0]->name,
2113                  gfc_current_intrinsic, &x->where);
2114       return FAILURE;
2115     }
2116
2117   return SUCCESS;
2118 }
2119
2120
2121 gfc_try
2122 gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2123 {
2124   if (array_check (array, 0) == FAILURE)
2125     return FAILURE;
2126
2127   if (dim_check (dim, 1, false) == FAILURE)
2128     return FAILURE;
2129
2130   if (dim_rank_check (dim, array, 1) == FAILURE)
2131     return FAILURE;
2132
2133   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2134     return FAILURE;
2135   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2136                               "with KIND argument at %L",
2137                               gfc_current_intrinsic, &kind->where) == FAILURE)
2138     return FAILURE;
2139
2140   return SUCCESS;
2141 }
2142
2143
2144 gfc_try
2145 gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
2146 {
2147   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
2148     {
2149       gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
2150       return FAILURE;
2151     }
2152
2153   if (coarray_check (coarray, 0) == FAILURE)
2154     return FAILURE;
2155
2156   if (dim != NULL)
2157     {
2158       if (dim_check (dim, 1, false) == FAILURE)
2159         return FAILURE;
2160
2161       if (dim_corank_check (dim, coarray) == FAILURE)
2162         return FAILURE;
2163     }
2164
2165   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
2166     return FAILURE;
2167
2168   return SUCCESS;
2169 }
2170
2171
2172 gfc_try
2173 gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
2174 {
2175   if (type_check (s, 0, BT_CHARACTER) == FAILURE)
2176     return FAILURE;
2177
2178   if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2179     return FAILURE;
2180   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2181                               "with KIND argument at %L",
2182                               gfc_current_intrinsic, &kind->where) == FAILURE)
2183     return FAILURE;
2184
2185   return SUCCESS;
2186 }
2187
2188
2189 gfc_try
2190 gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
2191 {
2192   if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2193     return FAILURE;
2194   if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE)
2195     return FAILURE;
2196
2197   if (type_check (b, 1, BT_CHARACTER) == FAILURE)
2198     return FAILURE;
2199   if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE)
2200     return FAILURE;
2201
2202   return SUCCESS;
2203 }
2204
2205
2206 gfc_try
2207 gfc_check_link (gfc_expr *path1, gfc_expr *path2)
2208 {
2209   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2210     return FAILURE;
2211   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2212     return FAILURE;
2213
2214   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2215     return FAILURE;
2216   if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2217     return FAILURE;
2218
2219   return SUCCESS;
2220 }
2221
2222
2223 gfc_try
2224 gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2225 {
2226   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2227     return FAILURE;
2228   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2229     return FAILURE;
2230
2231   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2232     return FAILURE;
2233   if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE)
2234     return FAILURE;
2235
2236   if (status == NULL)
2237     return SUCCESS;
2238
2239   if (type_check (status, 2, BT_INTEGER) == FAILURE)
2240     return FAILURE;
2241
2242   if (scalar_check (status, 2) == FAILURE)
2243     return FAILURE;
2244
2245   return SUCCESS;
2246 }
2247
2248
2249 gfc_try
2250 gfc_check_loc (gfc_expr *expr)
2251 {
2252   return variable_check (expr, 0, true);
2253 }
2254
2255
2256 gfc_try
2257 gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
2258 {
2259   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2260     return FAILURE;
2261   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2262     return FAILURE;
2263
2264   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2265     return FAILURE;
2266   if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2267     return FAILURE;
2268
2269   return SUCCESS;
2270 }
2271
2272
2273 gfc_try
2274 gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
2275 {
2276   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
2277     return FAILURE;
2278   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
2279     return FAILURE;
2280
2281   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
2282     return FAILURE;
2283   if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
2284     return FAILURE;
2285
2286   if (status == NULL)
2287     return SUCCESS;
2288
2289   if (type_check (status, 2, BT_INTEGER) == FAILURE)
2290     return FAILURE;
2291
2292   if (scalar_check (status, 2) == FAILURE)
2293     return FAILURE;
2294
2295   return SUCCESS;
2296 }
2297
2298
2299 gfc_try
2300 gfc_check_logical (gfc_expr *a, gfc_expr *kind)
2301 {
2302   if (type_check (a, 0, BT_LOGICAL) == FAILURE)
2303     return FAILURE;
2304   if (kind_check (kind, 1, BT_LOGICAL) == FAILURE)
2305     return FAILURE;
2306
2307   return SUCCESS;
2308 }
2309
2310
2311 /* Min/max family.  */
2312
2313 static gfc_try
2314 min_max_args (gfc_actual_arglist *arg)
2315 {
2316   if (arg == NULL || arg->next == NULL)
2317     {
2318       gfc_error ("Intrinsic '%s' at %L must have at least two arguments",
2319                  gfc_current_intrinsic, gfc_current_intrinsic_where);
2320       return FAILURE;
2321     }
2322
2323   return SUCCESS;
2324 }
2325
2326
2327 static gfc_try
2328 check_rest (bt type, int kind, gfc_actual_arglist *arglist)
2329 {
2330   gfc_actual_arglist *arg, *tmp;
2331
2332   gfc_expr *x;
2333   int m, n;
2334
2335   if (min_max_args (arglist) == FAILURE)
2336     return FAILURE;
2337
2338   for (arg = arglist, n=1; arg; arg = arg->next, n++)
2339     {
2340       x = arg->expr;
2341       if (x->ts.type != type || x->ts.kind != kind)
2342         {
2343           if (x->ts.type == type)
2344             {
2345               if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type "
2346                                   "kinds at %L", &x->where) == FAILURE)
2347                 return FAILURE;
2348             }
2349           else
2350             {
2351               gfc_error ("'a%d' argument of '%s' intrinsic at %L must be "
2352                          "%s(%d)", n, gfc_current_intrinsic, &x->where,
2353                          gfc_basic_typename (type), kind);
2354               return FAILURE;
2355             }
2356         }
2357
2358       for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
2359         if (gfc_check_conformance (tmp->expr, x,
2360                                    "arguments 'a%d' and 'a%d' for "
2361                                    "intrinsic '%s'", m, n,
2362                                    gfc_current_intrinsic) == FAILURE)
2363             return FAILURE;
2364     }
2365
2366   return SUCCESS;
2367 }
2368
2369
2370 gfc_try
2371 gfc_check_min_max (gfc_actual_arglist *arg)
2372 {
2373   gfc_expr *x;
2374
2375   if (min_max_args (arg) == FAILURE)
2376     return FAILURE;
2377
2378   x = arg->expr;
2379
2380   if (x->ts.type == BT_CHARACTER)
2381     {
2382       if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
2383                           "with CHARACTER argument at %L",
2384                           gfc_current_intrinsic, &x->where) == FAILURE)
2385         return FAILURE;
2386     }
2387   else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
2388     {
2389       gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, "
2390                  "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
2391       return FAILURE;
2392     }
2393
2394   return check_rest (x->ts.type, x->ts.kind, arg);
2395 }
2396
2397
2398 gfc_try
2399 gfc_check_min_max_integer (gfc_actual_arglist *arg)
2400 {
2401   return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
2402 }
2403
2404
2405 gfc_try
2406 gfc_check_min_max_real (gfc_actual_arglist *arg)
2407 {
2408   return check_rest (BT_REAL, gfc_default_real_kind, arg);
2409 }
2410
2411
2412 gfc_try
2413 gfc_check_min_max_double (gfc_actual_arglist *arg)
2414 {
2415   return check_rest (BT_REAL, gfc_default_double_kind, arg);
2416 }
2417
2418
2419 /* End of min/max family.  */
2420
2421 gfc_try
2422 gfc_check_malloc (gfc_expr *size)
2423 {
2424   if (type_check (size, 0, BT_INTEGER) == FAILURE)
2425     return FAILURE;
2426
2427   if (scalar_check (size, 0) == FAILURE)
2428     return FAILURE;
2429
2430   return SUCCESS;
2431 }
2432
2433
2434 gfc_try
2435 gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
2436 {
2437   if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
2438     {
2439       gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2440                  "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2441                  gfc_current_intrinsic, &matrix_a->where);
2442       return FAILURE;
2443     }
2444
2445   if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
2446     {
2447       gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric "
2448                  "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
2449                  gfc_current_intrinsic, &matrix_b->where);
2450       return FAILURE;
2451     }
2452
2453   if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
2454       || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
2455     {
2456       gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)",
2457                  gfc_current_intrinsic, &matrix_a->where,
2458                  gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
2459        return FAILURE;
2460     }
2461
2462   switch (matrix_a->rank)
2463     {
2464     case 1:
2465       if (rank_check (matrix_b, 1, 2) == FAILURE)
2466         return FAILURE;
2467       /* Check for case matrix_a has shape(m), matrix_b has shape (m, k).  */
2468       if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
2469         {
2470           gfc_error ("Different shape on dimension 1 for arguments '%s' "
2471                      "and '%s' at %L for intrinsic matmul",
2472                      gfc_current_intrinsic_arg[0]->name,
2473                      gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2474           return FAILURE;
2475         }
2476       break;
2477
2478     case 2:
2479       if (matrix_b->rank != 2)
2480         {
2481           if (rank_check (matrix_b, 1, 1) == FAILURE)
2482             return FAILURE;
2483         }
2484       /* matrix_b has rank 1 or 2 here. Common check for the cases
2485          - matrix_a has shape (n,m) and matrix_b has shape (m, k)
2486          - matrix_a has shape (n,m) and matrix_b has shape (m).  */
2487       if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
2488         {
2489           gfc_error ("Different shape on dimension 2 for argument '%s' and "
2490                      "dimension 1 for argument '%s' at %L for intrinsic "
2491                      "matmul", gfc_current_intrinsic_arg[0]->name,
2492                      gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
2493           return FAILURE;
2494         }
2495       break;
2496
2497     default:
2498       gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank "
2499                  "1 or 2", gfc_current_intrinsic_arg[0]->name,
2500                  gfc_current_intrinsic, &matrix_a->where);
2501       return FAILURE;
2502     }
2503
2504   return SUCCESS;
2505 }
2506
2507
2508 /* Whoever came up with this interface was probably on something.
2509    The possibilities for the occupation of the second and third
2510    parameters are:
2511
2512          Arg #2     Arg #3
2513          NULL       NULL
2514          DIM    NULL
2515          MASK       NULL
2516          NULL       MASK             minloc(array, mask=m)
2517          DIM    MASK
2518
2519    I.e. in the case of minloc(array,mask), mask will be in the second
2520    position of the argument list and we'll have to fix that up.  */
2521
2522 gfc_try
2523 gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
2524 {
2525   gfc_expr *a, *m, *d;
2526
2527   a = ap->expr;
2528   if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE)
2529     return FAILURE;
2530
2531   d = ap->next->expr;
2532   m = ap->next->next->expr;
2533
2534   if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2535       && ap->next->name == NULL)
2536     {
2537       m = d;
2538       d = NULL;
2539       ap->next->expr = NULL;
2540       ap->next->next->expr = m;
2541     }
2542
2543   if (dim_check (d, 1, false) == FAILURE)
2544     return FAILURE;
2545
2546   if (dim_rank_check (d, a, 0) == FAILURE)
2547     return FAILURE;
2548
2549   if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2550     return FAILURE;
2551
2552   if (m != NULL
2553       && gfc_check_conformance (a, m,
2554                                 "arguments '%s' and '%s' for intrinsic %s",
2555                                 gfc_current_intrinsic_arg[0]->name,
2556                                 gfc_current_intrinsic_arg[2]->name,
2557                                 gfc_current_intrinsic ) == FAILURE)
2558     return FAILURE;
2559
2560   return SUCCESS;
2561 }
2562
2563
2564 /* Similar to minloc/maxloc, the argument list might need to be
2565    reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics.  The
2566    difference is that MINLOC/MAXLOC take an additional KIND argument.
2567    The possibilities are:
2568
2569          Arg #2     Arg #3
2570          NULL       NULL
2571          DIM    NULL
2572          MASK       NULL
2573          NULL       MASK             minval(array, mask=m)
2574          DIM    MASK
2575
2576    I.e. in the case of minval(array,mask), mask will be in the second
2577    position of the argument list and we'll have to fix that up.  */
2578
2579 static gfc_try
2580 check_reduction (gfc_actual_arglist *ap)
2581 {
2582   gfc_expr *a, *m, *d;
2583
2584   a = ap->expr;
2585   d = ap->next->expr;
2586   m = ap->next->next->expr;
2587
2588   if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
2589       && ap->next->name == NULL)
2590     {
2591       m = d;
2592       d = NULL;
2593       ap->next->expr = NULL;
2594       ap->next->next->expr = m;
2595     }
2596
2597   if (dim_check (d, 1, false) == FAILURE)
2598     return FAILURE;
2599
2600   if (dim_rank_check (d, a, 0) == FAILURE)
2601     return FAILURE;
2602
2603   if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE)
2604     return FAILURE;
2605
2606   if (m != NULL
2607       && gfc_check_conformance (a, m,
2608                                 "arguments '%s' and '%s' for intrinsic %s",
2609                                 gfc_current_intrinsic_arg[0]->name,
2610                                 gfc_current_intrinsic_arg[2]->name,
2611                                 gfc_current_intrinsic) == FAILURE)
2612     return FAILURE;
2613
2614   return SUCCESS;
2615 }
2616
2617
2618 gfc_try
2619 gfc_check_minval_maxval (gfc_actual_arglist *ap)
2620 {
2621   if (int_or_real_check (ap->expr, 0) == FAILURE
2622       || array_check (ap->expr, 0) == FAILURE)
2623     return FAILURE;
2624
2625   return check_reduction (ap);
2626 }
2627
2628
2629 gfc_try
2630 gfc_check_product_sum (gfc_actual_arglist *ap)
2631 {
2632   if (numeric_check (ap->expr, 0) == FAILURE
2633       || array_check (ap->expr, 0) == FAILURE)
2634     return FAILURE;
2635
2636   return check_reduction (ap);
2637 }
2638
2639
2640 /* For IANY, IALL and IPARITY.  */
2641
2642 gfc_try
2643 gfc_check_mask (gfc_expr *i, gfc_expr *kind)
2644 {
2645   int k;
2646
2647   if (type_check (i, 0, BT_INTEGER) == FAILURE)
2648     return FAILURE;
2649
2650   if (nonnegative_check ("I", i) == FAILURE)
2651     return FAILURE;
2652
2653   if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
2654     return FAILURE;
2655
2656   if (kind)
2657     gfc_extract_int (kind, &k);
2658   else
2659     k = gfc_default_integer_kind;
2660
2661   if (less_than_bitsizekind ("I", i, k) == FAILURE)
2662     return FAILURE;
2663
2664   return SUCCESS;
2665 }
2666
2667
2668 gfc_try
2669 gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
2670 {
2671   if (ap->expr->ts.type != BT_INTEGER)
2672     {
2673       gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER",
2674                  gfc_current_intrinsic_arg[0]->name,
2675                  gfc_current_intrinsic, &ap->expr->where);
2676       return FAILURE;
2677     }
2678
2679   if (array_check (ap->expr, 0) == FAILURE)
2680     return FAILURE;
2681
2682   return check_reduction (ap);
2683 }
2684
2685
2686 gfc_try
2687 gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
2688 {
2689   if (same_type_check (tsource, 0, fsource, 1) == FAILURE)
2690     return FAILURE;
2691
2692   if (type_check (mask, 2, BT_LOGICAL) == FAILURE)
2693     return FAILURE;
2694
2695   if (tsource->ts.type == BT_CHARACTER)
2696     return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
2697
2698   return SUCCESS;
2699 }
2700
2701
2702 gfc_try
2703 gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
2704 {
2705   if (type_check (i, 0, BT_INTEGER) == FAILURE)
2706     return FAILURE;
2707
2708   if (type_check (j, 1, BT_INTEGER) == FAILURE)
2709     return FAILURE;
2710
2711   if (type_check (mask, 2, BT_INTEGER) == FAILURE)
2712     return FAILURE;
2713
2714   if (same_type_check (i, 0, j, 1) == FAILURE)
2715     return FAILURE;
2716
2717   if (same_type_check (i, 0, mask, 2) == FAILURE)
2718     return FAILURE;
2719
2720   return SUCCESS;
2721 }
2722
2723
2724 gfc_try
2725 gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
2726 {
2727   if (variable_check (from, 0, false) == FAILURE)
2728     return FAILURE;
2729   if (allocatable_check (from, 0) == FAILURE)
2730     return FAILURE;
2731
2732   if (variable_check (to, 1, false) == FAILURE)
2733     return FAILURE;
2734   if (allocatable_check (to, 1) == FAILURE)
2735     return FAILURE;
2736
2737   if (from->ts.type == BT_CLASS && to->ts.type == BT_DERIVED)
2738     {
2739       gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
2740                  "polymorphic if FROM is polymorphic",
2741                  &from->where);
2742       return FAILURE;
2743     }
2744
2745   if (same_type_check (to, 1, from, 0) == FAILURE)
2746     return FAILURE;
2747
2748   if (to->rank != from->rank)
2749     {
2750       gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2751                  "have the same rank %d/%d", gfc_current_intrinsic_arg[0]->name,
2752                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2753                  &to->where,  from->rank, to->rank);
2754       return FAILURE;
2755     }
2756
2757   if (to->ts.kind != from->ts.kind)
2758     {
2759       gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must "
2760                  "be of the same kind %d/%d",
2761                  gfc_current_intrinsic_arg[0]->name,
2762                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2763                  &to->where, from->ts.kind, to->ts.kind);
2764       return FAILURE;
2765     }
2766
2767   /* CLASS arguments: Make sure the vtab of from is present.  */
2768   if (to->ts.type == BT_CLASS)
2769     gfc_find_derived_vtab (from->ts.u.derived);
2770
2771   return SUCCESS;
2772 }
2773
2774
2775 gfc_try
2776 gfc_check_nearest (gfc_expr *x, gfc_expr *s)
2777 {
2778   if (type_check (x, 0, BT_REAL) == FAILURE)
2779     return FAILURE;
2780
2781   if (type_check (s, 1, BT_REAL) == FAILURE)
2782     return FAILURE;
2783
2784   if (s->expr_type == EXPR_CONSTANT)
2785     {
2786       if (mpfr_sgn (s->value.real) == 0)
2787         {
2788           gfc_error ("Argument 'S' of NEAREST at %L shall not be zero",
2789                      &s->where);
2790           return FAILURE;
2791         }
2792     }
2793
2794   return SUCCESS;
2795 }
2796
2797
2798 gfc_try
2799 gfc_check_new_line (gfc_expr *a)
2800 {
2801   if (type_check (a, 0, BT_CHARACTER) == FAILURE)
2802     return FAILURE;
2803
2804   return SUCCESS;
2805 }
2806
2807
2808 gfc_try
2809 gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
2810 {
2811   if (type_check (array, 0, BT_REAL) == FAILURE)
2812     return FAILURE;
2813
2814   if (array_check (array, 0) == FAILURE)
2815     return FAILURE;
2816
2817   if (dim_rank_check (dim, array, false) == FAILURE)
2818     return FAILURE;
2819
2820   return SUCCESS;
2821 }
2822
2823 gfc_try
2824 gfc_check_null (gfc_expr *mold)
2825 {
2826   symbol_attribute attr;
2827
2828   if (mold == NULL)
2829     return SUCCESS;
2830
2831   if (variable_check (mold, 0, true) == FAILURE)
2832     return FAILURE;
2833
2834   attr = gfc_variable_attr (mold, NULL);
2835
2836   if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
2837     {
2838       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER, "
2839                  "ALLOCATABLE or procedure pointer",
2840                  gfc_current_intrinsic_arg[0]->name,
2841                  gfc_current_intrinsic, &mold->where);
2842       return FAILURE;
2843     }
2844
2845   if (attr.allocatable
2846       && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: NULL intrinsic with "
2847                          "allocatable MOLD at %L", &mold->where) == FAILURE)
2848     return FAILURE;
2849
2850   /* F2008, C1242.  */
2851   if (gfc_is_coindexed (mold))
2852     {
2853       gfc_error ("'%s' argument of '%s' intrinsic at %L shall not be "
2854                  "conindexed", gfc_current_intrinsic_arg[0]->name,
2855                  gfc_current_intrinsic, &mold->where);
2856       return FAILURE;
2857     }
2858
2859   return SUCCESS;
2860 }
2861
2862
2863 gfc_try
2864 gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
2865 {
2866   if (array_check (array, 0) == FAILURE)
2867     return FAILURE;
2868
2869   if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
2870     return FAILURE;
2871
2872   if (gfc_check_conformance (array, mask,
2873                              "arguments '%s' and '%s' for intrinsic '%s'",
2874                              gfc_current_intrinsic_arg[0]->name,
2875                              gfc_current_intrinsic_arg[1]->name,
2876                              gfc_current_intrinsic) == FAILURE)
2877     return FAILURE;
2878
2879   if (vector != NULL)
2880     {
2881       mpz_t array_size, vector_size;
2882       bool have_array_size, have_vector_size;
2883
2884       if (same_type_check (array, 0, vector, 2) == FAILURE)
2885         return FAILURE;
2886
2887       if (rank_check (vector, 2, 1) == FAILURE)
2888         return FAILURE;
2889
2890       /* VECTOR requires at least as many elements as MASK
2891          has .TRUE. values.  */
2892       have_array_size = gfc_array_size (array, &array_size) == SUCCESS;
2893       have_vector_size = gfc_array_size (vector, &vector_size) == SUCCESS;
2894
2895       if (have_vector_size
2896           && (mask->expr_type == EXPR_ARRAY
2897               || (mask->expr_type == EXPR_CONSTANT
2898                   && have_array_size)))
2899         {
2900           int mask_true_values = 0;
2901
2902           if (mask->expr_type == EXPR_ARRAY)
2903             {
2904               gfc_constructor *mask_ctor;
2905               mask_ctor = gfc_constructor_first (mask->value.constructor);
2906               while (mask_ctor)
2907                 {
2908                   if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
2909                     {
2910                       mask_true_values = 0;
2911                       break;
2912                     }
2913
2914                   if (mask_ctor->expr->value.logical)
2915                     mask_true_values++;
2916
2917                   mask_ctor = gfc_constructor_next (mask_ctor);
2918                 }
2919             }
2920           else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
2921             mask_true_values = mpz_get_si (array_size);
2922
2923           if (mpz_get_si (vector_size) < mask_true_values)
2924             {
2925               gfc_error ("'%s' argument of '%s' intrinsic at %L must "
2926                          "provide at least as many elements as there "
2927                          "are .TRUE. values in '%s' (%ld/%d)",
2928                          gfc_current_intrinsic_arg[2]->name,
2929                          gfc_current_intrinsic, &vector->where,
2930                          gfc_current_intrinsic_arg[1]->name,
2931                          mpz_get_si (vector_size), mask_true_values);
2932               return FAILURE;
2933             }
2934         }
2935
2936       if (have_array_size)
2937         mpz_clear (array_size);
2938       if (have_vector_size)
2939         mpz_clear (vector_size);
2940     }
2941
2942   return SUCCESS;
2943 }
2944
2945
2946 gfc_try
2947 gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
2948 {
2949   if (type_check (mask, 0, BT_LOGICAL) == FAILURE)
2950     return FAILURE;
2951
2952   if (array_check (mask, 0) == FAILURE)
2953     return FAILURE;
2954
2955   if (dim_rank_check (dim, mask, false) == FAILURE)
2956     return FAILURE;
2957
2958   return SUCCESS;
2959 }
2960
2961
2962 gfc_try
2963 gfc_check_precision (gfc_expr *x)
2964 {
2965   if (real_or_complex_check (x, 0) == FAILURE)
2966     return FAILURE;
2967
2968   return SUCCESS;
2969 }
2970
2971
2972 gfc_try
2973 gfc_check_present (gfc_expr *a)
2974 {
2975   gfc_symbol *sym;
2976
2977   if (variable_check (a, 0, true) == FAILURE)
2978     return FAILURE;
2979
2980   sym = a->symtree->n.sym;
2981   if (!sym->attr.dummy)
2982     {
2983       gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a "
2984                  "dummy variable", gfc_current_intrinsic_arg[0]->name,
2985                  gfc_current_intrinsic, &a->where);
2986       return FAILURE;
2987     }
2988
2989   if (!sym->attr.optional)
2990     {
2991       gfc_error ("'%s' argument of '%s' intrinsic at %L must be of "
2992                  "an OPTIONAL dummy variable",
2993                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
2994                  &a->where);
2995       return FAILURE;
2996     }
2997
2998   /* 13.14.82  PRESENT(A)
2999      ......
3000      Argument.  A shall be the name of an optional dummy argument that is
3001      accessible in the subprogram in which the PRESENT function reference
3002      appears...  */
3003
3004   if (a->ref != NULL
3005       && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
3006            && (a->ref->u.ar.type == AR_FULL
3007                || (a->ref->u.ar.type == AR_ELEMENT
3008                    && a->ref->u.ar.as->rank == 0))))
3009     {
3010       gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a "
3011                  "subobject of '%s'", gfc_current_intrinsic_arg[0]->name,
3012                  gfc_current_intrinsic, &a->where, sym->name);
3013       return FAILURE;
3014     }
3015
3016   return SUCCESS;
3017 }
3018
3019
3020 gfc_try
3021 gfc_check_radix (gfc_expr *x)
3022 {
3023   if (int_or_real_check (x, 0) == FAILURE)
3024     return FAILURE;
3025
3026   return SUCCESS;
3027 }
3028
3029
3030 gfc_try
3031 gfc_check_range (gfc_expr *x)
3032 {
3033   if (numeric_check (x, 0) == FAILURE)
3034     return FAILURE;
3035
3036   return SUCCESS;
3037 }
3038
3039
3040 gfc_try
3041 gfc_check_rank (gfc_expr *a ATTRIBUTE_UNUSED)
3042 {
3043   /* Any data object is allowed; a "data object" is a "constant (4.1.3),
3044      variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45).  */
3045
3046   bool is_variable = true;
3047
3048   /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
3049   if (a->expr_type == EXPR_FUNCTION) 
3050     is_variable = a->value.function.esym
3051                   ? a->value.function.esym->result->attr.pointer
3052                   : a->symtree->n.sym->result->attr.pointer;
3053
3054   if (a->expr_type == EXPR_OP || a->expr_type == EXPR_NULL
3055       || a->expr_type == EXPR_COMPCALL|| a->expr_type == EXPR_PPC
3056       || !is_variable)
3057     {
3058       gfc_error ("The argument of the RANK intrinsic at %L must be a data "
3059                  "object", &a->where);
3060       return FAILURE;
3061     }
3062
3063   return SUCCESS;
3064 }
3065
3066
3067 /* real, float, sngl.  */
3068 gfc_try
3069 gfc_check_real (gfc_expr *a, gfc_expr *kind)
3070 {
3071   if (numeric_check (a, 0) == FAILURE)
3072     return FAILURE;
3073
3074   if (kind_check (kind, 1, BT_REAL) == FAILURE)
3075     return FAILURE;
3076
3077   return SUCCESS;
3078 }
3079
3080
3081 gfc_try
3082 gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
3083 {
3084   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
3085     return FAILURE;
3086   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
3087     return FAILURE;
3088
3089   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
3090     return FAILURE;
3091   if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
3092     return FAILURE;
3093
3094   return SUCCESS;
3095 }
3096
3097
3098 gfc_try
3099 gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3100 {
3101   if (type_check (path1, 0, BT_CHARACTER) == FAILURE)
3102     return FAILURE;
3103   if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE)
3104     return FAILURE;
3105
3106   if (type_check (path2, 1, BT_CHARACTER) == FAILURE)
3107     return FAILURE;
3108   if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE)
3109     return FAILURE;
3110
3111   if (status == NULL)
3112     return SUCCESS;
3113
3114   if (type_check (status, 2, BT_INTEGER) == FAILURE)
3115     return FAILURE;
3116
3117   if (scalar_check (status, 2) == FAILURE)
3118     return FAILURE;
3119
3120   return SUCCESS;
3121 }
3122
3123
3124 gfc_try
3125 gfc_check_repeat (gfc_expr *x, gfc_expr *y)
3126 {
3127   if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3128     return FAILURE;
3129
3130   if (scalar_check (x, 0) == FAILURE)
3131     return FAILURE;
3132
3133   if (type_check (y, 0, BT_INTEGER) == FAILURE)
3134     return FAILURE;
3135
3136   if (scalar_check (y, 1) == FAILURE)
3137     return FAILURE;
3138
3139   return SUCCESS;
3140 }
3141
3142
3143 gfc_try
3144 gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
3145                    gfc_expr *pad, gfc_expr *order)
3146 {
3147   mpz_t size;
3148   mpz_t nelems;
3149   int shape_size;
3150
3151   if (array_check (source, 0) == FAILURE)
3152     return FAILURE;
3153
3154   if (rank_check (shape, 1, 1) == FAILURE)
3155     return FAILURE;
3156
3157   if (type_check (shape, 1, BT_INTEGER) == FAILURE)
3158     return FAILURE;
3159
3160   if (gfc_array_size (shape, &size) != SUCCESS)
3161     {
3162       gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an "
3163                  "array of constant size", &shape->where);
3164       return FAILURE;
3165     }
3166
3167   shape_size = mpz_get_ui (size);
3168   mpz_clear (size);
3169
3170   if (shape_size <= 0)
3171     {
3172       gfc_error ("'%s' argument of '%s' intrinsic at %L is empty",
3173                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3174                  &shape->where);
3175       return FAILURE;
3176     }
3177   else if (shape_size > GFC_MAX_DIMENSIONS)
3178     {
3179       gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more "
3180                  "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
3181       return FAILURE;
3182     }
3183   else if (shape->expr_type == EXPR_ARRAY)
3184     {
3185       gfc_expr *e;
3186       int i, extent;
3187       for (i = 0; i < shape_size; ++i)
3188         {
3189           e = gfc_constructor_lookup_expr (shape->value.constructor, i);
3190           if (e->expr_type != EXPR_CONSTANT)
3191             continue;
3192
3193           gfc_extract_int (e, &extent);
3194           if (extent < 0)
3195             {
3196               gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3197                          "negative element (%d)",
3198                          gfc_current_intrinsic_arg[1]->name,
3199                          gfc_current_intrinsic, &e->where, extent);
3200               return FAILURE;
3201             }
3202         }
3203     }
3204
3205   if (pad != NULL)
3206     {
3207       if (same_type_check (source, 0, pad, 2) == FAILURE)
3208         return FAILURE;
3209
3210       if (array_check (pad, 2) == FAILURE)
3211         return FAILURE;
3212     }
3213
3214   if (order != NULL)
3215     {
3216       if (array_check (order, 3) == FAILURE)
3217         return FAILURE;
3218
3219       if (type_check (order, 3, BT_INTEGER) == FAILURE)
3220         return FAILURE;
3221
3222       if (order->expr_type == EXPR_ARRAY)
3223         {
3224           int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
3225           gfc_expr *e;
3226
3227           for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
3228             perm[i] = 0;
3229
3230           gfc_array_size (order, &size);
3231           order_size = mpz_get_ui (size);
3232           mpz_clear (size);
3233
3234           if (order_size != shape_size)
3235             {
3236               gfc_error ("'%s' argument of '%s' intrinsic at %L "
3237                          "has wrong number of elements (%d/%d)", 
3238                          gfc_current_intrinsic_arg[3]->name,
3239                          gfc_current_intrinsic, &order->where,
3240                          order_size, shape_size);
3241               return FAILURE;
3242             }
3243
3244           for (i = 1; i <= order_size; ++i)
3245             {
3246               e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
3247               if (e->expr_type != EXPR_CONSTANT)
3248                 continue;
3249
3250               gfc_extract_int (e, &dim);
3251
3252               if (dim < 1 || dim > order_size)
3253                 {
3254                   gfc_error ("'%s' argument of '%s' intrinsic at %L "
3255                              "has out-of-range dimension (%d)", 
3256                              gfc_current_intrinsic_arg[3]->name,
3257                              gfc_current_intrinsic, &e->where, dim);
3258                   return FAILURE;
3259                 }
3260
3261               if (perm[dim-1] != 0)
3262                 {
3263                   gfc_error ("'%s' argument of '%s' intrinsic at %L has "
3264                              "invalid permutation of dimensions (dimension "
3265                              "'%d' duplicated)",
3266                              gfc_current_intrinsic_arg[3]->name,
3267                              gfc_current_intrinsic, &e->where, dim);
3268                   return FAILURE;
3269                 }
3270
3271               perm[dim-1] = 1;
3272             }
3273         }
3274     }
3275
3276   if (pad == NULL && shape->expr_type == EXPR_ARRAY
3277       && gfc_is_constant_expr (shape)
3278       && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
3279            && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
3280     {
3281       /* Check the match in size between source and destination.  */
3282       if (gfc_array_size (source, &nelems) == SUCCESS)
3283         {
3284           gfc_constructor *c;
3285           bool test;
3286
3287           
3288           mpz_init_set_ui (size, 1);
3289           for (c = gfc_constructor_first (shape->value.constructor);
3290                c; c = gfc_constructor_next (c))
3291             mpz_mul (size, size, c->expr->value.integer);
3292
3293           test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
3294           mpz_clear (nelems);
3295           mpz_clear (size);
3296
3297           if (test)
3298             {
3299               gfc_error ("Without padding, there are not enough elements "
3300                          "in the intrinsic RESHAPE source at %L to match "
3301                          "the shape", &source->where);
3302               return FAILURE;
3303             }
3304         }
3305     }
3306
3307   return SUCCESS;
3308 }
3309
3310
3311 gfc_try
3312 gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
3313 {
3314
3315   if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
3316     {
3317       gfc_error ("'%s' argument of '%s' intrinsic at %L "
3318                  "must be of a derived type",
3319                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3320                  &a->where);
3321       return FAILURE;
3322     }
3323
3324   if (!gfc_type_is_extensible (a->ts.u.derived))
3325     {
3326       gfc_error ("'%s' argument of '%s' intrinsic at %L "
3327                  "must be of an extensible type",
3328                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3329                  &a->where);
3330       return FAILURE;
3331     }
3332
3333   if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
3334     {
3335       gfc_error ("'%s' argument of '%s' intrinsic at %L "
3336                  "must be of a derived type",
3337                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3338                  &b->where);
3339       return FAILURE;
3340     }
3341
3342   if (!gfc_type_is_extensible (b->ts.u.derived))
3343     {
3344       gfc_error ("'%s' argument of '%s' intrinsic at %L "
3345                  "must be of an extensible type",
3346                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
3347                  &b->where);
3348       return FAILURE;
3349     }
3350
3351   return SUCCESS;
3352 }
3353
3354
3355 gfc_try
3356 gfc_check_scale (gfc_expr *x, gfc_expr *i)
3357 {
3358   if (type_check (x, 0, BT_REAL) == FAILURE)
3359     return FAILURE;
3360
3361   if (type_check (i, 1, BT_INTEGER) == FAILURE)
3362     return FAILURE;
3363
3364   return SUCCESS;
3365 }
3366
3367
3368 gfc_try
3369 gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
3370 {
3371   if (type_check (x, 0, BT_CHARACTER) == FAILURE)
3372     return FAILURE;
3373
3374   if (type_check (y, 1, BT_CHARACTER) == FAILURE)
3375     return FAILURE;
3376
3377   if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
3378     return FAILURE;
3379
3380   if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
3381     return FAILURE;
3382   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3383                               "with KIND argument at %L",
3384                               gfc_current_intrinsic, &kind->where) == FAILURE)
3385     return FAILURE;
3386
3387   if (same_type_check (x, 0, y, 1) == FAILURE)
3388     return FAILURE;
3389
3390   return SUCCESS;
3391 }
3392
3393
3394 gfc_try
3395 gfc_check_secnds (gfc_expr *r)
3396 {
3397   if (type_check (r, 0, BT_REAL) == FAILURE)
3398     return FAILURE;
3399
3400   if (kind_value_check (r, 0, 4) == FAILURE)
3401     return FAILURE;
3402
3403   if (scalar_check (r, 0) == FAILURE)
3404     return FAILURE;
3405
3406   return SUCCESS;
3407 }
3408
3409
3410 gfc_try
3411 gfc_check_selected_char_kind (gfc_expr *name)
3412 {
3413   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3414     return FAILURE;
3415
3416   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3417     return FAILURE;
3418
3419   if (scalar_check (name, 0) == FAILURE)
3420     return FAILURE;
3421
3422   return SUCCESS;
3423 }
3424
3425
3426 gfc_try
3427 gfc_check_selected_int_kind (gfc_expr *r)
3428 {
3429   if (type_check (r, 0, BT_INTEGER) == FAILURE)
3430     return FAILURE;
3431
3432   if (scalar_check (r, 0) == FAILURE)
3433     return FAILURE;
3434
3435   return SUCCESS;
3436 }
3437
3438
3439 gfc_try
3440 gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
3441 {
3442   if (p == NULL && r == NULL
3443       && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: SELECTED_REAL_KIND with"
3444                          " neither 'P' nor 'R' argument at %L",
3445                          gfc_current_intrinsic_where) == FAILURE)
3446     return FAILURE;
3447
3448   if (p)
3449     {
3450       if (type_check (p, 0, BT_INTEGER) == FAILURE)
3451         return FAILURE;
3452
3453       if (scalar_check (p, 0) == FAILURE)
3454         return FAILURE;
3455     }
3456
3457   if (r)
3458     {
3459       if (type_check (r, 1, BT_INTEGER) == FAILURE)
3460         return FAILURE;
3461
3462       if (scalar_check (r, 1) == FAILURE)
3463         return FAILURE;
3464     }
3465
3466   if (radix)
3467     {
3468       if (type_check (radix, 1, BT_INTEGER) == FAILURE)
3469         return FAILURE;
3470
3471       if (scalar_check (radix, 1) == FAILURE)
3472         return FAILURE;
3473
3474       if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: '%s' intrinsic with "
3475                           "RADIX argument at %L", gfc_current_intrinsic,
3476                           &radix->where) == FAILURE)
3477         return FAILURE;
3478     }
3479
3480   return SUCCESS;
3481 }
3482
3483
3484 gfc_try
3485 gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
3486 {
3487   if (type_check (x, 0, BT_REAL) == FAILURE)
3488     return FAILURE;
3489
3490   if (type_check (i, 1, BT_INTEGER) == FAILURE)
3491     return FAILURE;
3492
3493   return SUCCESS;
3494 }
3495
3496
3497 gfc_try
3498 gfc_check_shape (gfc_expr *source, gfc_expr *kind)
3499 {
3500   gfc_array_ref *ar;
3501
3502   if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
3503     return SUCCESS;
3504
3505   ar = gfc_find_array_ref (source);
3506
3507   if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
3508     {
3509       gfc_error ("'source' argument of 'shape' intrinsic at %L must not be "
3510                  "an assumed size array", &source->where);
3511       return FAILURE;
3512     }
3513
3514   if (kind_check (kind, 1, BT_INTEGER) == FAILURE)
3515     return FAILURE;
3516   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3517                               "with KIND argument at %L",
3518                               gfc_current_intrinsic, &kind->where) == FAILURE)
3519     return FAILURE;
3520
3521   return SUCCESS;
3522 }
3523
3524
3525 gfc_try
3526 gfc_check_shift (gfc_expr *i, gfc_expr *shift)
3527 {
3528   if (type_check (i, 0, BT_INTEGER) == FAILURE)
3529     return FAILURE;
3530
3531   if (type_check (shift, 0, BT_INTEGER) == FAILURE)
3532     return FAILURE;
3533
3534   if (nonnegative_check ("SHIFT", shift) == FAILURE)
3535     return FAILURE;
3536
3537   if (less_than_bitsize1 ("I", i, "SHIFT", shift, true) == FAILURE)
3538     return FAILURE;
3539
3540   return SUCCESS;
3541 }
3542
3543
3544 gfc_try
3545 gfc_check_sign (gfc_expr *a, gfc_expr *b)
3546 {
3547   if (int_or_real_check (a, 0) == FAILURE)
3548     return FAILURE;
3549
3550   if (same_type_check (a, 0, b, 1) == FAILURE)
3551     return FAILURE;
3552
3553   return SUCCESS;
3554 }
3555
3556
3557 gfc_try
3558 gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3559 {
3560   if (array_check (array, 0) == FAILURE)
3561     return FAILURE;
3562
3563   if (dim_check (dim, 1, true) == FAILURE)
3564     return FAILURE;
3565
3566   if (dim_rank_check (dim, array, 0) == FAILURE)
3567     return FAILURE;
3568
3569   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
3570     return FAILURE;
3571   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
3572                               "with KIND argument at %L",
3573                               gfc_current_intrinsic, &kind->where) == FAILURE)
3574     return FAILURE;
3575
3576
3577   return SUCCESS;
3578 }
3579
3580
3581 gfc_try
3582 gfc_check_sizeof (gfc_expr *arg)
3583 {
3584   if (arg->ts.type == BT_PROCEDURE)
3585     {
3586       gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
3587                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3588                  &arg->where);
3589       return FAILURE;
3590     }
3591   return SUCCESS;
3592 }
3593
3594
3595 gfc_try
3596 gfc_check_c_sizeof (gfc_expr *arg)
3597 {
3598   if (gfc_verify_c_interop (&arg->ts) != SUCCESS)
3599     {
3600       gfc_error ("'%s' argument of '%s' intrinsic at %L must be an "
3601                  "interoperable data entity",
3602                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3603                  &arg->where);
3604       return FAILURE;
3605     }
3606   return SUCCESS;
3607 }
3608
3609
3610 gfc_try
3611 gfc_check_sleep_sub (gfc_expr *seconds)
3612 {
3613   if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
3614     return FAILURE;
3615
3616   if (scalar_check (seconds, 0) == FAILURE)
3617     return FAILURE;
3618
3619   return SUCCESS;
3620 }
3621
3622 gfc_try
3623 gfc_check_sngl (gfc_expr *a)
3624 {
3625   if (type_check (a, 0, BT_REAL) == FAILURE)
3626     return FAILURE;
3627
3628   if ((a->ts.kind != gfc_default_double_kind)
3629       && gfc_notify_std (GFC_STD_GNU, "GNU extension: non double precision "
3630                          "REAL argument to %s intrinsic at %L",
3631                          gfc_current_intrinsic, &a->where) == FAILURE)
3632     return FAILURE;
3633
3634   return SUCCESS;
3635 }
3636
3637 gfc_try
3638 gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
3639 {
3640   if (source->rank >= GFC_MAX_DIMENSIONS)
3641     {
3642       gfc_error ("'%s' argument of '%s' intrinsic at %L must be less "
3643                  "than rank %d", gfc_current_intrinsic_arg[0]->name,
3644                  gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
3645
3646       return FAILURE;
3647     }
3648
3649   if (dim == NULL)
3650     return FAILURE;
3651
3652   if (dim_check (dim, 1, false) == FAILURE)
3653     return FAILURE;
3654
3655   /* dim_rank_check() does not apply here.  */
3656   if (dim 
3657       && dim->expr_type == EXPR_CONSTANT
3658       && (mpz_cmp_ui (dim->value.integer, 1) < 0
3659           || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
3660     {
3661       gfc_error ("'%s' argument of '%s' intrinsic at %L is not a valid "
3662                  "dimension index", gfc_current_intrinsic_arg[1]->name,
3663                  gfc_current_intrinsic, &dim->where);
3664       return FAILURE;
3665     }
3666
3667   if (type_check (ncopies, 2, BT_INTEGER) == FAILURE)
3668     return FAILURE;
3669
3670   if (scalar_check (ncopies, 2) == FAILURE)
3671     return FAILURE;
3672
3673   return SUCCESS;
3674 }
3675
3676
3677 /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
3678    functions).  */
3679
3680 gfc_try
3681 gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
3682 {
3683   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3684     return FAILURE;
3685
3686   if (scalar_check (unit, 0) == FAILURE)
3687     return FAILURE;
3688
3689   if (type_check (c, 1, BT_CHARACTER) == FAILURE)
3690     return FAILURE;
3691   if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE)
3692     return FAILURE;
3693
3694   if (status == NULL)
3695     return SUCCESS;
3696
3697   if (type_check (status, 2, BT_INTEGER) == FAILURE
3698       || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE
3699       || scalar_check (status, 2) == FAILURE)
3700     return FAILURE;
3701
3702   return SUCCESS;
3703 }
3704
3705
3706 gfc_try
3707 gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
3708 {
3709   return gfc_check_fgetputc_sub (unit, c, NULL);
3710 }
3711
3712
3713 gfc_try
3714 gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
3715 {
3716   if (type_check (c, 0, BT_CHARACTER) == FAILURE)
3717     return FAILURE;
3718   if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE)
3719     return FAILURE;
3720
3721   if (status == NULL)
3722     return SUCCESS;
3723
3724   if (type_check (status, 1, BT_INTEGER) == FAILURE
3725       || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE
3726       || scalar_check (status, 1) == FAILURE)
3727     return FAILURE;
3728
3729   return SUCCESS;
3730 }
3731
3732
3733 gfc_try
3734 gfc_check_fgetput (gfc_expr *c)
3735 {
3736   return gfc_check_fgetput_sub (c, NULL);
3737 }
3738
3739
3740 gfc_try
3741 gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
3742 {
3743   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3744     return FAILURE;
3745
3746   if (scalar_check (unit, 0) == FAILURE)
3747     return FAILURE;
3748
3749   if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3750     return FAILURE;
3751
3752   if (scalar_check (offset, 1) == FAILURE)
3753     return FAILURE;
3754
3755   if (type_check (whence, 2, BT_INTEGER) == FAILURE)
3756     return FAILURE;
3757
3758   if (scalar_check (whence, 2) == FAILURE)
3759     return FAILURE;
3760
3761   if (status == NULL)
3762     return SUCCESS;
3763
3764   if (type_check (status, 3, BT_INTEGER) == FAILURE)
3765     return FAILURE;
3766
3767   if (kind_value_check (status, 3, 4) == FAILURE)
3768     return FAILURE;
3769
3770   if (scalar_check (status, 3) == FAILURE)
3771     return FAILURE;
3772
3773   return SUCCESS;
3774 }
3775
3776
3777
3778 gfc_try
3779 gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
3780 {
3781   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3782     return FAILURE;
3783
3784   if (scalar_check (unit, 0) == FAILURE)
3785     return FAILURE;
3786
3787   if (type_check (array, 1, BT_INTEGER) == FAILURE
3788       || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE)
3789     return FAILURE;
3790
3791   if (array_check (array, 1) == FAILURE)
3792     return FAILURE;
3793
3794   return SUCCESS;
3795 }
3796
3797
3798 gfc_try
3799 gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
3800 {
3801   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3802     return FAILURE;
3803
3804   if (scalar_check (unit, 0) == FAILURE)
3805     return FAILURE;
3806
3807   if (type_check (array, 1, BT_INTEGER) == FAILURE
3808       || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3809     return FAILURE;
3810
3811   if (array_check (array, 1) == FAILURE)
3812     return FAILURE;
3813
3814   if (status == NULL)
3815     return SUCCESS;
3816
3817   if (type_check (status, 2, BT_INTEGER) == FAILURE
3818       || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
3819     return FAILURE;
3820
3821   if (scalar_check (status, 2) == FAILURE)
3822     return FAILURE;
3823
3824   return SUCCESS;
3825 }
3826
3827
3828 gfc_try
3829 gfc_check_ftell (gfc_expr *unit)
3830 {
3831   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3832     return FAILURE;
3833
3834   if (scalar_check (unit, 0) == FAILURE)
3835     return FAILURE;
3836
3837   return SUCCESS;
3838 }
3839
3840
3841 gfc_try
3842 gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
3843 {
3844   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
3845     return FAILURE;
3846
3847   if (scalar_check (unit, 0) == FAILURE)
3848     return FAILURE;
3849
3850   if (type_check (offset, 1, BT_INTEGER) == FAILURE)
3851     return FAILURE;
3852
3853   if (scalar_check (offset, 1) == FAILURE)
3854     return FAILURE;
3855
3856   return SUCCESS;
3857 }
3858
3859
3860 gfc_try
3861 gfc_check_stat (gfc_expr *name, gfc_expr *array)
3862 {
3863   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3864     return FAILURE;
3865   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3866     return FAILURE;
3867
3868   if (type_check (array, 1, BT_INTEGER) == FAILURE
3869       || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3870     return FAILURE;
3871
3872   if (array_check (array, 1) == FAILURE)
3873     return FAILURE;
3874
3875   return SUCCESS;
3876 }
3877
3878
3879 gfc_try
3880 gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
3881 {
3882   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
3883     return FAILURE;
3884   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
3885     return FAILURE;
3886
3887   if (type_check (array, 1, BT_INTEGER) == FAILURE
3888       || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3889     return FAILURE;
3890
3891   if (array_check (array, 1) == FAILURE)
3892     return FAILURE;
3893
3894   if (status == NULL)
3895     return SUCCESS;
3896
3897   if (type_check (status, 2, BT_INTEGER) == FAILURE
3898       || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE)
3899     return FAILURE;
3900
3901   if (scalar_check (status, 2) == FAILURE)
3902     return FAILURE;
3903
3904   return SUCCESS;
3905 }
3906
3907
3908 gfc_try
3909 gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
3910 {
3911   mpz_t nelems;
3912
3913   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3914     {
3915       gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3916       return FAILURE;
3917     }
3918
3919   if (coarray_check (coarray, 0) == FAILURE)
3920     return FAILURE;
3921
3922   if (sub->rank != 1)
3923     {
3924       gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
3925                 gfc_current_intrinsic_arg[1]->name, &sub->where);
3926       return FAILURE;
3927     }
3928
3929   if (gfc_array_size (sub, &nelems) == SUCCESS)
3930     {
3931       int corank = gfc_get_corank (coarray);
3932
3933       if (mpz_cmp_ui (nelems, corank) != 0)
3934         {
3935           gfc_error ("The number of array elements of the SUB argument to "
3936                      "IMAGE_INDEX at %L shall be %d (corank) not %d",
3937                      &sub->where, corank, (int) mpz_get_si (nelems));
3938           mpz_clear (nelems);
3939           return FAILURE;
3940         }
3941       mpz_clear (nelems);
3942     }
3943
3944   return SUCCESS;
3945 }
3946
3947
3948 gfc_try
3949 gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim)
3950 {
3951   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
3952     {
3953       gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
3954       return FAILURE;
3955     }
3956
3957   if (dim != NULL &&  coarray == NULL)
3958     {
3959       gfc_error ("DIM argument without ARRAY argument not allowed for THIS_IMAGE "
3960                 "intrinsic at %L", &dim->where);
3961       return FAILURE;
3962     }
3963
3964   if (coarray == NULL)
3965     return SUCCESS;
3966
3967   if (coarray_check (coarray, 0) == FAILURE)
3968     return FAILURE;
3969
3970   if (dim != NULL)
3971     {
3972       if (dim_check (dim, 1, false) == FAILURE)
3973        return FAILURE;
3974
3975       if (dim_corank_check (dim, coarray) == FAILURE)
3976        return FAILURE;
3977     }
3978
3979   return SUCCESS;
3980 }
3981
3982 /* Calculate the sizes for transfer, used by gfc_check_transfer and also
3983    by gfc_simplify_transfer.  Return FAILURE if we cannot do so.  */
3984
3985 gfc_try
3986 gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
3987                               size_t *source_size, size_t *result_size,
3988                               size_t *result_length_p)
3989
3990 {
3991   size_t result_elt_size;
3992   mpz_t tmp;
3993   gfc_expr *mold_element;
3994
3995   if (source->expr_type == EXPR_FUNCTION)
3996     return FAILURE;
3997
3998     /* Calculate the size of the source.  */
3999   if (source->expr_type == EXPR_ARRAY
4000       && gfc_array_size (source, &tmp) == FAILURE)
4001     return FAILURE;
4002
4003   *source_size = gfc_target_expr_size (source);
4004
4005   mold_element = mold->expr_type == EXPR_ARRAY
4006                  ? gfc_constructor_first (mold->value.constructor)->expr
4007                  : mold;
4008
4009   /* Determine the size of the element.  */
4010   result_elt_size = gfc_target_expr_size (mold_element);
4011   if (result_elt_size == 0)
4012     return FAILURE;
4013
4014   if (mold->expr_type == EXPR_ARRAY || mold->rank || size)
4015     {
4016       int result_length;
4017
4018       if (size)
4019         result_length = (size_t)mpz_get_ui (size->value.integer);
4020       else
4021         {
4022           result_length = *source_size / result_elt_size;
4023           if (result_length * result_elt_size < *source_size)
4024             result_length += 1;
4025         }
4026
4027       *result_size = result_length * result_elt_size;
4028       if (result_length_p)
4029         *result_length_p = result_length;
4030     }
4031   else
4032     *result_size = result_elt_size;
4033
4034   return SUCCESS;
4035 }
4036
4037
4038 gfc_try
4039 gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
4040 {
4041   size_t source_size;
4042   size_t result_size;
4043
4044   if (mold->ts.type == BT_HOLLERITH)
4045     {
4046       gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
4047                  &mold->where, gfc_basic_typename (BT_HOLLERITH));
4048       return FAILURE;
4049     }
4050
4051   if (size != NULL)
4052     {
4053       if (type_check (size, 2, BT_INTEGER) == FAILURE)
4054         return FAILURE;
4055
4056       if (scalar_check (size, 2) == FAILURE)
4057         return FAILURE;
4058
4059       if (nonoptional_check (size, 2) == FAILURE)
4060         return FAILURE;
4061     }
4062
4063   if (!gfc_option.warn_surprising)
4064     return SUCCESS;
4065
4066   /* If we can't calculate the sizes, we cannot check any more.
4067      Return SUCCESS for that case.  */
4068
4069   if (gfc_calculate_transfer_sizes (source, mold, size, &source_size,
4070                                     &result_size, NULL) == FAILURE)
4071     return SUCCESS;
4072
4073   if (source_size < result_size)
4074     gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
4075                 "source size %ld < result size %ld", &source->where,
4076                 (long) source_size, (long) result_size);
4077
4078   return SUCCESS;
4079 }
4080
4081
4082 gfc_try
4083 gfc_check_transpose (gfc_expr *matrix)
4084 {
4085   if (rank_check (matrix, 0, 2) == FAILURE)
4086     return FAILURE;
4087
4088   return SUCCESS;
4089 }
4090
4091
4092 gfc_try
4093 gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
4094 {
4095   if (array_check (array, 0) == FAILURE)
4096     return FAILURE;
4097
4098   if (dim_check (dim, 1, false) == FAILURE)
4099     return FAILURE;
4100
4101   if (dim_rank_check (dim, array, 0) == FAILURE)
4102     return FAILURE;
4103
4104   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
4105     return FAILURE;
4106   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
4107                               "with KIND argument at %L",
4108                               gfc_current_intrinsic, &kind->where) == FAILURE)
4109     return FAILURE;
4110
4111   return SUCCESS;
4112 }
4113
4114
4115 gfc_try
4116 gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
4117 {
4118   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
4119     {
4120       gfc_fatal_error ("Coarrays disabled at %C, use -fcoarray= to enable");
4121       return FAILURE;
4122     }
4123
4124   if (coarray_check (coarray, 0) == FAILURE)
4125     return FAILURE;
4126
4127   if (dim != NULL)
4128     {
4129       if (dim_check (dim, 1, false) == FAILURE)
4130         return FAILURE;
4131
4132       if (dim_corank_check (dim, coarray) == FAILURE)
4133         return FAILURE;
4134     }
4135
4136   if (kind_check (kind, 2, BT_INTEGER) == FAILURE)
4137     return FAILURE;
4138
4139   return SUCCESS;
4140 }
4141
4142
4143 gfc_try
4144 gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
4145 {
4146   mpz_t vector_size;
4147
4148   if (rank_check (vector, 0, 1) == FAILURE)
4149     return FAILURE;
4150
4151   if (array_check (mask, 1) == FAILURE)
4152     return FAILURE;
4153
4154   if (type_check (mask, 1, BT_LOGICAL) == FAILURE)
4155     return FAILURE;
4156
4157   if (same_type_check (vector, 0, field, 2) == FAILURE)
4158     return FAILURE;
4159
4160   if (mask->expr_type == EXPR_ARRAY
4161       && gfc_array_size (vector, &vector_size) == SUCCESS)
4162     {
4163       int mask_true_count = 0;
4164       gfc_constructor *mask_ctor;
4165       mask_ctor = gfc_constructor_first (mask->value.constructor);
4166       while (mask_ctor)
4167         {
4168           if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
4169             {
4170               mask_true_count = 0;
4171               break;
4172             }
4173
4174           if (mask_ctor->expr->value.logical)
4175             mask_true_count++;
4176
4177           mask_ctor = gfc_constructor_next (mask_ctor);
4178         }
4179
4180       if (mpz_get_si (vector_size) < mask_true_count)
4181         {
4182           gfc_error ("'%s' argument of '%s' intrinsic at %L must "
4183                      "provide at least as many elements as there "
4184                      "are .TRUE. values in '%s' (%ld/%d)",
4185                      gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4186                      &vector->where, gfc_current_intrinsic_arg[1]->name,
4187                      mpz_get_si (vector_size), mask_true_count);
4188           return FAILURE;
4189         }
4190
4191       mpz_clear (vector_size);
4192     }
4193
4194   if (mask->rank != field->rank && field->rank != 0)
4195     {
4196       gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
4197                  "the same rank as '%s' or be a scalar", 
4198                  gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
4199                  &field->where, gfc_current_intrinsic_arg[1]->name);
4200       return FAILURE;
4201     }
4202
4203   if (mask->rank == field->rank)
4204     {
4205       int i;
4206       for (i = 0; i < field->rank; i++)
4207         if (! identical_dimen_shape (mask, i, field, i))
4208         {
4209           gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
4210                      "must have identical shape.", 
4211                      gfc_current_intrinsic_arg[2]->name,
4212                      gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4213                      &field->where);
4214         }
4215     }
4216
4217   return SUCCESS;
4218 }
4219
4220
4221 gfc_try
4222 gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
4223 {
4224   if (type_check (x, 0, BT_CHARACTER) == FAILURE)
4225     return FAILURE;
4226
4227   if (same_type_check (x, 0, y, 1) == FAILURE)
4228     return FAILURE;
4229
4230   if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE)
4231     return FAILURE;
4232
4233   if (kind_check (kind, 3, BT_INTEGER) == FAILURE)
4234     return FAILURE;
4235   if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic "
4236                               "with KIND argument at %L",
4237                               gfc_current_intrinsic, &kind->where) == FAILURE)
4238     return FAILURE;
4239
4240   return SUCCESS;
4241 }
4242
4243
4244 gfc_try
4245 gfc_check_trim (gfc_expr *x)
4246 {
4247   if (type_check (x, 0, BT_CHARACTER) == FAILURE)
4248     return FAILURE;
4249
4250   if (scalar_check (x, 0) == FAILURE)
4251     return FAILURE;
4252
4253    return SUCCESS;
4254 }
4255
4256
4257 gfc_try
4258 gfc_check_ttynam (gfc_expr *unit)
4259 {
4260   if (scalar_check (unit, 0) == FAILURE)
4261     return FAILURE;
4262
4263   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4264     return FAILURE;
4265
4266   return SUCCESS;
4267 }
4268
4269
4270 /* Common check function for the half a dozen intrinsics that have a
4271    single real argument.  */
4272
4273 gfc_try
4274 gfc_check_x (gfc_expr *x)
4275 {
4276   if (type_check (x, 0, BT_REAL) == FAILURE)
4277     return FAILURE;
4278
4279   return SUCCESS;
4280 }
4281
4282
4283 /************* Check functions for intrinsic subroutines *************/
4284
4285 gfc_try
4286 gfc_check_cpu_time (gfc_expr *time)
4287 {
4288   if (scalar_check (time, 0) == FAILURE)
4289     return FAILURE;
4290
4291   if (type_check (time, 0, BT_REAL) == FAILURE)
4292     return FAILURE;
4293
4294   if (variable_check (time, 0, false) == FAILURE)
4295     return FAILURE;
4296
4297   return SUCCESS;
4298 }
4299
4300
4301 gfc_try
4302 gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
4303                          gfc_expr *zone, gfc_expr *values)
4304 {
4305   if (date != NULL)
4306     {
4307       if (type_check (date, 0, BT_CHARACTER) == FAILURE)
4308         return FAILURE;
4309       if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
4310         return FAILURE;
4311       if (scalar_check (date, 0) == FAILURE)
4312         return FAILURE;
4313       if (variable_check (date, 0, false) == FAILURE)
4314         return FAILURE;
4315     }
4316
4317   if (time != NULL)
4318     {
4319       if (type_check (time, 1, BT_CHARACTER) == FAILURE)
4320         return FAILURE;
4321       if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE)
4322         return FAILURE;
4323       if (scalar_check (time, 1) == FAILURE)
4324         return FAILURE;
4325       if (variable_check (time, 1, false) == FAILURE)
4326         return FAILURE;
4327     }
4328
4329   if (zone != NULL)
4330     {
4331       if (type_check (zone, 2, BT_CHARACTER) == FAILURE)
4332         return FAILURE;
4333       if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE)
4334         return FAILURE;
4335       if (scalar_check (zone, 2) == FAILURE)
4336         return FAILURE;
4337       if (variable_check (zone, 2, false) == FAILURE)
4338         return FAILURE;
4339     }
4340
4341   if (values != NULL)
4342     {
4343       if (type_check (values, 3, BT_INTEGER) == FAILURE)
4344         return FAILURE;
4345       if (array_check (values, 3) == FAILURE)
4346         return FAILURE;
4347       if (rank_check (values, 3, 1) == FAILURE)
4348         return FAILURE;
4349       if (variable_check (values, 3, false) == FAILURE)
4350         return FAILURE;
4351     }
4352
4353   return SUCCESS;
4354 }
4355
4356
4357 gfc_try
4358 gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
4359                   gfc_expr *to, gfc_expr *topos)
4360 {
4361   if (type_check (from, 0, BT_INTEGER) == FAILURE)
4362     return FAILURE;
4363
4364   if (type_check (frompos, 1, BT_INTEGER) == FAILURE)
4365     return FAILURE;
4366
4367   if (type_check (len, 2, BT_INTEGER) == FAILURE)
4368     return FAILURE;
4369
4370   if (same_type_check (from, 0, to, 3) == FAILURE)
4371     return FAILURE;
4372
4373   if (variable_check (to, 3, false) == FAILURE)
4374     return FAILURE;
4375
4376   if (type_check (topos, 4, BT_INTEGER) == FAILURE)
4377     return FAILURE;
4378
4379   if (nonnegative_check ("frompos", frompos) == FAILURE)
4380     return FAILURE;
4381
4382   if (nonnegative_check ("topos", topos) == FAILURE)
4383     return FAILURE;
4384
4385   if (nonnegative_check ("len", len) == FAILURE)
4386     return FAILURE;
4387
4388   if (less_than_bitsize2 ("from", from, "frompos", frompos, "len", len)
4389       == FAILURE)
4390     return FAILURE;
4391
4392   if (less_than_bitsize2 ("to", to, "topos", topos, "len", len) == FAILURE)
4393     return FAILURE;
4394
4395   return SUCCESS;
4396 }
4397
4398
4399 gfc_try
4400 gfc_check_random_number (gfc_expr *harvest)
4401 {
4402   if (type_check (harvest, 0, BT_REAL) == FAILURE)
4403     return FAILURE;
4404
4405   if (variable_check (harvest, 0, false) == FAILURE)
4406     return FAILURE;
4407
4408   return SUCCESS;
4409 }
4410
4411
4412 gfc_try
4413 gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
4414 {
4415   unsigned int nargs = 0, kiss_size;
4416   locus *where = NULL;
4417   mpz_t put_size, get_size;
4418   bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran.  */
4419
4420   have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1;
4421
4422   /* Keep the number of bytes in sync with kiss_size in
4423      libgfortran/intrinsics/random.c.  */
4424   kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind;
4425
4426   if (size != NULL)
4427     {
4428       if (size->expr_type != EXPR_VARIABLE
4429           || !size->symtree->n.sym->attr.optional)
4430         nargs++;
4431
4432       if (scalar_check (size, 0) == FAILURE)
4433         return FAILURE;
4434
4435       if (type_check (size, 0, BT_INTEGER) == FAILURE)
4436         return FAILURE;
4437
4438       if (variable_check (size, 0, false) == FAILURE)
4439         return FAILURE;
4440
4441       if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE)
4442         return FAILURE;
4443     }
4444
4445   if (put != NULL)
4446     {
4447       if (put->expr_type != EXPR_VARIABLE
4448           || !put->symtree->n.sym->attr.optional)
4449         {
4450           nargs++;
4451           where = &put->where;
4452         }
4453
4454       if (array_check (put, 1) == FAILURE)
4455         return FAILURE;
4456
4457       if (rank_check (put, 1, 1) == FAILURE)
4458         return FAILURE;
4459
4460       if (type_check (put, 1, BT_INTEGER) == FAILURE)
4461         return FAILURE;
4462
4463       if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE)
4464         return FAILURE;
4465
4466       if (gfc_array_size (put, &put_size) == SUCCESS
4467           && mpz_get_ui (put_size) < kiss_size)
4468         gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4469                    "too small (%i/%i)",
4470                    gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4471                    where, (int) mpz_get_ui (put_size), kiss_size);
4472     }
4473
4474   if (get != NULL)
4475     {
4476       if (get->expr_type != EXPR_VARIABLE
4477           || !get->symtree->n.sym->attr.optional)
4478         {
4479           nargs++;
4480           where = &get->where;
4481         }
4482
4483       if (array_check (get, 2) == FAILURE)
4484         return FAILURE;
4485
4486       if (rank_check (get, 2, 1) == FAILURE)
4487         return FAILURE;
4488
4489       if (type_check (get, 2, BT_INTEGER) == FAILURE)
4490         return FAILURE;
4491
4492       if (variable_check (get, 2, false) == FAILURE)
4493         return FAILURE;
4494
4495       if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE)
4496         return FAILURE;
4497
4498        if (gfc_array_size (get, &get_size) == SUCCESS
4499           && mpz_get_ui (get_size) < kiss_size)
4500         gfc_error ("Size of '%s' argument of '%s' intrinsic at %L "
4501                    "too small (%i/%i)",
4502                    gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
4503                    where, (int) mpz_get_ui (get_size), kiss_size);
4504     }
4505
4506   /* RANDOM_SEED may not have more than one non-optional argument.  */
4507   if (nargs > 1)
4508     gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
4509
4510   return SUCCESS;
4511 }
4512
4513
4514 gfc_try
4515 gfc_check_second_sub (gfc_expr *time)
4516 {
4517   if (scalar_check (time, 0) == FAILURE)
4518     return FAILURE;
4519
4520   if (type_check (time, 0, BT_REAL) == FAILURE)
4521     return FAILURE;
4522
4523   if (kind_value_check(time, 0, 4) == FAILURE)
4524     return FAILURE;
4525
4526   return SUCCESS;
4527 }
4528
4529
4530 /* The arguments of SYSTEM_CLOCK are scalar, integer variables.  Note,
4531    count, count_rate, and count_max are all optional arguments */
4532
4533 gfc_try
4534 gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
4535                         gfc_expr *count_max)
4536 {
4537   if (count != NULL)
4538     {
4539       if (scalar_check (count, 0) == FAILURE)
4540         return FAILURE;
4541
4542       if (type_check (count, 0, BT_INTEGER) == FAILURE)
4543         return FAILURE;
4544
4545       if (variable_check (count, 0, false) == FAILURE)
4546         return FAILURE;
4547     }
4548
4549   if (count_rate != NULL)
4550     {
4551       if (scalar_check (count_rate, 1) == FAILURE)
4552         return FAILURE;
4553
4554       if (type_check (count_rate, 1, BT_INTEGER) == FAILURE)
4555         return FAILURE;
4556
4557       if (variable_check (count_rate, 1, false) == FAILURE)
4558         return FAILURE;
4559
4560       if (count != NULL
4561           && same_type_check (count, 0, count_rate, 1) == FAILURE)
4562         return FAILURE;
4563
4564     }
4565
4566   if (count_max != NULL)
4567     {
4568       if (scalar_check (count_max, 2) == FAILURE)
4569         return FAILURE;
4570
4571       if (type_check (count_max, 2, BT_INTEGER) == FAILURE)
4572         return FAILURE;
4573
4574       if (variable_check (count_max, 2, false) == FAILURE)
4575         return FAILURE;
4576
4577       if (count != NULL
4578           && same_type_check (count, 0, count_max, 2) == FAILURE)
4579         return FAILURE;
4580
4581       if (count_rate != NULL
4582           && same_type_check (count_rate, 1, count_max, 2) == FAILURE)
4583         return FAILURE;
4584     }
4585
4586   return SUCCESS;
4587 }
4588
4589
4590 gfc_try
4591 gfc_check_irand (gfc_expr *x)
4592 {
4593   if (x == NULL)
4594     return SUCCESS;
4595
4596   if (scalar_check (x, 0) == FAILURE)
4597     return FAILURE;
4598
4599   if (type_check (x, 0, BT_INTEGER) == FAILURE)
4600     return FAILURE;
4601
4602   if (kind_value_check(x, 0, 4) == FAILURE)
4603     return FAILURE;
4604
4605   return SUCCESS;
4606 }
4607
4608
4609 gfc_try
4610 gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
4611 {
4612   if (scalar_check (seconds, 0) == FAILURE)
4613     return FAILURE;
4614   if (type_check (seconds, 0, BT_INTEGER) == FAILURE)
4615     return FAILURE;
4616
4617   if (int_or_proc_check (handler, 1) == FAILURE)
4618     return FAILURE;
4619   if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
4620     return FAILURE;
4621
4622   if (status == NULL)
4623     return SUCCESS;
4624
4625   if (scalar_check (status, 2) == FAILURE)
4626     return FAILURE;
4627   if (type_check (status, 2, BT_INTEGER) == FAILURE)
4628     return FAILURE;
4629   if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE)
4630     return FAILURE;
4631
4632   return SUCCESS;
4633 }
4634
4635
4636 gfc_try
4637 gfc_check_rand (gfc_expr *x)
4638 {
4639   if (x == NULL)
4640     return SUCCESS;
4641
4642   if (scalar_check (x, 0) == FAILURE)
4643     return FAILURE;
4644
4645   if (type_check (x, 0, BT_INTEGER) == FAILURE)
4646     return FAILURE;
4647
4648   if (kind_value_check(x, 0, 4) == FAILURE)
4649     return FAILURE;
4650
4651   return SUCCESS;
4652 }
4653
4654
4655 gfc_try
4656 gfc_check_srand (gfc_expr *x)
4657 {
4658   if (scalar_check (x, 0) == FAILURE)
4659     return FAILURE;
4660
4661   if (type_check (x, 0, BT_INTEGER) == FAILURE)
4662     return FAILURE;
4663
4664   if (kind_value_check(x, 0, 4) == FAILURE)
4665     return FAILURE;
4666
4667   return SUCCESS;
4668 }
4669
4670
4671 gfc_try
4672 gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
4673 {
4674   if (scalar_check (time, 0) == FAILURE)
4675     return FAILURE;
4676   if (type_check (time, 0, BT_INTEGER) == FAILURE)
4677     return FAILURE;
4678
4679   if (type_check (result, 1, BT_CHARACTER) == FAILURE)
4680     return FAILURE;
4681   if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE)
4682     return FAILURE;
4683
4684   return SUCCESS;
4685 }
4686
4687
4688 gfc_try
4689 gfc_check_dtime_etime (gfc_expr *x)
4690 {
4691   if (array_check (x, 0) == FAILURE)
4692     return FAILURE;
4693
4694   if (rank_check (x, 0, 1) == FAILURE)
4695     return FAILURE;
4696
4697   if (variable_check (x, 0, false) == FAILURE)
4698     return FAILURE;
4699
4700   if (type_check (x, 0, BT_REAL) == FAILURE)
4701     return FAILURE;
4702
4703   if (kind_value_check(x, 0, 4) == FAILURE)
4704     return FAILURE;
4705
4706   return SUCCESS;
4707 }
4708
4709
4710 gfc_try
4711 gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
4712 {
4713   if (array_check (values, 0) == FAILURE)
4714     return FAILURE;
4715
4716   if (rank_check (values, 0, 1) == FAILURE)
4717     return FAILURE;
4718
4719   if (variable_check (values, 0, false) == FAILURE)
4720     return FAILURE;
4721
4722   if (type_check (values, 0, BT_REAL) == FAILURE)
4723     return FAILURE;
4724
4725   if (kind_value_check(values, 0, 4) == FAILURE)
4726     return FAILURE;
4727
4728   if (scalar_check (time, 1) == FAILURE)
4729     return FAILURE;
4730
4731   if (type_check (time, 1, BT_REAL) == FAILURE)
4732     return FAILURE;
4733
4734   if (kind_value_check(time, 1, 4) == FAILURE)
4735     return FAILURE;
4736
4737   return SUCCESS;
4738 }
4739
4740
4741 gfc_try
4742 gfc_check_fdate_sub (gfc_expr *date)
4743 {
4744   if (type_check (date, 0, BT_CHARACTER) == FAILURE)
4745     return FAILURE;
4746   if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE)
4747     return FAILURE;
4748
4749   return SUCCESS;
4750 }
4751
4752
4753 gfc_try
4754 gfc_check_gerror (gfc_expr *msg)
4755 {
4756   if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4757     return FAILURE;
4758   if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4759     return FAILURE;
4760
4761   return SUCCESS;
4762 }
4763
4764
4765 gfc_try
4766 gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
4767 {
4768   if (type_check (cwd, 0, BT_CHARACTER) == FAILURE)
4769     return FAILURE;
4770   if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE)
4771     return FAILURE;
4772
4773   if (status == NULL)
4774     return SUCCESS;
4775
4776   if (scalar_check (status, 1) == FAILURE)
4777     return FAILURE;
4778
4779   if (type_check (status, 1, BT_INTEGER) == FAILURE)
4780     return FAILURE;
4781
4782   return SUCCESS;
4783 }
4784
4785
4786 gfc_try
4787 gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
4788 {
4789   if (type_check (pos, 0, BT_INTEGER) == FAILURE)
4790     return FAILURE;
4791
4792   if (pos->ts.kind > gfc_default_integer_kind)
4793     {
4794       gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind "
4795                  "not wider than the default kind (%d)",
4796                  gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4797                  &pos->where, gfc_default_integer_kind);
4798       return FAILURE;
4799     }
4800
4801   if (type_check (value, 1, BT_CHARACTER) == FAILURE)
4802     return FAILURE;
4803   if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE)
4804     return FAILURE;
4805
4806   return SUCCESS;
4807 }
4808
4809
4810 gfc_try
4811 gfc_check_getlog (gfc_expr *msg)
4812 {
4813   if (type_check (msg, 0, BT_CHARACTER) == FAILURE)
4814     return FAILURE;
4815   if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE)
4816     return FAILURE;
4817
4818   return SUCCESS;
4819 }
4820
4821
4822 gfc_try
4823 gfc_check_exit (gfc_expr *status)
4824 {
4825   if (status == NULL)
4826     return SUCCESS;
4827
4828   if (type_check (status, 0, BT_INTEGER) == FAILURE)
4829     return FAILURE;
4830
4831   if (scalar_check (status, 0) == FAILURE)
4832     return FAILURE;
4833
4834   return SUCCESS;
4835 }
4836
4837
4838 gfc_try
4839 gfc_check_flush (gfc_expr *unit)
4840 {
4841   if (unit == NULL)
4842     return SUCCESS;
4843
4844   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4845     return FAILURE;
4846
4847   if (scalar_check (unit, 0) == FAILURE)
4848     return FAILURE;
4849
4850   return SUCCESS;
4851 }
4852
4853
4854 gfc_try
4855 gfc_check_free (gfc_expr *i)
4856 {
4857   if (type_check (i, 0, BT_INTEGER) == FAILURE)
4858     return FAILURE;
4859
4860   if (scalar_check (i, 0) == FAILURE)
4861     return FAILURE;
4862
4863   return SUCCESS;
4864 }
4865
4866
4867 gfc_try
4868 gfc_check_hostnm (gfc_expr *name)
4869 {
4870   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4871     return FAILURE;
4872   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4873     return FAILURE;
4874
4875   return SUCCESS;
4876 }
4877
4878
4879 gfc_try
4880 gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
4881 {
4882   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
4883     return FAILURE;
4884   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
4885     return FAILURE;
4886
4887   if (status == NULL)
4888     return SUCCESS;
4889
4890   if (scalar_check (status, 1) == FAILURE)
4891     return FAILURE;
4892
4893   if (type_check (status, 1, BT_INTEGER) == FAILURE)
4894     return FAILURE;
4895
4896   return SUCCESS;
4897 }
4898
4899
4900 gfc_try
4901 gfc_check_itime_idate (gfc_expr *values)
4902 {
4903   if (array_check (values, 0) == FAILURE)
4904     return FAILURE;
4905
4906   if (rank_check (values, 0, 1) == FAILURE)
4907     return FAILURE;
4908
4909   if (variable_check (values, 0, false) == FAILURE)
4910     return FAILURE;
4911
4912   if (type_check (values, 0, BT_INTEGER) == FAILURE)
4913     return FAILURE;
4914
4915   if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE)
4916     return FAILURE;
4917
4918   return SUCCESS;
4919 }
4920
4921
4922 gfc_try
4923 gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
4924 {
4925   if (type_check (time, 0, BT_INTEGER) == FAILURE)
4926     return FAILURE;
4927
4928   if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE)
4929     return FAILURE;
4930
4931   if (scalar_check (time, 0) == FAILURE)
4932     return FAILURE;
4933
4934   if (array_check (values, 1) == FAILURE)
4935     return FAILURE;
4936
4937   if (rank_check (values, 1, 1) == FAILURE)
4938     return FAILURE;
4939
4940   if (variable_check (values, 1, false) == FAILURE)
4941     return FAILURE;
4942
4943   if (type_check (values, 1, BT_INTEGER) == FAILURE)
4944     return FAILURE;
4945
4946   if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE)
4947     return FAILURE;
4948
4949   return SUCCESS;
4950 }
4951
4952
4953 gfc_try
4954 gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
4955 {
4956   if (scalar_check (unit, 0) == FAILURE)
4957     return FAILURE;
4958
4959   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4960     return FAILURE;
4961
4962   if (type_check (name, 1, BT_CHARACTER) == FAILURE)
4963     return FAILURE;
4964   if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE)
4965     return FAILURE;
4966
4967   return SUCCESS;
4968 }
4969
4970
4971 gfc_try
4972 gfc_check_isatty (gfc_expr *unit)
4973 {
4974   if (unit == NULL)
4975     return FAILURE;
4976
4977   if (type_check (unit, 0, BT_INTEGER) == FAILURE)
4978     return FAILURE;
4979
4980   if (scalar_check (unit, 0) == FAILURE)
4981     return FAILURE;
4982
4983   return SUCCESS;
4984 }
4985
4986
4987 gfc_try
4988 gfc_check_isnan (gfc_expr *x)
4989 {
4990   if (type_check (x, 0, BT_REAL) == FAILURE)
4991     return FAILURE;
4992
4993   return SUCCESS;
4994 }
4995
4996
4997 gfc_try
4998 gfc_check_perror (gfc_expr *string)
4999 {
5000   if (type_check (string, 0, BT_CHARACTER) == FAILURE)
5001     return FAILURE;
5002   if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE)
5003     return FAILURE;
5004
5005   return SUCCESS;
5006 }
5007
5008
5009 gfc_try
5010 gfc_check_umask (gfc_expr *mask)
5011 {
5012   if (type_check (mask, 0, BT_INTEGER) == FAILURE)
5013     return FAILURE;
5014
5015   if (scalar_check (mask, 0) == FAILURE)
5016     return FAILURE;
5017
5018   return SUCCESS;
5019 }
5020
5021
5022 gfc_try
5023 gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
5024 {
5025   if (type_check (mask, 0, BT_INTEGER) == FAILURE)
5026     return FAILURE;
5027
5028   if (scalar_check (mask, 0) == FAILURE)
5029     return FAILURE;
5030
5031   if (old == NULL)
5032     return SUCCESS;
5033
5034   if (scalar_check (old, 1) == FAILURE)
5035     return FAILURE;
5036
5037   if (type_check (old, 1, BT_INTEGER) == FAILURE)
5038     return FAILURE;
5039
5040   return SUCCESS;
5041 }
5042
5043
5044 gfc_try
5045 gfc_check_unlink (gfc_expr *name)
5046 {
5047   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
5048     return FAILURE;
5049   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
5050     return FAILURE;
5051
5052   return SUCCESS;
5053 }
5054
5055
5056 gfc_try
5057 gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
5058 {
5059   if (type_check (name, 0, BT_CHARACTER) == FAILURE)
5060     return FAILURE;
5061   if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE)
5062     return FAILURE;
5063
5064   if (status == NULL)
5065     return SUCCESS;
5066
5067   if (scalar_check (status, 1) == FAILURE)
5068     return FAILURE;
5069
5070   if (type_check (status, 1, BT_INTEGER) == FAILURE)
5071     return FAILURE;
5072
5073   return SUCCESS;
5074 }
5075
5076
5077 gfc_try
5078 gfc_check_signal (gfc_expr *number, gfc_expr *handler)
5079 {
5080   if (scalar_check (number, 0) == FAILURE)
5081     return FAILURE;
5082   if (type_check (number, 0, BT_INTEGER) == FAILURE)
5083     return FAILURE;
5084
5085   if (int_or_proc_check (handler, 1) == FAILURE)
5086     return FAILURE;
5087   if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
5088     return FAILURE;
5089
5090   return SUCCESS;
5091 }
5092
5093
5094 gfc_try
5095 gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
5096 {
5097   if (scalar_check (number, 0) == FAILURE)
5098     return FAILURE;
5099   if (type_check (number, 0, BT_INTEGER) == FAILURE)
5100     return FAILURE;
5101
5102   if (int_or_proc_check (handler, 1) == FAILURE)
5103     return FAILURE;
5104   if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE)
5105     return FAILURE;
5106
5107   if (status == NULL)
5108     return SUCCESS;
5109
5110   if (type_check (status, 2, BT_INTEGER) == FAILURE)
5111     return FAILURE;
5112   if (scalar_check (status, 2) == FAILURE)
5113     return FAILURE;
5114
5115   return SUCCESS;
5116 }
5117
5118
5119 gfc_try
5120 gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
5121 {
5122   if (type_check (cmd, 0, BT_CHARACTER) == FAILURE)
5123     return FAILURE;
5124   if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE)
5125     return FAILURE;
5126
5127   if (scalar_check (status, 1) == FAILURE)
5128     return FAILURE;
5129
5130   if (type_check (status, 1, BT_INTEGER) == FAILURE)
5131     return FAILURE;
5132
5133   if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE)
5134     return FAILURE;
5135
5136   return SUCCESS;
5137 }
5138
5139
5140 /* This is used for the GNU intrinsics AND, OR and XOR.  */
5141 gfc_try
5142 gfc_check_and (gfc_expr *i, gfc_expr *j)
5143 {
5144   if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL)
5145     {
5146       gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5147                  "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
5148                  gfc_current_intrinsic, &i->where);
5149       return FAILURE;
5150     }
5151
5152   if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL)
5153     {
5154       gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER "
5155                  "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
5156                  gfc_current_intrinsic, &j->where);
5157       return FAILURE;
5158     }
5159
5160   if (i->ts.type != j->ts.type)
5161     {
5162       gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must "
5163                  "have the same type", gfc_current_intrinsic_arg[0]->name,
5164                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5165                  &j->where);
5166       return FAILURE;
5167     }
5168
5169   if (scalar_check (i, 0) == FAILURE)
5170     return FAILURE;
5171
5172   if (scalar_check (j, 1) == FAILURE)
5173     return FAILURE;
5174
5175   return SUCCESS;
5176 }
5177
5178
5179 gfc_try
5180 gfc_check_storage_size (gfc_expr *a ATTRIBUTE_UNUSED, gfc_expr *kind)
5181 {
5182   if (kind == NULL)
5183     return SUCCESS;
5184
5185   if (type_check (kind, 1, BT_INTEGER) == FAILURE)
5186     return FAILURE;
5187
5188   if (scalar_check (kind, 1) == FAILURE)
5189     return FAILURE;
5190
5191   if (kind->expr_type != EXPR_CONSTANT)
5192     {
5193       gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant",
5194                  gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
5195                  &kind->where);
5196       return FAILURE;
5197     }
5198
5199   return SUCCESS;
5200 }