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