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