check.cc revision 1.1 1 1.1 mrg /* Check functions
2 1.1 mrg Copyright (C) 2002-2022 Free Software Foundation, Inc.
3 1.1 mrg Contributed by Andy Vaught & Katherine Holcomb
4 1.1 mrg
5 1.1 mrg This file is part of GCC.
6 1.1 mrg
7 1.1 mrg GCC is free software; you can redistribute it and/or modify it under
8 1.1 mrg the terms of the GNU General Public License as published by the Free
9 1.1 mrg Software Foundation; either version 3, or (at your option) any later
10 1.1 mrg version.
11 1.1 mrg
12 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 1.1 mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 1.1 mrg for more details.
16 1.1 mrg
17 1.1 mrg You should have received a copy of the GNU General Public License
18 1.1 mrg along with GCC; see the file COPYING3. If not see
19 1.1 mrg <http://www.gnu.org/licenses/>. */
20 1.1 mrg
21 1.1 mrg
22 1.1 mrg /* These functions check to see if an argument list is compatible with
23 1.1 mrg a particular intrinsic function or subroutine. Presence of
24 1.1 mrg required arguments has already been established, the argument list
25 1.1 mrg has been sorted into the right order and has NULL arguments in the
26 1.1 mrg correct places for missing optional arguments. */
27 1.1 mrg
28 1.1 mrg #include "config.h"
29 1.1 mrg #include "system.h"
30 1.1 mrg #include "coretypes.h"
31 1.1 mrg #include "options.h"
32 1.1 mrg #include "gfortran.h"
33 1.1 mrg #include "intrinsic.h"
34 1.1 mrg #include "constructor.h"
35 1.1 mrg #include "target-memory.h"
36 1.1 mrg
37 1.1 mrg
38 1.1 mrg /* Reset a BOZ to a zero value. This is used to prevent run-on errors
39 1.1 mrg from resolve.cc(resolve_function). */
40 1.1 mrg
41 1.1 mrg static void
42 1.1 mrg reset_boz (gfc_expr *x)
43 1.1 mrg {
44 1.1 mrg /* Clear boz info. */
45 1.1 mrg x->boz.rdx = 0;
46 1.1 mrg x->boz.len = 0;
47 1.1 mrg free (x->boz.str);
48 1.1 mrg
49 1.1 mrg x->ts.type = BT_INTEGER;
50 1.1 mrg x->ts.kind = gfc_default_integer_kind;
51 1.1 mrg mpz_init (x->value.integer);
52 1.1 mrg mpz_set_ui (x->value.integer, 0);
53 1.1 mrg }
54 1.1 mrg
55 1.1 mrg /* A BOZ literal constant can appear in a limited number of contexts.
56 1.1 mrg gfc_invalid_boz() is a helper function to simplify error/warning
57 1.1 mrg generation. gfortran accepts the nonstandard 'X' for 'Z', and gfortran
58 1.1 mrg allows the BOZ indicator to appear as a suffix. If -fallow-invalid-boz
59 1.1 mrg is used, then issue a warning; otherwise issue an error. */
60 1.1 mrg
61 1.1 mrg bool
62 1.1 mrg gfc_invalid_boz (const char *msg, locus *loc)
63 1.1 mrg {
64 1.1 mrg if (flag_allow_invalid_boz)
65 1.1 mrg {
66 1.1 mrg gfc_warning (0, msg, loc);
67 1.1 mrg return false;
68 1.1 mrg }
69 1.1 mrg
70 1.1 mrg const char *hint = _(" [see %<-fno-allow-invalid-boz%>]");
71 1.1 mrg size_t len = strlen (msg) + strlen (hint) + 1;
72 1.1 mrg char *msg2 = (char *) alloca (len);
73 1.1 mrg strcpy (msg2, msg);
74 1.1 mrg strcat (msg2, hint);
75 1.1 mrg gfc_error (msg2, loc);
76 1.1 mrg return true;
77 1.1 mrg }
78 1.1 mrg
79 1.1 mrg
80 1.1 mrg /* Issue an error for an illegal BOZ argument. */
81 1.1 mrg
82 1.1 mrg static bool
83 1.1 mrg illegal_boz_arg (gfc_expr *x)
84 1.1 mrg {
85 1.1 mrg if (x->ts.type == BT_BOZ)
86 1.1 mrg {
87 1.1 mrg gfc_error ("BOZ literal constant at %L cannot be an actual argument "
88 1.1 mrg "to %qs", &x->where, gfc_current_intrinsic);
89 1.1 mrg reset_boz (x);
90 1.1 mrg return true;
91 1.1 mrg }
92 1.1 mrg
93 1.1 mrg return false;
94 1.1 mrg }
95 1.1 mrg
96 1.1 mrg /* Some precedures take two arguments such that both cannot be BOZ. */
97 1.1 mrg
98 1.1 mrg static bool
99 1.1 mrg boz_args_check(gfc_expr *i, gfc_expr *j)
100 1.1 mrg {
101 1.1 mrg if (i->ts.type == BT_BOZ && j->ts.type == BT_BOZ)
102 1.1 mrg {
103 1.1 mrg gfc_error ("Arguments of %qs at %L and %L cannot both be BOZ "
104 1.1 mrg "literal constants", gfc_current_intrinsic, &i->where,
105 1.1 mrg &j->where);
106 1.1 mrg reset_boz (i);
107 1.1 mrg reset_boz (j);
108 1.1 mrg return false;
109 1.1 mrg
110 1.1 mrg }
111 1.1 mrg
112 1.1 mrg return true;
113 1.1 mrg }
114 1.1 mrg
115 1.1 mrg
116 1.1 mrg /* Check that a BOZ is a constant. */
117 1.1 mrg
118 1.1 mrg static bool
119 1.1 mrg is_boz_constant (gfc_expr *a)
120 1.1 mrg {
121 1.1 mrg if (a->expr_type != EXPR_CONSTANT)
122 1.1 mrg {
123 1.1 mrg gfc_error ("Invalid use of BOZ literal constant at %L", &a->where);
124 1.1 mrg return false;
125 1.1 mrg }
126 1.1 mrg
127 1.1 mrg return true;
128 1.1 mrg }
129 1.1 mrg
130 1.1 mrg
131 1.1 mrg /* Convert a octal string into a binary string. This is used in the
132 1.1 mrg fallback conversion of an octal string to a REAL. */
133 1.1 mrg
134 1.1 mrg static char *
135 1.1 mrg oct2bin(int nbits, char *oct)
136 1.1 mrg {
137 1.1 mrg const char bits[8][5] = {
138 1.1 mrg "000", "001", "010", "011", "100", "101", "110", "111"};
139 1.1 mrg
140 1.1 mrg char *buf, *bufp;
141 1.1 mrg int i, j, n;
142 1.1 mrg
143 1.1 mrg j = nbits + 1;
144 1.1 mrg if (nbits == 64) j++;
145 1.1 mrg
146 1.1 mrg bufp = buf = XCNEWVEC (char, j + 1);
147 1.1 mrg memset (bufp, 0, j + 1);
148 1.1 mrg
149 1.1 mrg n = strlen (oct);
150 1.1 mrg for (i = 0; i < n; i++, oct++)
151 1.1 mrg {
152 1.1 mrg j = *oct - 48;
153 1.1 mrg strcpy (bufp, &bits[j][0]);
154 1.1 mrg bufp += 3;
155 1.1 mrg }
156 1.1 mrg
157 1.1 mrg bufp = XCNEWVEC (char, nbits + 1);
158 1.1 mrg if (nbits == 64)
159 1.1 mrg strcpy (bufp, buf + 2);
160 1.1 mrg else
161 1.1 mrg strcpy (bufp, buf + 1);
162 1.1 mrg
163 1.1 mrg free (buf);
164 1.1 mrg
165 1.1 mrg return bufp;
166 1.1 mrg }
167 1.1 mrg
168 1.1 mrg
169 1.1 mrg /* Convert a hexidecimal string into a binary string. This is used in the
170 1.1 mrg fallback conversion of a hexidecimal string to a REAL. */
171 1.1 mrg
172 1.1 mrg static char *
173 1.1 mrg hex2bin(int nbits, char *hex)
174 1.1 mrg {
175 1.1 mrg const char bits[16][5] = {
176 1.1 mrg "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
177 1.1 mrg "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
178 1.1 mrg
179 1.1 mrg char *buf, *bufp;
180 1.1 mrg int i, j, n;
181 1.1 mrg
182 1.1 mrg bufp = buf = XCNEWVEC (char, nbits + 1);
183 1.1 mrg memset (bufp, 0, nbits + 1);
184 1.1 mrg
185 1.1 mrg n = strlen (hex);
186 1.1 mrg for (i = 0; i < n; i++, hex++)
187 1.1 mrg {
188 1.1 mrg j = *hex;
189 1.1 mrg if (j > 47 && j < 58)
190 1.1 mrg j -= 48;
191 1.1 mrg else if (j > 64 && j < 71)
192 1.1 mrg j -= 55;
193 1.1 mrg else if (j > 96 && j < 103)
194 1.1 mrg j -= 87;
195 1.1 mrg else
196 1.1 mrg gcc_unreachable ();
197 1.1 mrg
198 1.1 mrg strcpy (bufp, &bits[j][0]);
199 1.1 mrg bufp += 4;
200 1.1 mrg }
201 1.1 mrg
202 1.1 mrg return buf;
203 1.1 mrg }
204 1.1 mrg
205 1.1 mrg
206 1.1 mrg /* Fallback conversion of a BOZ string to REAL. */
207 1.1 mrg
208 1.1 mrg static void
209 1.1 mrg bin2real (gfc_expr *x, int kind)
210 1.1 mrg {
211 1.1 mrg char buf[114], *sp;
212 1.1 mrg int b, i, ie, t, w;
213 1.1 mrg bool sgn;
214 1.1 mrg mpz_t em;
215 1.1 mrg
216 1.1 mrg i = gfc_validate_kind (BT_REAL, kind, false);
217 1.1 mrg t = gfc_real_kinds[i].digits - 1;
218 1.1 mrg
219 1.1 mrg /* Number of bits in the exponent. */
220 1.1 mrg if (gfc_real_kinds[i].max_exponent == 16384)
221 1.1 mrg w = 15;
222 1.1 mrg else if (gfc_real_kinds[i].max_exponent == 1024)
223 1.1 mrg w = 11;
224 1.1 mrg else
225 1.1 mrg w = 8;
226 1.1 mrg
227 1.1 mrg if (x->boz.rdx == 16)
228 1.1 mrg sp = hex2bin (gfc_real_kinds[i].mode_precision, x->boz.str);
229 1.1 mrg else if (x->boz.rdx == 8)
230 1.1 mrg sp = oct2bin (gfc_real_kinds[i].mode_precision, x->boz.str);
231 1.1 mrg else
232 1.1 mrg sp = x->boz.str;
233 1.1 mrg
234 1.1 mrg /* Extract sign bit. */
235 1.1 mrg sgn = *sp != '0';
236 1.1 mrg
237 1.1 mrg /* Extract biased exponent. */
238 1.1 mrg memset (buf, 0, 114);
239 1.1 mrg strncpy (buf, ++sp, w);
240 1.1 mrg mpz_init (em);
241 1.1 mrg mpz_set_str (em, buf, 2);
242 1.1 mrg ie = mpz_get_si (em);
243 1.1 mrg
244 1.1 mrg mpfr_init2 (x->value.real, t + 1);
245 1.1 mrg x->ts.type = BT_REAL;
246 1.1 mrg x->ts.kind = kind;
247 1.1 mrg
248 1.1 mrg sp += w; /* Set to first digit in significand. */
249 1.1 mrg b = (1 << w) - 1;
250 1.1 mrg if ((i == 0 && ie == b) || (i == 1 && ie == b)
251 1.1 mrg || ((i == 2 || i == 3) && ie == b))
252 1.1 mrg {
253 1.1 mrg bool zeros = true;
254 1.1 mrg if (i == 2) sp++;
255 1.1 mrg for (; *sp; sp++)
256 1.1 mrg {
257 1.1 mrg if (*sp != '0')
258 1.1 mrg {
259 1.1 mrg zeros = false;
260 1.1 mrg break;
261 1.1 mrg }
262 1.1 mrg }
263 1.1 mrg
264 1.1 mrg if (zeros)
265 1.1 mrg mpfr_set_inf (x->value.real, 1);
266 1.1 mrg else
267 1.1 mrg mpfr_set_nan (x->value.real);
268 1.1 mrg }
269 1.1 mrg else
270 1.1 mrg {
271 1.1 mrg if (i == 2)
272 1.1 mrg strncpy (buf, sp, t + 1);
273 1.1 mrg else
274 1.1 mrg {
275 1.1 mrg /* Significand with hidden bit. */
276 1.1 mrg buf[0] = '1';
277 1.1 mrg strncpy (&buf[1], sp, t);
278 1.1 mrg }
279 1.1 mrg
280 1.1 mrg /* Convert to significand to integer. */
281 1.1 mrg mpz_set_str (em, buf, 2);
282 1.1 mrg ie -= ((1 << (w - 1)) - 1); /* Unbiased exponent. */
283 1.1 mrg mpfr_set_z_2exp (x->value.real, em, ie - t, GFC_RND_MODE);
284 1.1 mrg }
285 1.1 mrg
286 1.1 mrg if (sgn) mpfr_neg (x->value.real, x->value.real, GFC_RND_MODE);
287 1.1 mrg
288 1.1 mrg mpz_clear (em);
289 1.1 mrg }
290 1.1 mrg
291 1.1 mrg
292 1.1 mrg /* Fortran 2018 treats a BOZ as simply a string of bits. gfc_boz2real ()
293 1.1 mrg converts the string into a REAL of the appropriate kind. The treatment
294 1.1 mrg of the sign bit is processor dependent. */
295 1.1 mrg
296 1.1 mrg bool
297 1.1 mrg gfc_boz2real (gfc_expr *x, int kind)
298 1.1 mrg {
299 1.1 mrg extern int gfc_max_integer_kind;
300 1.1 mrg gfc_typespec ts;
301 1.1 mrg int len;
302 1.1 mrg char *buf, *str;
303 1.1 mrg
304 1.1 mrg if (!is_boz_constant (x))
305 1.1 mrg return false;
306 1.1 mrg
307 1.1 mrg /* Determine the length of the required string. */
308 1.1 mrg len = 8 * kind;
309 1.1 mrg if (x->boz.rdx == 16) len /= 4;
310 1.1 mrg if (x->boz.rdx == 8) len = len / 3 + 1;
311 1.1 mrg buf = (char *) alloca (len + 1); /* +1 for NULL terminator. */
312 1.1 mrg
313 1.1 mrg if (x->boz.len >= len) /* Truncate if necessary. */
314 1.1 mrg {
315 1.1 mrg str = x->boz.str + (x->boz.len - len);
316 1.1 mrg strcpy(buf, str);
317 1.1 mrg }
318 1.1 mrg else /* Copy and pad. */
319 1.1 mrg {
320 1.1 mrg memset (buf, 48, len);
321 1.1 mrg str = buf + (len - x->boz.len);
322 1.1 mrg strcpy (str, x->boz.str);
323 1.1 mrg }
324 1.1 mrg
325 1.1 mrg /* Need to adjust leading bits in an octal string. */
326 1.1 mrg if (x->boz.rdx == 8)
327 1.1 mrg {
328 1.1 mrg /* Clear first bit. */
329 1.1 mrg if (kind == 4 || kind == 10 || kind == 16)
330 1.1 mrg {
331 1.1 mrg if (buf[0] == '4')
332 1.1 mrg buf[0] = '0';
333 1.1 mrg else if (buf[0] == '5')
334 1.1 mrg buf[0] = '1';
335 1.1 mrg else if (buf[0] == '6')
336 1.1 mrg buf[0] = '2';
337 1.1 mrg else if (buf[0] == '7')
338 1.1 mrg buf[0] = '3';
339 1.1 mrg }
340 1.1 mrg /* Clear first two bits. */
341 1.1 mrg else
342 1.1 mrg {
343 1.1 mrg if (buf[0] == '2' || buf[0] == '4' || buf[0] == '6')
344 1.1 mrg buf[0] = '0';
345 1.1 mrg else if (buf[0] == '3' || buf[0] == '5' || buf[0] == '7')
346 1.1 mrg buf[0] = '1';
347 1.1 mrg }
348 1.1 mrg }
349 1.1 mrg
350 1.1 mrg /* Reset BOZ string to the truncated or padded version. */
351 1.1 mrg free (x->boz.str);
352 1.1 mrg x->boz.len = len;
353 1.1 mrg x->boz.str = XCNEWVEC (char, len + 1);
354 1.1 mrg strncpy (x->boz.str, buf, len);
355 1.1 mrg
356 1.1 mrg /* For some targets, the largest INTEGER in terms of bits is smaller than
357 1.1 mrg the bits needed to hold the REAL. Fortunately, the kind type parameter
358 1.1 mrg indicates the number of bytes required to an INTEGER and a REAL. */
359 1.1 mrg if (gfc_max_integer_kind < kind)
360 1.1 mrg {
361 1.1 mrg bin2real (x, kind);
362 1.1 mrg }
363 1.1 mrg else
364 1.1 mrg {
365 1.1 mrg /* Convert to widest possible integer. */
366 1.1 mrg gfc_boz2int (x, gfc_max_integer_kind);
367 1.1 mrg ts.type = BT_REAL;
368 1.1 mrg ts.kind = kind;
369 1.1 mrg if (!gfc_convert_boz (x, &ts))
370 1.1 mrg {
371 1.1 mrg gfc_error ("Failure in conversion of BOZ to REAL at %L", &x->where);
372 1.1 mrg return false;
373 1.1 mrg }
374 1.1 mrg }
375 1.1 mrg
376 1.1 mrg return true;
377 1.1 mrg }
378 1.1 mrg
379 1.1 mrg
380 1.1 mrg /* Fortran 2018 treats a BOZ as simply a string of bits. gfc_boz2int ()
381 1.1 mrg converts the string into an INTEGER of the appropriate kind. The
382 1.1 mrg treatment of the sign bit is processor dependent. If the converted
383 1.1 mrg value exceeds the range of the type, then wrap-around semantics are
384 1.1 mrg applied. */
385 1.1 mrg
386 1.1 mrg bool
387 1.1 mrg gfc_boz2int (gfc_expr *x, int kind)
388 1.1 mrg {
389 1.1 mrg int i, len;
390 1.1 mrg char *buf, *str;
391 1.1 mrg mpz_t tmp1;
392 1.1 mrg
393 1.1 mrg if (!is_boz_constant (x))
394 1.1 mrg return false;
395 1.1 mrg
396 1.1 mrg i = gfc_validate_kind (BT_INTEGER, kind, false);
397 1.1 mrg len = gfc_integer_kinds[i].bit_size;
398 1.1 mrg if (x->boz.rdx == 16) len /= 4;
399 1.1 mrg if (x->boz.rdx == 8) len = len / 3 + 1;
400 1.1 mrg buf = (char *) alloca (len + 1); /* +1 for NULL terminator. */
401 1.1 mrg
402 1.1 mrg if (x->boz.len >= len) /* Truncate if necessary. */
403 1.1 mrg {
404 1.1 mrg str = x->boz.str + (x->boz.len - len);
405 1.1 mrg strcpy(buf, str);
406 1.1 mrg }
407 1.1 mrg else /* Copy and pad. */
408 1.1 mrg {
409 1.1 mrg memset (buf, 48, len);
410 1.1 mrg str = buf + (len - x->boz.len);
411 1.1 mrg strcpy (str, x->boz.str);
412 1.1 mrg }
413 1.1 mrg
414 1.1 mrg /* Need to adjust leading bits in an octal string. */
415 1.1 mrg if (x->boz.rdx == 8)
416 1.1 mrg {
417 1.1 mrg /* Clear first bit. */
418 1.1 mrg if (kind == 1 || kind == 4 || kind == 16)
419 1.1 mrg {
420 1.1 mrg if (buf[0] == '4')
421 1.1 mrg buf[0] = '0';
422 1.1 mrg else if (buf[0] == '5')
423 1.1 mrg buf[0] = '1';
424 1.1 mrg else if (buf[0] == '6')
425 1.1 mrg buf[0] = '2';
426 1.1 mrg else if (buf[0] == '7')
427 1.1 mrg buf[0] = '3';
428 1.1 mrg }
429 1.1 mrg /* Clear first two bits. */
430 1.1 mrg else
431 1.1 mrg {
432 1.1 mrg if (buf[0] == '2' || buf[0] == '4' || buf[0] == '6')
433 1.1 mrg buf[0] = '0';
434 1.1 mrg else if (buf[0] == '3' || buf[0] == '5' || buf[0] == '7')
435 1.1 mrg buf[0] = '1';
436 1.1 mrg }
437 1.1 mrg }
438 1.1 mrg
439 1.1 mrg /* Convert as-if unsigned integer. */
440 1.1 mrg mpz_init (tmp1);
441 1.1 mrg mpz_set_str (tmp1, buf, x->boz.rdx);
442 1.1 mrg
443 1.1 mrg /* Check for wrap-around. */
444 1.1 mrg if (mpz_cmp (tmp1, gfc_integer_kinds[i].huge) > 0)
445 1.1 mrg {
446 1.1 mrg mpz_t tmp2;
447 1.1 mrg mpz_init (tmp2);
448 1.1 mrg mpz_add_ui (tmp2, gfc_integer_kinds[i].huge, 1);
449 1.1 mrg mpz_mod (tmp1, tmp1, tmp2);
450 1.1 mrg mpz_sub (tmp1, tmp1, tmp2);
451 1.1 mrg mpz_clear (tmp2);
452 1.1 mrg }
453 1.1 mrg
454 1.1 mrg /* Clear boz info. */
455 1.1 mrg x->boz.rdx = 0;
456 1.1 mrg x->boz.len = 0;
457 1.1 mrg free (x->boz.str);
458 1.1 mrg
459 1.1 mrg mpz_init (x->value.integer);
460 1.1 mrg mpz_set (x->value.integer, tmp1);
461 1.1 mrg x->ts.type = BT_INTEGER;
462 1.1 mrg x->ts.kind = kind;
463 1.1 mrg mpz_clear (tmp1);
464 1.1 mrg
465 1.1 mrg return true;
466 1.1 mrg }
467 1.1 mrg
468 1.1 mrg
469 1.1 mrg /* Make sure an expression is a scalar. */
470 1.1 mrg
471 1.1 mrg static bool
472 1.1 mrg scalar_check (gfc_expr *e, int n)
473 1.1 mrg {
474 1.1 mrg if (e->rank == 0)
475 1.1 mrg return true;
476 1.1 mrg
477 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a scalar",
478 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
479 1.1 mrg &e->where);
480 1.1 mrg
481 1.1 mrg return false;
482 1.1 mrg }
483 1.1 mrg
484 1.1 mrg
485 1.1 mrg /* Check the type of an expression. */
486 1.1 mrg
487 1.1 mrg static bool
488 1.1 mrg type_check (gfc_expr *e, int n, bt type)
489 1.1 mrg {
490 1.1 mrg if (e->ts.type == type)
491 1.1 mrg return true;
492 1.1 mrg
493 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be %s",
494 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
495 1.1 mrg &e->where, gfc_basic_typename (type));
496 1.1 mrg
497 1.1 mrg return false;
498 1.1 mrg }
499 1.1 mrg
500 1.1 mrg
501 1.1 mrg /* Check that the expression is a numeric type. */
502 1.1 mrg
503 1.1 mrg static bool
504 1.1 mrg numeric_check (gfc_expr *e, int n)
505 1.1 mrg {
506 1.1 mrg /* Users sometime use a subroutine designator as an actual argument to
507 1.1 mrg an intrinsic subprogram that expects an argument with a numeric type. */
508 1.1 mrg if (e->symtree && e->symtree->n.sym->attr.subroutine)
509 1.1 mrg goto error;
510 1.1 mrg
511 1.1 mrg if (gfc_numeric_ts (&e->ts))
512 1.1 mrg return true;
513 1.1 mrg
514 1.1 mrg /* If the expression has not got a type, check if its namespace can
515 1.1 mrg offer a default type. */
516 1.1 mrg if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_FUNCTION)
517 1.1 mrg && e->symtree->n.sym->ts.type == BT_UNKNOWN
518 1.1 mrg && gfc_set_default_type (e->symtree->n.sym, 0, e->symtree->n.sym->ns)
519 1.1 mrg && gfc_numeric_ts (&e->symtree->n.sym->ts))
520 1.1 mrg {
521 1.1 mrg e->ts = e->symtree->n.sym->ts;
522 1.1 mrg return true;
523 1.1 mrg }
524 1.1 mrg
525 1.1 mrg error:
526 1.1 mrg
527 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must have a numeric type",
528 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
529 1.1 mrg &e->where);
530 1.1 mrg
531 1.1 mrg return false;
532 1.1 mrg }
533 1.1 mrg
534 1.1 mrg
535 1.1 mrg /* Check that an expression is integer or real. */
536 1.1 mrg
537 1.1 mrg static bool
538 1.1 mrg int_or_real_check (gfc_expr *e, int n)
539 1.1 mrg {
540 1.1 mrg if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
541 1.1 mrg {
542 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
543 1.1 mrg "or REAL", gfc_current_intrinsic_arg[n]->name,
544 1.1 mrg gfc_current_intrinsic, &e->where);
545 1.1 mrg return false;
546 1.1 mrg }
547 1.1 mrg
548 1.1 mrg return true;
549 1.1 mrg }
550 1.1 mrg
551 1.1 mrg /* Check that an expression is integer or real; allow character for
552 1.1 mrg F2003 or later. */
553 1.1 mrg
554 1.1 mrg static bool
555 1.1 mrg int_or_real_or_char_check_f2003 (gfc_expr *e, int n)
556 1.1 mrg {
557 1.1 mrg if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL)
558 1.1 mrg {
559 1.1 mrg if (e->ts.type == BT_CHARACTER)
560 1.1 mrg return gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Character for "
561 1.1 mrg "%qs argument of %qs intrinsic at %L",
562 1.1 mrg gfc_current_intrinsic_arg[n]->name,
563 1.1 mrg gfc_current_intrinsic, &e->where);
564 1.1 mrg else
565 1.1 mrg {
566 1.1 mrg if (gfc_option.allow_std & GFC_STD_F2003)
567 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
568 1.1 mrg "or REAL or CHARACTER",
569 1.1 mrg gfc_current_intrinsic_arg[n]->name,
570 1.1 mrg gfc_current_intrinsic, &e->where);
571 1.1 mrg else
572 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
573 1.1 mrg "or REAL", gfc_current_intrinsic_arg[n]->name,
574 1.1 mrg gfc_current_intrinsic, &e->where);
575 1.1 mrg }
576 1.1 mrg return false;
577 1.1 mrg }
578 1.1 mrg
579 1.1 mrg return true;
580 1.1 mrg }
581 1.1 mrg
582 1.1 mrg /* Check that an expression is an intrinsic type. */
583 1.1 mrg static bool
584 1.1 mrg intrinsic_type_check (gfc_expr *e, int n)
585 1.1 mrg {
586 1.1 mrg if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL
587 1.1 mrg && e->ts.type != BT_COMPLEX && e->ts.type != BT_CHARACTER
588 1.1 mrg && e->ts.type != BT_LOGICAL)
589 1.1 mrg {
590 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of intrinsic type",
591 1.1 mrg gfc_current_intrinsic_arg[n]->name,
592 1.1 mrg gfc_current_intrinsic, &e->where);
593 1.1 mrg return false;
594 1.1 mrg }
595 1.1 mrg return true;
596 1.1 mrg }
597 1.1 mrg
598 1.1 mrg /* Check that an expression is real or complex. */
599 1.1 mrg
600 1.1 mrg static bool
601 1.1 mrg real_or_complex_check (gfc_expr *e, int n)
602 1.1 mrg {
603 1.1 mrg if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX)
604 1.1 mrg {
605 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be REAL "
606 1.1 mrg "or COMPLEX", gfc_current_intrinsic_arg[n]->name,
607 1.1 mrg gfc_current_intrinsic, &e->where);
608 1.1 mrg return false;
609 1.1 mrg }
610 1.1 mrg
611 1.1 mrg return true;
612 1.1 mrg }
613 1.1 mrg
614 1.1 mrg
615 1.1 mrg /* Check that an expression is INTEGER or PROCEDURE. */
616 1.1 mrg
617 1.1 mrg static bool
618 1.1 mrg int_or_proc_check (gfc_expr *e, int n)
619 1.1 mrg {
620 1.1 mrg if (e->ts.type != BT_INTEGER && e->ts.type != BT_PROCEDURE)
621 1.1 mrg {
622 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER "
623 1.1 mrg "or PROCEDURE", gfc_current_intrinsic_arg[n]->name,
624 1.1 mrg gfc_current_intrinsic, &e->where);
625 1.1 mrg return false;
626 1.1 mrg }
627 1.1 mrg
628 1.1 mrg return true;
629 1.1 mrg }
630 1.1 mrg
631 1.1 mrg
632 1.1 mrg /* Check that the expression is an optional constant integer
633 1.1 mrg and that it specifies a valid kind for that type. */
634 1.1 mrg
635 1.1 mrg static bool
636 1.1 mrg kind_check (gfc_expr *k, int n, bt type)
637 1.1 mrg {
638 1.1 mrg int kind;
639 1.1 mrg
640 1.1 mrg if (k == NULL)
641 1.1 mrg return true;
642 1.1 mrg
643 1.1 mrg if (!type_check (k, n, BT_INTEGER))
644 1.1 mrg return false;
645 1.1 mrg
646 1.1 mrg if (!scalar_check (k, n))
647 1.1 mrg return false;
648 1.1 mrg
649 1.1 mrg if (!gfc_check_init_expr (k))
650 1.1 mrg {
651 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
652 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
653 1.1 mrg &k->where);
654 1.1 mrg return false;
655 1.1 mrg }
656 1.1 mrg
657 1.1 mrg if (gfc_extract_int (k, &kind)
658 1.1 mrg || gfc_validate_kind (type, kind, true) < 0)
659 1.1 mrg {
660 1.1 mrg gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type),
661 1.1 mrg &k->where);
662 1.1 mrg return false;
663 1.1 mrg }
664 1.1 mrg
665 1.1 mrg return true;
666 1.1 mrg }
667 1.1 mrg
668 1.1 mrg
669 1.1 mrg /* Make sure the expression is a double precision real. */
670 1.1 mrg
671 1.1 mrg static bool
672 1.1 mrg double_check (gfc_expr *d, int n)
673 1.1 mrg {
674 1.1 mrg if (!type_check (d, n, BT_REAL))
675 1.1 mrg return false;
676 1.1 mrg
677 1.1 mrg if (d->ts.kind != gfc_default_double_kind)
678 1.1 mrg {
679 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be double "
680 1.1 mrg "precision", gfc_current_intrinsic_arg[n]->name,
681 1.1 mrg gfc_current_intrinsic, &d->where);
682 1.1 mrg return false;
683 1.1 mrg }
684 1.1 mrg
685 1.1 mrg return true;
686 1.1 mrg }
687 1.1 mrg
688 1.1 mrg
689 1.1 mrg static bool
690 1.1 mrg coarray_check (gfc_expr *e, int n)
691 1.1 mrg {
692 1.1 mrg if (e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
693 1.1 mrg && CLASS_DATA (e)->attr.codimension
694 1.1 mrg && CLASS_DATA (e)->as->corank)
695 1.1 mrg {
696 1.1 mrg gfc_add_class_array_ref (e);
697 1.1 mrg return true;
698 1.1 mrg }
699 1.1 mrg
700 1.1 mrg if (!gfc_is_coarray (e))
701 1.1 mrg {
702 1.1 mrg gfc_error ("Expected coarray variable as %qs argument to the %s "
703 1.1 mrg "intrinsic at %L", gfc_current_intrinsic_arg[n]->name,
704 1.1 mrg gfc_current_intrinsic, &e->where);
705 1.1 mrg return false;
706 1.1 mrg }
707 1.1 mrg
708 1.1 mrg return true;
709 1.1 mrg }
710 1.1 mrg
711 1.1 mrg
712 1.1 mrg /* Make sure the expression is a logical array. */
713 1.1 mrg
714 1.1 mrg static bool
715 1.1 mrg logical_array_check (gfc_expr *array, int n)
716 1.1 mrg {
717 1.1 mrg if (array->ts.type != BT_LOGICAL || array->rank == 0)
718 1.1 mrg {
719 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a logical "
720 1.1 mrg "array", gfc_current_intrinsic_arg[n]->name,
721 1.1 mrg gfc_current_intrinsic, &array->where);
722 1.1 mrg return false;
723 1.1 mrg }
724 1.1 mrg
725 1.1 mrg return true;
726 1.1 mrg }
727 1.1 mrg
728 1.1 mrg
729 1.1 mrg /* Make sure an expression is an array. */
730 1.1 mrg
731 1.1 mrg static bool
732 1.1 mrg array_check (gfc_expr *e, int n)
733 1.1 mrg {
734 1.1 mrg if (e->rank != 0 && e->ts.type == BT_CLASS && gfc_expr_attr (e).class_ok
735 1.1 mrg && CLASS_DATA (e)->attr.dimension
736 1.1 mrg && CLASS_DATA (e)->as->rank)
737 1.1 mrg {
738 1.1 mrg gfc_add_class_array_ref (e);
739 1.1 mrg }
740 1.1 mrg
741 1.1 mrg if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
742 1.1 mrg return true;
743 1.1 mrg
744 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be an array",
745 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
746 1.1 mrg &e->where);
747 1.1 mrg
748 1.1 mrg return false;
749 1.1 mrg }
750 1.1 mrg
751 1.1 mrg
752 1.1 mrg /* If expr is a constant, then check to ensure that it is greater than
753 1.1 mrg of equal to zero. */
754 1.1 mrg
755 1.1 mrg static bool
756 1.1 mrg nonnegative_check (const char *arg, gfc_expr *expr)
757 1.1 mrg {
758 1.1 mrg int i;
759 1.1 mrg
760 1.1 mrg if (expr->expr_type == EXPR_CONSTANT)
761 1.1 mrg {
762 1.1 mrg gfc_extract_int (expr, &i);
763 1.1 mrg if (i < 0)
764 1.1 mrg {
765 1.1 mrg gfc_error ("%qs at %L must be nonnegative", arg, &expr->where);
766 1.1 mrg return false;
767 1.1 mrg }
768 1.1 mrg }
769 1.1 mrg
770 1.1 mrg return true;
771 1.1 mrg }
772 1.1 mrg
773 1.1 mrg
774 1.1 mrg /* If expr is a constant, then check to ensure that it is greater than zero. */
775 1.1 mrg
776 1.1 mrg static bool
777 1.1 mrg positive_check (int n, gfc_expr *expr)
778 1.1 mrg {
779 1.1 mrg int i;
780 1.1 mrg
781 1.1 mrg if (expr->expr_type == EXPR_CONSTANT)
782 1.1 mrg {
783 1.1 mrg gfc_extract_int (expr, &i);
784 1.1 mrg if (i <= 0)
785 1.1 mrg {
786 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be positive",
787 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
788 1.1 mrg &expr->where);
789 1.1 mrg return false;
790 1.1 mrg }
791 1.1 mrg }
792 1.1 mrg
793 1.1 mrg return true;
794 1.1 mrg }
795 1.1 mrg
796 1.1 mrg
797 1.1 mrg /* If expr2 is constant, then check that the value is less than
798 1.1 mrg (less than or equal to, if 'or_equal' is true) bit_size(expr1). */
799 1.1 mrg
800 1.1 mrg static bool
801 1.1 mrg less_than_bitsize1 (const char *arg1, gfc_expr *expr1, const char *arg2,
802 1.1 mrg gfc_expr *expr2, bool or_equal)
803 1.1 mrg {
804 1.1 mrg int i2, i3;
805 1.1 mrg
806 1.1 mrg if (expr2->expr_type == EXPR_CONSTANT)
807 1.1 mrg {
808 1.1 mrg gfc_extract_int (expr2, &i2);
809 1.1 mrg i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
810 1.1 mrg
811 1.1 mrg /* For ISHFT[C], check that |shift| <= bit_size(i). */
812 1.1 mrg if (arg2 == NULL)
813 1.1 mrg {
814 1.1 mrg if (i2 < 0)
815 1.1 mrg i2 = -i2;
816 1.1 mrg
817 1.1 mrg if (i2 > gfc_integer_kinds[i3].bit_size)
818 1.1 mrg {
819 1.1 mrg gfc_error ("The absolute value of SHIFT at %L must be less "
820 1.1 mrg "than or equal to BIT_SIZE(%qs)",
821 1.1 mrg &expr2->where, arg1);
822 1.1 mrg return false;
823 1.1 mrg }
824 1.1 mrg }
825 1.1 mrg
826 1.1 mrg if (or_equal)
827 1.1 mrg {
828 1.1 mrg if (i2 > gfc_integer_kinds[i3].bit_size)
829 1.1 mrg {
830 1.1 mrg gfc_error ("%qs at %L must be less than "
831 1.1 mrg "or equal to BIT_SIZE(%qs)",
832 1.1 mrg arg2, &expr2->where, arg1);
833 1.1 mrg return false;
834 1.1 mrg }
835 1.1 mrg }
836 1.1 mrg else
837 1.1 mrg {
838 1.1 mrg if (i2 >= gfc_integer_kinds[i3].bit_size)
839 1.1 mrg {
840 1.1 mrg gfc_error ("%qs at %L must be less than BIT_SIZE(%qs)",
841 1.1 mrg arg2, &expr2->where, arg1);
842 1.1 mrg return false;
843 1.1 mrg }
844 1.1 mrg }
845 1.1 mrg }
846 1.1 mrg
847 1.1 mrg return true;
848 1.1 mrg }
849 1.1 mrg
850 1.1 mrg
851 1.1 mrg /* If expr is constant, then check that the value is less than or equal
852 1.1 mrg to the bit_size of the kind k. */
853 1.1 mrg
854 1.1 mrg static bool
855 1.1 mrg less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
856 1.1 mrg {
857 1.1 mrg int i, val;
858 1.1 mrg
859 1.1 mrg if (expr->expr_type != EXPR_CONSTANT)
860 1.1 mrg return true;
861 1.1 mrg
862 1.1 mrg i = gfc_validate_kind (BT_INTEGER, k, false);
863 1.1 mrg gfc_extract_int (expr, &val);
864 1.1 mrg
865 1.1 mrg if (val > gfc_integer_kinds[i].bit_size)
866 1.1 mrg {
867 1.1 mrg gfc_error ("%qs at %L must be less than or equal to the BIT_SIZE of "
868 1.1 mrg "INTEGER(KIND=%d)", arg, &expr->where, k);
869 1.1 mrg return false;
870 1.1 mrg }
871 1.1 mrg
872 1.1 mrg return true;
873 1.1 mrg }
874 1.1 mrg
875 1.1 mrg
876 1.1 mrg /* If expr2 and expr3 are constants, then check that the value is less than
877 1.1 mrg or equal to bit_size(expr1). */
878 1.1 mrg
879 1.1 mrg static bool
880 1.1 mrg less_than_bitsize2 (const char *arg1, gfc_expr *expr1, const char *arg2,
881 1.1 mrg gfc_expr *expr2, const char *arg3, gfc_expr *expr3)
882 1.1 mrg {
883 1.1 mrg int i2, i3;
884 1.1 mrg
885 1.1 mrg if (expr2->expr_type == EXPR_CONSTANT && expr3->expr_type == EXPR_CONSTANT)
886 1.1 mrg {
887 1.1 mrg gfc_extract_int (expr2, &i2);
888 1.1 mrg gfc_extract_int (expr3, &i3);
889 1.1 mrg i2 += i3;
890 1.1 mrg i3 = gfc_validate_kind (BT_INTEGER, expr1->ts.kind, false);
891 1.1 mrg if (i2 > gfc_integer_kinds[i3].bit_size)
892 1.1 mrg {
893 1.1 mrg gfc_error ("%<%s + %s%> at %L must be less than or equal "
894 1.1 mrg "to BIT_SIZE(%qs)",
895 1.1 mrg arg2, arg3, &expr2->where, arg1);
896 1.1 mrg return false;
897 1.1 mrg }
898 1.1 mrg }
899 1.1 mrg
900 1.1 mrg return true;
901 1.1 mrg }
902 1.1 mrg
903 1.1 mrg /* Make sure two expressions have the same type. */
904 1.1 mrg
905 1.1 mrg static bool
906 1.1 mrg same_type_check (gfc_expr *e, int n, gfc_expr *f, int m, bool assoc = false)
907 1.1 mrg {
908 1.1 mrg gfc_typespec *ets = &e->ts;
909 1.1 mrg gfc_typespec *fts = &f->ts;
910 1.1 mrg
911 1.1 mrg if (assoc)
912 1.1 mrg {
913 1.1 mrg /* Procedure pointer component expressions have the type of the interface
914 1.1 mrg procedure. If they are being tested for association with a procedure
915 1.1 mrg pointer (ie. not a component), the type of the procedure must be
916 1.1 mrg determined. */
917 1.1 mrg if (e->ts.type == BT_PROCEDURE && e->symtree->n.sym)
918 1.1 mrg ets = &e->symtree->n.sym->ts;
919 1.1 mrg if (f->ts.type == BT_PROCEDURE && f->symtree->n.sym)
920 1.1 mrg fts = &f->symtree->n.sym->ts;
921 1.1 mrg }
922 1.1 mrg
923 1.1 mrg if (gfc_compare_types (ets, fts))
924 1.1 mrg return true;
925 1.1 mrg
926 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be the same type "
927 1.1 mrg "and kind as %qs", gfc_current_intrinsic_arg[m]->name,
928 1.1 mrg gfc_current_intrinsic, &f->where,
929 1.1 mrg gfc_current_intrinsic_arg[n]->name);
930 1.1 mrg
931 1.1 mrg return false;
932 1.1 mrg }
933 1.1 mrg
934 1.1 mrg
935 1.1 mrg /* Make sure that an expression has a certain (nonzero) rank. */
936 1.1 mrg
937 1.1 mrg static bool
938 1.1 mrg rank_check (gfc_expr *e, int n, int rank)
939 1.1 mrg {
940 1.1 mrg if (e->rank == rank)
941 1.1 mrg return true;
942 1.1 mrg
943 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of rank %d",
944 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
945 1.1 mrg &e->where, rank);
946 1.1 mrg
947 1.1 mrg return false;
948 1.1 mrg }
949 1.1 mrg
950 1.1 mrg
951 1.1 mrg /* Make sure a variable expression is not an optional dummy argument. */
952 1.1 mrg
953 1.1 mrg static bool
954 1.1 mrg nonoptional_check (gfc_expr *e, int n)
955 1.1 mrg {
956 1.1 mrg if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
957 1.1 mrg {
958 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must not be OPTIONAL",
959 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
960 1.1 mrg &e->where);
961 1.1 mrg }
962 1.1 mrg
963 1.1 mrg /* TODO: Recursive check on nonoptional variables? */
964 1.1 mrg
965 1.1 mrg return true;
966 1.1 mrg }
967 1.1 mrg
968 1.1 mrg
969 1.1 mrg /* Check for ALLOCATABLE attribute. */
970 1.1 mrg
971 1.1 mrg static bool
972 1.1 mrg allocatable_check (gfc_expr *e, int n)
973 1.1 mrg {
974 1.1 mrg symbol_attribute attr;
975 1.1 mrg
976 1.1 mrg attr = gfc_variable_attr (e, NULL);
977 1.1 mrg if (!attr.allocatable
978 1.1 mrg || (attr.associate_var && !attr.select_rank_temporary))
979 1.1 mrg {
980 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be ALLOCATABLE",
981 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
982 1.1 mrg &e->where);
983 1.1 mrg return false;
984 1.1 mrg }
985 1.1 mrg
986 1.1 mrg return true;
987 1.1 mrg }
988 1.1 mrg
989 1.1 mrg
990 1.1 mrg /* Check that an expression has a particular kind. */
991 1.1 mrg
992 1.1 mrg static bool
993 1.1 mrg kind_value_check (gfc_expr *e, int n, int k)
994 1.1 mrg {
995 1.1 mrg if (e->ts.kind == k)
996 1.1 mrg return true;
997 1.1 mrg
998 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of kind %d",
999 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
1000 1.1 mrg &e->where, k);
1001 1.1 mrg
1002 1.1 mrg return false;
1003 1.1 mrg }
1004 1.1 mrg
1005 1.1 mrg
1006 1.1 mrg /* Make sure an expression is a variable. */
1007 1.1 mrg
1008 1.1 mrg static bool
1009 1.1 mrg variable_check (gfc_expr *e, int n, bool allow_proc)
1010 1.1 mrg {
1011 1.1 mrg if (e->expr_type == EXPR_VARIABLE
1012 1.1 mrg && e->symtree->n.sym->attr.intent == INTENT_IN
1013 1.1 mrg && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
1014 1.1 mrg || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT)
1015 1.1 mrg && !gfc_check_vardef_context (e, false, true, false, NULL))
1016 1.1 mrg {
1017 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L cannot be INTENT(IN)",
1018 1.1 mrg gfc_current_intrinsic_arg[n]->name,
1019 1.1 mrg gfc_current_intrinsic, &e->where);
1020 1.1 mrg return false;
1021 1.1 mrg }
1022 1.1 mrg
1023 1.1 mrg if (e->expr_type == EXPR_VARIABLE
1024 1.1 mrg && e->symtree->n.sym->attr.flavor != FL_PARAMETER
1025 1.1 mrg && (allow_proc || !e->symtree->n.sym->attr.function))
1026 1.1 mrg return true;
1027 1.1 mrg
1028 1.1 mrg if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.function
1029 1.1 mrg && e->symtree->n.sym == e->symtree->n.sym->result)
1030 1.1 mrg {
1031 1.1 mrg gfc_namespace *ns;
1032 1.1 mrg for (ns = gfc_current_ns; ns; ns = ns->parent)
1033 1.1 mrg if (ns->proc_name == e->symtree->n.sym)
1034 1.1 mrg return true;
1035 1.1 mrg }
1036 1.1 mrg
1037 1.1 mrg /* F2018:R902: function reference having a data pointer result. */
1038 1.1 mrg if (e->expr_type == EXPR_FUNCTION
1039 1.1 mrg && e->symtree->n.sym->attr.flavor == FL_PROCEDURE
1040 1.1 mrg && e->symtree->n.sym->attr.function
1041 1.1 mrg && e->symtree->n.sym->attr.pointer)
1042 1.1 mrg return true;
1043 1.1 mrg
1044 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a variable",
1045 1.1 mrg gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where);
1046 1.1 mrg
1047 1.1 mrg return false;
1048 1.1 mrg }
1049 1.1 mrg
1050 1.1 mrg
1051 1.1 mrg /* Check the common DIM parameter for correctness. */
1052 1.1 mrg
1053 1.1 mrg static bool
1054 1.1 mrg dim_check (gfc_expr *dim, int n, bool optional)
1055 1.1 mrg {
1056 1.1 mrg if (dim == NULL)
1057 1.1 mrg return true;
1058 1.1 mrg
1059 1.1 mrg if (!type_check (dim, n, BT_INTEGER))
1060 1.1 mrg return false;
1061 1.1 mrg
1062 1.1 mrg if (!scalar_check (dim, n))
1063 1.1 mrg return false;
1064 1.1 mrg
1065 1.1 mrg if (!optional && !nonoptional_check (dim, n))
1066 1.1 mrg return false;
1067 1.1 mrg
1068 1.1 mrg return true;
1069 1.1 mrg }
1070 1.1 mrg
1071 1.1 mrg
1072 1.1 mrg /* If a coarray DIM parameter is a constant, make sure that it is greater than
1073 1.1 mrg zero and less than or equal to the corank of the given array. */
1074 1.1 mrg
1075 1.1 mrg static bool
1076 1.1 mrg dim_corank_check (gfc_expr *dim, gfc_expr *array)
1077 1.1 mrg {
1078 1.1 mrg int corank;
1079 1.1 mrg
1080 1.1 mrg gcc_assert (array->expr_type == EXPR_VARIABLE);
1081 1.1 mrg
1082 1.1 mrg if (dim->expr_type != EXPR_CONSTANT)
1083 1.1 mrg return true;
1084 1.1 mrg
1085 1.1 mrg if (array->ts.type == BT_CLASS)
1086 1.1 mrg return true;
1087 1.1 mrg
1088 1.1 mrg corank = gfc_get_corank (array);
1089 1.1 mrg
1090 1.1 mrg if (mpz_cmp_ui (dim->value.integer, 1) < 0
1091 1.1 mrg || mpz_cmp_ui (dim->value.integer, corank) > 0)
1092 1.1 mrg {
1093 1.1 mrg gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
1094 1.1 mrg "codimension index", gfc_current_intrinsic, &dim->where);
1095 1.1 mrg
1096 1.1 mrg return false;
1097 1.1 mrg }
1098 1.1 mrg
1099 1.1 mrg return true;
1100 1.1 mrg }
1101 1.1 mrg
1102 1.1 mrg
1103 1.1 mrg /* If a DIM parameter is a constant, make sure that it is greater than
1104 1.1 mrg zero and less than or equal to the rank of the given array. If
1105 1.1 mrg allow_assumed is zero then dim must be less than the rank of the array
1106 1.1 mrg for assumed size arrays. */
1107 1.1 mrg
1108 1.1 mrg static bool
1109 1.1 mrg dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed)
1110 1.1 mrg {
1111 1.1 mrg gfc_array_ref *ar;
1112 1.1 mrg int rank;
1113 1.1 mrg
1114 1.1 mrg if (dim == NULL)
1115 1.1 mrg return true;
1116 1.1 mrg
1117 1.1 mrg if (dim->expr_type != EXPR_CONSTANT)
1118 1.1 mrg return true;
1119 1.1 mrg
1120 1.1 mrg if (array->expr_type == EXPR_FUNCTION && array->value.function.isym
1121 1.1 mrg && array->value.function.isym->id == GFC_ISYM_SPREAD)
1122 1.1 mrg rank = array->rank + 1;
1123 1.1 mrg else
1124 1.1 mrg rank = array->rank;
1125 1.1 mrg
1126 1.1 mrg /* Assumed-rank array. */
1127 1.1 mrg if (rank == -1)
1128 1.1 mrg rank = GFC_MAX_DIMENSIONS;
1129 1.1 mrg
1130 1.1 mrg if (array->expr_type == EXPR_VARIABLE)
1131 1.1 mrg {
1132 1.1 mrg ar = gfc_find_array_ref (array, true);
1133 1.1 mrg if (!ar)
1134 1.1 mrg return false;
1135 1.1 mrg if (ar->as->type == AS_ASSUMED_SIZE
1136 1.1 mrg && !allow_assumed
1137 1.1 mrg && ar->type != AR_ELEMENT
1138 1.1 mrg && ar->type != AR_SECTION)
1139 1.1 mrg rank--;
1140 1.1 mrg }
1141 1.1 mrg
1142 1.1 mrg if (mpz_cmp_ui (dim->value.integer, 1) < 0
1143 1.1 mrg || mpz_cmp_ui (dim->value.integer, rank) > 0)
1144 1.1 mrg {
1145 1.1 mrg gfc_error ("%<dim%> argument of %qs intrinsic at %L is not a valid "
1146 1.1 mrg "dimension index", gfc_current_intrinsic, &dim->where);
1147 1.1 mrg
1148 1.1 mrg return false;
1149 1.1 mrg }
1150 1.1 mrg
1151 1.1 mrg return true;
1152 1.1 mrg }
1153 1.1 mrg
1154 1.1 mrg
1155 1.1 mrg /* Compare the size of a along dimension ai with the size of b along
1156 1.1 mrg dimension bi, returning 0 if they are known not to be identical,
1157 1.1 mrg and 1 if they are identical, or if this cannot be determined. */
1158 1.1 mrg
1159 1.1 mrg static int
1160 1.1 mrg identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
1161 1.1 mrg {
1162 1.1 mrg mpz_t a_size, b_size;
1163 1.1 mrg int ret;
1164 1.1 mrg
1165 1.1 mrg gcc_assert (a->rank > ai);
1166 1.1 mrg gcc_assert (b->rank > bi);
1167 1.1 mrg
1168 1.1 mrg ret = 1;
1169 1.1 mrg
1170 1.1 mrg if (gfc_array_dimen_size (a, ai, &a_size))
1171 1.1 mrg {
1172 1.1 mrg if (gfc_array_dimen_size (b, bi, &b_size))
1173 1.1 mrg {
1174 1.1 mrg if (mpz_cmp (a_size, b_size) != 0)
1175 1.1 mrg ret = 0;
1176 1.1 mrg
1177 1.1 mrg mpz_clear (b_size);
1178 1.1 mrg }
1179 1.1 mrg mpz_clear (a_size);
1180 1.1 mrg }
1181 1.1 mrg return ret;
1182 1.1 mrg }
1183 1.1 mrg
1184 1.1 mrg /* Calculate the length of a character variable, including substrings.
1185 1.1 mrg Strip away parentheses if necessary. Return -1 if no length could
1186 1.1 mrg be determined. */
1187 1.1 mrg
1188 1.1 mrg static long
1189 1.1 mrg gfc_var_strlen (const gfc_expr *a)
1190 1.1 mrg {
1191 1.1 mrg gfc_ref *ra;
1192 1.1 mrg
1193 1.1 mrg while (a->expr_type == EXPR_OP && a->value.op.op == INTRINSIC_PARENTHESES)
1194 1.1 mrg a = a->value.op.op1;
1195 1.1 mrg
1196 1.1 mrg for (ra = a->ref; ra != NULL && ra->type != REF_SUBSTRING; ra = ra->next)
1197 1.1 mrg ;
1198 1.1 mrg
1199 1.1 mrg if (ra)
1200 1.1 mrg {
1201 1.1 mrg long start_a, end_a;
1202 1.1 mrg
1203 1.1 mrg if (!ra->u.ss.end)
1204 1.1 mrg return -1;
1205 1.1 mrg
1206 1.1 mrg if ((!ra->u.ss.start || ra->u.ss.start->expr_type == EXPR_CONSTANT)
1207 1.1 mrg && ra->u.ss.end->expr_type == EXPR_CONSTANT)
1208 1.1 mrg {
1209 1.1 mrg start_a = ra->u.ss.start ? mpz_get_si (ra->u.ss.start->value.integer)
1210 1.1 mrg : 1;
1211 1.1 mrg end_a = mpz_get_si (ra->u.ss.end->value.integer);
1212 1.1 mrg return (end_a < start_a) ? 0 : end_a - start_a + 1;
1213 1.1 mrg }
1214 1.1 mrg else if (ra->u.ss.start
1215 1.1 mrg && gfc_dep_compare_expr (ra->u.ss.start, ra->u.ss.end) == 0)
1216 1.1 mrg return 1;
1217 1.1 mrg else
1218 1.1 mrg return -1;
1219 1.1 mrg }
1220 1.1 mrg
1221 1.1 mrg if (a->ts.u.cl && a->ts.u.cl->length
1222 1.1 mrg && a->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1223 1.1 mrg return mpz_get_si (a->ts.u.cl->length->value.integer);
1224 1.1 mrg else if (a->expr_type == EXPR_CONSTANT
1225 1.1 mrg && (a->ts.u.cl == NULL || a->ts.u.cl->length == NULL))
1226 1.1 mrg return a->value.character.length;
1227 1.1 mrg else
1228 1.1 mrg return -1;
1229 1.1 mrg
1230 1.1 mrg }
1231 1.1 mrg
1232 1.1 mrg /* Check whether two character expressions have the same length;
1233 1.1 mrg returns true if they have or if the length cannot be determined,
1234 1.1 mrg otherwise return false and raise a gfc_error. */
1235 1.1 mrg
1236 1.1 mrg bool
1237 1.1 mrg gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name)
1238 1.1 mrg {
1239 1.1 mrg long len_a, len_b;
1240 1.1 mrg
1241 1.1 mrg len_a = gfc_var_strlen(a);
1242 1.1 mrg len_b = gfc_var_strlen(b);
1243 1.1 mrg
1244 1.1 mrg if (len_a == -1 || len_b == -1 || len_a == len_b)
1245 1.1 mrg return true;
1246 1.1 mrg else
1247 1.1 mrg {
1248 1.1 mrg gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L",
1249 1.1 mrg len_a, len_b, name, &a->where);
1250 1.1 mrg return false;
1251 1.1 mrg }
1252 1.1 mrg }
1253 1.1 mrg
1254 1.1 mrg
1255 1.1 mrg /***** Check functions *****/
1256 1.1 mrg
1257 1.1 mrg /* Check subroutine suitable for intrinsics taking a real argument and
1258 1.1 mrg a kind argument for the result. */
1259 1.1 mrg
1260 1.1 mrg static bool
1261 1.1 mrg check_a_kind (gfc_expr *a, gfc_expr *kind, bt type)
1262 1.1 mrg {
1263 1.1 mrg if (!type_check (a, 0, BT_REAL))
1264 1.1 mrg return false;
1265 1.1 mrg if (!kind_check (kind, 1, type))
1266 1.1 mrg return false;
1267 1.1 mrg
1268 1.1 mrg return true;
1269 1.1 mrg }
1270 1.1 mrg
1271 1.1 mrg
1272 1.1 mrg /* Check subroutine suitable for ceiling, floor and nint. */
1273 1.1 mrg
1274 1.1 mrg bool
1275 1.1 mrg gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind)
1276 1.1 mrg {
1277 1.1 mrg return check_a_kind (a, kind, BT_INTEGER);
1278 1.1 mrg }
1279 1.1 mrg
1280 1.1 mrg
1281 1.1 mrg /* Check subroutine suitable for aint, anint. */
1282 1.1 mrg
1283 1.1 mrg bool
1284 1.1 mrg gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind)
1285 1.1 mrg {
1286 1.1 mrg return check_a_kind (a, kind, BT_REAL);
1287 1.1 mrg }
1288 1.1 mrg
1289 1.1 mrg
1290 1.1 mrg bool
1291 1.1 mrg gfc_check_abs (gfc_expr *a)
1292 1.1 mrg {
1293 1.1 mrg if (!numeric_check (a, 0))
1294 1.1 mrg return false;
1295 1.1 mrg
1296 1.1 mrg return true;
1297 1.1 mrg }
1298 1.1 mrg
1299 1.1 mrg
1300 1.1 mrg bool
1301 1.1 mrg gfc_check_achar (gfc_expr *a, gfc_expr *kind)
1302 1.1 mrg {
1303 1.1 mrg if (a->ts.type == BT_BOZ)
1304 1.1 mrg {
1305 1.1 mrg if (gfc_invalid_boz (G_("BOZ literal constant at %L cannot appear in "
1306 1.1 mrg "ACHAR intrinsic subprogram"), &a->where))
1307 1.1 mrg return false;
1308 1.1 mrg
1309 1.1 mrg if (!gfc_boz2int (a, gfc_default_integer_kind))
1310 1.1 mrg return false;
1311 1.1 mrg }
1312 1.1 mrg
1313 1.1 mrg if (!type_check (a, 0, BT_INTEGER))
1314 1.1 mrg return false;
1315 1.1 mrg
1316 1.1 mrg if (!kind_check (kind, 1, BT_CHARACTER))
1317 1.1 mrg return false;
1318 1.1 mrg
1319 1.1 mrg return true;
1320 1.1 mrg }
1321 1.1 mrg
1322 1.1 mrg
1323 1.1 mrg bool
1324 1.1 mrg gfc_check_access_func (gfc_expr *name, gfc_expr *mode)
1325 1.1 mrg {
1326 1.1 mrg if (!type_check (name, 0, BT_CHARACTER)
1327 1.1 mrg || !scalar_check (name, 0))
1328 1.1 mrg return false;
1329 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
1330 1.1 mrg return false;
1331 1.1 mrg
1332 1.1 mrg if (!type_check (mode, 1, BT_CHARACTER)
1333 1.1 mrg || !scalar_check (mode, 1))
1334 1.1 mrg return false;
1335 1.1 mrg if (!kind_value_check (mode, 1, gfc_default_character_kind))
1336 1.1 mrg return false;
1337 1.1 mrg
1338 1.1 mrg return true;
1339 1.1 mrg }
1340 1.1 mrg
1341 1.1 mrg
1342 1.1 mrg bool
1343 1.1 mrg gfc_check_all_any (gfc_expr *mask, gfc_expr *dim)
1344 1.1 mrg {
1345 1.1 mrg if (!logical_array_check (mask, 0))
1346 1.1 mrg return false;
1347 1.1 mrg
1348 1.1 mrg if (!dim_check (dim, 1, false))
1349 1.1 mrg return false;
1350 1.1 mrg
1351 1.1 mrg if (!dim_rank_check (dim, mask, 0))
1352 1.1 mrg return false;
1353 1.1 mrg
1354 1.1 mrg return true;
1355 1.1 mrg }
1356 1.1 mrg
1357 1.1 mrg
1358 1.1 mrg /* Limited checking for ALLOCATED intrinsic. Additional checking
1359 1.1 mrg is performed in intrinsic.cc(sort_actual), because ALLOCATED
1360 1.1 mrg has two mutually exclusive non-optional arguments. */
1361 1.1 mrg
1362 1.1 mrg bool
1363 1.1 mrg gfc_check_allocated (gfc_expr *array)
1364 1.1 mrg {
1365 1.1 mrg /* Tests on allocated components of coarrays need to detour the check to
1366 1.1 mrg argument of the _caf_get. */
1367 1.1 mrg if (flag_coarray == GFC_FCOARRAY_LIB && array->expr_type == EXPR_FUNCTION
1368 1.1 mrg && array->value.function.isym
1369 1.1 mrg && array->value.function.isym->id == GFC_ISYM_CAF_GET)
1370 1.1 mrg {
1371 1.1 mrg array = array->value.function.actual->expr;
1372 1.1 mrg if (!array->ref)
1373 1.1 mrg return false;
1374 1.1 mrg }
1375 1.1 mrg
1376 1.1 mrg if (!variable_check (array, 0, false))
1377 1.1 mrg return false;
1378 1.1 mrg if (!allocatable_check (array, 0))
1379 1.1 mrg return false;
1380 1.1 mrg
1381 1.1 mrg return true;
1382 1.1 mrg }
1383 1.1 mrg
1384 1.1 mrg
1385 1.1 mrg /* Common check function where the first argument must be real or
1386 1.1 mrg integer and the second argument must be the same as the first. */
1387 1.1 mrg
1388 1.1 mrg bool
1389 1.1 mrg gfc_check_a_p (gfc_expr *a, gfc_expr *p)
1390 1.1 mrg {
1391 1.1 mrg if (!int_or_real_check (a, 0))
1392 1.1 mrg return false;
1393 1.1 mrg
1394 1.1 mrg if (a->ts.type != p->ts.type)
1395 1.1 mrg {
1396 1.1 mrg gfc_error ("%qs and %qs arguments of %qs intrinsic at %L must "
1397 1.1 mrg "have the same type", gfc_current_intrinsic_arg[0]->name,
1398 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1399 1.1 mrg &p->where);
1400 1.1 mrg return false;
1401 1.1 mrg }
1402 1.1 mrg
1403 1.1 mrg if (a->ts.kind != p->ts.kind)
1404 1.1 mrg {
1405 1.1 mrg if (!gfc_notify_std (GFC_STD_GNU, "Different type kinds at %L",
1406 1.1 mrg &p->where))
1407 1.1 mrg return false;
1408 1.1 mrg }
1409 1.1 mrg
1410 1.1 mrg return true;
1411 1.1 mrg }
1412 1.1 mrg
1413 1.1 mrg
1414 1.1 mrg bool
1415 1.1 mrg gfc_check_x_yd (gfc_expr *x, gfc_expr *y)
1416 1.1 mrg {
1417 1.1 mrg if (!double_check (x, 0) || !double_check (y, 1))
1418 1.1 mrg return false;
1419 1.1 mrg
1420 1.1 mrg return true;
1421 1.1 mrg }
1422 1.1 mrg
1423 1.1 mrg bool
1424 1.1 mrg gfc_invalid_null_arg (gfc_expr *x)
1425 1.1 mrg {
1426 1.1 mrg if (x->expr_type == EXPR_NULL)
1427 1.1 mrg {
1428 1.1 mrg gfc_error ("NULL at %L is not permitted as actual argument "
1429 1.1 mrg "to %qs intrinsic function", &x->where,
1430 1.1 mrg gfc_current_intrinsic);
1431 1.1 mrg return true;
1432 1.1 mrg }
1433 1.1 mrg return false;
1434 1.1 mrg }
1435 1.1 mrg
1436 1.1 mrg bool
1437 1.1 mrg gfc_check_associated (gfc_expr *pointer, gfc_expr *target)
1438 1.1 mrg {
1439 1.1 mrg symbol_attribute attr1, attr2;
1440 1.1 mrg int i;
1441 1.1 mrg bool t;
1442 1.1 mrg
1443 1.1 mrg if (gfc_invalid_null_arg (pointer))
1444 1.1 mrg return false;
1445 1.1 mrg
1446 1.1 mrg attr1 = gfc_expr_attr (pointer);
1447 1.1 mrg
1448 1.1 mrg if (!attr1.pointer && !attr1.proc_pointer)
1449 1.1 mrg {
1450 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER",
1451 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1452 1.1 mrg &pointer->where);
1453 1.1 mrg return false;
1454 1.1 mrg }
1455 1.1 mrg
1456 1.1 mrg /* F2008, C1242. */
1457 1.1 mrg if (attr1.pointer && gfc_is_coindexed (pointer))
1458 1.1 mrg {
1459 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
1460 1.1 mrg "coindexed", gfc_current_intrinsic_arg[0]->name,
1461 1.1 mrg gfc_current_intrinsic, &pointer->where);
1462 1.1 mrg return false;
1463 1.1 mrg }
1464 1.1 mrg
1465 1.1 mrg /* Target argument is optional. */
1466 1.1 mrg if (target == NULL)
1467 1.1 mrg return true;
1468 1.1 mrg
1469 1.1 mrg if (gfc_invalid_null_arg (target))
1470 1.1 mrg return false;
1471 1.1 mrg
1472 1.1 mrg if (target->expr_type == EXPR_VARIABLE || target->expr_type == EXPR_FUNCTION)
1473 1.1 mrg attr2 = gfc_expr_attr (target);
1474 1.1 mrg else
1475 1.1 mrg {
1476 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a pointer "
1477 1.1 mrg "or target VARIABLE or FUNCTION",
1478 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1479 1.1 mrg &target->where);
1480 1.1 mrg return false;
1481 1.1 mrg }
1482 1.1 mrg
1483 1.1 mrg if (attr1.pointer && !attr2.pointer && !attr2.target)
1484 1.1 mrg {
1485 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER "
1486 1.1 mrg "or a TARGET", gfc_current_intrinsic_arg[1]->name,
1487 1.1 mrg gfc_current_intrinsic, &target->where);
1488 1.1 mrg return false;
1489 1.1 mrg }
1490 1.1 mrg
1491 1.1 mrg /* F2008, C1242. */
1492 1.1 mrg if (attr1.pointer && gfc_is_coindexed (target))
1493 1.1 mrg {
1494 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
1495 1.1 mrg "coindexed", gfc_current_intrinsic_arg[1]->name,
1496 1.1 mrg gfc_current_intrinsic, &target->where);
1497 1.1 mrg return false;
1498 1.1 mrg }
1499 1.1 mrg
1500 1.1 mrg t = true;
1501 1.1 mrg if (!same_type_check (pointer, 0, target, 1, true))
1502 1.1 mrg t = false;
1503 1.1 mrg /* F2018 C838 explicitly allows an assumed-rank variable as the first
1504 1.1 mrg argument of intrinsic inquiry functions. */
1505 1.1 mrg if (pointer->rank != -1 && !rank_check (target, 0, pointer->rank))
1506 1.1 mrg t = false;
1507 1.1 mrg if (target->rank > 0 && target->ref)
1508 1.1 mrg {
1509 1.1 mrg for (i = 0; i < target->rank; i++)
1510 1.1 mrg if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
1511 1.1 mrg {
1512 1.1 mrg gfc_error ("Array section with a vector subscript at %L shall not "
1513 1.1 mrg "be the target of a pointer",
1514 1.1 mrg &target->where);
1515 1.1 mrg t = false;
1516 1.1 mrg break;
1517 1.1 mrg }
1518 1.1 mrg }
1519 1.1 mrg return t;
1520 1.1 mrg }
1521 1.1 mrg
1522 1.1 mrg
1523 1.1 mrg bool
1524 1.1 mrg gfc_check_atan_2 (gfc_expr *y, gfc_expr *x)
1525 1.1 mrg {
1526 1.1 mrg /* gfc_notify_std would be a waste of time as the return value
1527 1.1 mrg is seemingly used only for the generic resolution. The error
1528 1.1 mrg will be: Too many arguments. */
1529 1.1 mrg if ((gfc_option.allow_std & GFC_STD_F2008) == 0)
1530 1.1 mrg return false;
1531 1.1 mrg
1532 1.1 mrg return gfc_check_atan2 (y, x);
1533 1.1 mrg }
1534 1.1 mrg
1535 1.1 mrg
1536 1.1 mrg bool
1537 1.1 mrg gfc_check_atan2 (gfc_expr *y, gfc_expr *x)
1538 1.1 mrg {
1539 1.1 mrg if (!type_check (y, 0, BT_REAL))
1540 1.1 mrg return false;
1541 1.1 mrg if (!same_type_check (y, 0, x, 1))
1542 1.1 mrg return false;
1543 1.1 mrg
1544 1.1 mrg return true;
1545 1.1 mrg }
1546 1.1 mrg
1547 1.1 mrg
1548 1.1 mrg static bool
1549 1.1 mrg gfc_check_atomic (gfc_expr *atom, int atom_no, gfc_expr *value, int val_no,
1550 1.1 mrg gfc_expr *stat, int stat_no)
1551 1.1 mrg {
1552 1.1 mrg if (!scalar_check (atom, atom_no) || !scalar_check (value, val_no))
1553 1.1 mrg return false;
1554 1.1 mrg
1555 1.1 mrg if (!(atom->ts.type == BT_INTEGER && atom->ts.kind == gfc_atomic_int_kind)
1556 1.1 mrg && !(atom->ts.type == BT_LOGICAL
1557 1.1 mrg && atom->ts.kind == gfc_atomic_logical_kind))
1558 1.1 mrg {
1559 1.1 mrg gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1560 1.1 mrg "integer of ATOMIC_INT_KIND or a logical of "
1561 1.1 mrg "ATOMIC_LOGICAL_KIND", &atom->where, gfc_current_intrinsic);
1562 1.1 mrg return false;
1563 1.1 mrg }
1564 1.1 mrg
1565 1.1 mrg if (!gfc_is_coarray (atom) && !gfc_is_coindexed (atom))
1566 1.1 mrg {
1567 1.1 mrg gfc_error ("ATOM argument at %L of the %s intrinsic function shall be a "
1568 1.1 mrg "coarray or coindexed", &atom->where, gfc_current_intrinsic);
1569 1.1 mrg return false;
1570 1.1 mrg }
1571 1.1 mrg
1572 1.1 mrg if (atom->ts.type != value->ts.type)
1573 1.1 mrg {
1574 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall have the same "
1575 1.1 mrg "type as %qs at %L", gfc_current_intrinsic_arg[val_no]->name,
1576 1.1 mrg gfc_current_intrinsic, &value->where,
1577 1.1 mrg gfc_current_intrinsic_arg[atom_no]->name, &atom->where);
1578 1.1 mrg return false;
1579 1.1 mrg }
1580 1.1 mrg
1581 1.1 mrg if (stat != NULL)
1582 1.1 mrg {
1583 1.1 mrg if (!type_check (stat, stat_no, BT_INTEGER))
1584 1.1 mrg return false;
1585 1.1 mrg if (!scalar_check (stat, stat_no))
1586 1.1 mrg return false;
1587 1.1 mrg if (!variable_check (stat, stat_no, false))
1588 1.1 mrg return false;
1589 1.1 mrg if (!kind_value_check (stat, stat_no, gfc_default_integer_kind))
1590 1.1 mrg return false;
1591 1.1 mrg
1592 1.1 mrg if (!gfc_notify_std (GFC_STD_F2018, "STAT= argument to %s at %L",
1593 1.1 mrg gfc_current_intrinsic, &stat->where))
1594 1.1 mrg return false;
1595 1.1 mrg }
1596 1.1 mrg
1597 1.1 mrg return true;
1598 1.1 mrg }
1599 1.1 mrg
1600 1.1 mrg
1601 1.1 mrg bool
1602 1.1 mrg gfc_check_atomic_def (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1603 1.1 mrg {
1604 1.1 mrg if (atom->expr_type == EXPR_FUNCTION
1605 1.1 mrg && atom->value.function.isym
1606 1.1 mrg && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1607 1.1 mrg atom = atom->value.function.actual->expr;
1608 1.1 mrg
1609 1.1 mrg if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1610 1.1 mrg {
1611 1.1 mrg gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1612 1.1 mrg "definable", gfc_current_intrinsic, &atom->where);
1613 1.1 mrg return false;
1614 1.1 mrg }
1615 1.1 mrg
1616 1.1 mrg return gfc_check_atomic (atom, 0, value, 1, stat, 2);
1617 1.1 mrg }
1618 1.1 mrg
1619 1.1 mrg
1620 1.1 mrg bool
1621 1.1 mrg gfc_check_atomic_op (gfc_expr *atom, gfc_expr *value, gfc_expr *stat)
1622 1.1 mrg {
1623 1.1 mrg if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1624 1.1 mrg {
1625 1.1 mrg gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1626 1.1 mrg "integer of ATOMIC_INT_KIND", &atom->where,
1627 1.1 mrg gfc_current_intrinsic);
1628 1.1 mrg return false;
1629 1.1 mrg }
1630 1.1 mrg
1631 1.1 mrg return gfc_check_atomic_def (atom, value, stat);
1632 1.1 mrg }
1633 1.1 mrg
1634 1.1 mrg
1635 1.1 mrg bool
1636 1.1 mrg gfc_check_atomic_ref (gfc_expr *value, gfc_expr *atom, gfc_expr *stat)
1637 1.1 mrg {
1638 1.1 mrg if (atom->expr_type == EXPR_FUNCTION
1639 1.1 mrg && atom->value.function.isym
1640 1.1 mrg && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1641 1.1 mrg atom = atom->value.function.actual->expr;
1642 1.1 mrg
1643 1.1 mrg if (!gfc_check_vardef_context (value, false, false, false, NULL))
1644 1.1 mrg {
1645 1.1 mrg gfc_error ("VALUE argument of the %s intrinsic function at %L shall be "
1646 1.1 mrg "definable", gfc_current_intrinsic, &value->where);
1647 1.1 mrg return false;
1648 1.1 mrg }
1649 1.1 mrg
1650 1.1 mrg return gfc_check_atomic (atom, 1, value, 0, stat, 2);
1651 1.1 mrg }
1652 1.1 mrg
1653 1.1 mrg
1654 1.1 mrg bool
1655 1.1 mrg gfc_check_image_status (gfc_expr *image, gfc_expr *team)
1656 1.1 mrg {
1657 1.1 mrg /* IMAGE has to be a positive, scalar integer. */
1658 1.1 mrg if (!type_check (image, 0, BT_INTEGER) || !scalar_check (image, 0)
1659 1.1 mrg || !positive_check (0, image))
1660 1.1 mrg return false;
1661 1.1 mrg
1662 1.1 mrg if (team)
1663 1.1 mrg {
1664 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L not yet supported",
1665 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
1666 1.1 mrg &team->where);
1667 1.1 mrg return false;
1668 1.1 mrg }
1669 1.1 mrg return true;
1670 1.1 mrg }
1671 1.1 mrg
1672 1.1 mrg
1673 1.1 mrg bool
1674 1.1 mrg gfc_check_failed_or_stopped_images (gfc_expr *team, gfc_expr *kind)
1675 1.1 mrg {
1676 1.1 mrg if (team)
1677 1.1 mrg {
1678 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L not yet supported",
1679 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1680 1.1 mrg &team->where);
1681 1.1 mrg return false;
1682 1.1 mrg }
1683 1.1 mrg
1684 1.1 mrg if (kind)
1685 1.1 mrg {
1686 1.1 mrg int k;
1687 1.1 mrg
1688 1.1 mrg if (!type_check (kind, 1, BT_INTEGER) || !scalar_check (kind, 1)
1689 1.1 mrg || !positive_check (1, kind))
1690 1.1 mrg return false;
1691 1.1 mrg
1692 1.1 mrg /* Get the kind, reporting error on non-constant or overflow. */
1693 1.1 mrg gfc_current_locus = kind->where;
1694 1.1 mrg if (gfc_extract_int (kind, &k, 1))
1695 1.1 mrg return false;
1696 1.1 mrg if (gfc_validate_kind (BT_INTEGER, k, true) == -1)
1697 1.1 mrg {
1698 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall specify a "
1699 1.1 mrg "valid integer kind", gfc_current_intrinsic_arg[1]->name,
1700 1.1 mrg gfc_current_intrinsic, &kind->where);
1701 1.1 mrg return false;
1702 1.1 mrg }
1703 1.1 mrg }
1704 1.1 mrg return true;
1705 1.1 mrg }
1706 1.1 mrg
1707 1.1 mrg
1708 1.1 mrg bool
1709 1.1 mrg gfc_check_get_team (gfc_expr *level)
1710 1.1 mrg {
1711 1.1 mrg if (level)
1712 1.1 mrg {
1713 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L not yet supported",
1714 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
1715 1.1 mrg &level->where);
1716 1.1 mrg return false;
1717 1.1 mrg }
1718 1.1 mrg return true;
1719 1.1 mrg }
1720 1.1 mrg
1721 1.1 mrg
1722 1.1 mrg bool
1723 1.1 mrg gfc_check_atomic_cas (gfc_expr *atom, gfc_expr *old, gfc_expr *compare,
1724 1.1 mrg gfc_expr *new_val, gfc_expr *stat)
1725 1.1 mrg {
1726 1.1 mrg if (atom->expr_type == EXPR_FUNCTION
1727 1.1 mrg && atom->value.function.isym
1728 1.1 mrg && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1729 1.1 mrg atom = atom->value.function.actual->expr;
1730 1.1 mrg
1731 1.1 mrg if (!gfc_check_atomic (atom, 0, new_val, 3, stat, 4))
1732 1.1 mrg return false;
1733 1.1 mrg
1734 1.1 mrg if (!scalar_check (old, 1) || !scalar_check (compare, 2))
1735 1.1 mrg return false;
1736 1.1 mrg
1737 1.1 mrg if (!same_type_check (atom, 0, old, 1))
1738 1.1 mrg return false;
1739 1.1 mrg
1740 1.1 mrg if (!same_type_check (atom, 0, compare, 2))
1741 1.1 mrg return false;
1742 1.1 mrg
1743 1.1 mrg if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1744 1.1 mrg {
1745 1.1 mrg gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1746 1.1 mrg "definable", gfc_current_intrinsic, &atom->where);
1747 1.1 mrg return false;
1748 1.1 mrg }
1749 1.1 mrg
1750 1.1 mrg if (!gfc_check_vardef_context (old, false, false, false, NULL))
1751 1.1 mrg {
1752 1.1 mrg gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1753 1.1 mrg "definable", gfc_current_intrinsic, &old->where);
1754 1.1 mrg return false;
1755 1.1 mrg }
1756 1.1 mrg
1757 1.1 mrg return true;
1758 1.1 mrg }
1759 1.1 mrg
1760 1.1 mrg bool
1761 1.1 mrg gfc_check_event_query (gfc_expr *event, gfc_expr *count, gfc_expr *stat)
1762 1.1 mrg {
1763 1.1 mrg if (event->ts.type != BT_DERIVED
1764 1.1 mrg || event->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
1765 1.1 mrg || event->ts.u.derived->intmod_sym_id != ISOFORTRAN_EVENT_TYPE)
1766 1.1 mrg {
1767 1.1 mrg gfc_error ("EVENT argument at %L to the intrinsic EVENT_QUERY "
1768 1.1 mrg "shall be of type EVENT_TYPE", &event->where);
1769 1.1 mrg return false;
1770 1.1 mrg }
1771 1.1 mrg
1772 1.1 mrg if (!scalar_check (event, 0))
1773 1.1 mrg return false;
1774 1.1 mrg
1775 1.1 mrg if (!gfc_check_vardef_context (count, false, false, false, NULL))
1776 1.1 mrg {
1777 1.1 mrg gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1778 1.1 mrg "shall be definable", &count->where);
1779 1.1 mrg return false;
1780 1.1 mrg }
1781 1.1 mrg
1782 1.1 mrg if (!type_check (count, 1, BT_INTEGER))
1783 1.1 mrg return false;
1784 1.1 mrg
1785 1.1 mrg int i = gfc_validate_kind (BT_INTEGER, count->ts.kind, false);
1786 1.1 mrg int j = gfc_validate_kind (BT_INTEGER, gfc_default_integer_kind, false);
1787 1.1 mrg
1788 1.1 mrg if (gfc_integer_kinds[i].range < gfc_integer_kinds[j].range)
1789 1.1 mrg {
1790 1.1 mrg gfc_error ("COUNT argument of the EVENT_QUERY intrinsic function at %L "
1791 1.1 mrg "shall have at least the range of the default integer",
1792 1.1 mrg &count->where);
1793 1.1 mrg return false;
1794 1.1 mrg }
1795 1.1 mrg
1796 1.1 mrg if (stat != NULL)
1797 1.1 mrg {
1798 1.1 mrg if (!type_check (stat, 2, BT_INTEGER))
1799 1.1 mrg return false;
1800 1.1 mrg if (!scalar_check (stat, 2))
1801 1.1 mrg return false;
1802 1.1 mrg if (!variable_check (stat, 2, false))
1803 1.1 mrg return false;
1804 1.1 mrg
1805 1.1 mrg if (!gfc_notify_std (GFC_STD_F2018, "STAT= argument to %s at %L",
1806 1.1 mrg gfc_current_intrinsic, &stat->where))
1807 1.1 mrg return false;
1808 1.1 mrg }
1809 1.1 mrg
1810 1.1 mrg return true;
1811 1.1 mrg }
1812 1.1 mrg
1813 1.1 mrg
1814 1.1 mrg bool
1815 1.1 mrg gfc_check_atomic_fetch_op (gfc_expr *atom, gfc_expr *value, gfc_expr *old,
1816 1.1 mrg gfc_expr *stat)
1817 1.1 mrg {
1818 1.1 mrg if (atom->expr_type == EXPR_FUNCTION
1819 1.1 mrg && atom->value.function.isym
1820 1.1 mrg && atom->value.function.isym->id == GFC_ISYM_CAF_GET)
1821 1.1 mrg atom = atom->value.function.actual->expr;
1822 1.1 mrg
1823 1.1 mrg if (atom->ts.type != BT_INTEGER || atom->ts.kind != gfc_atomic_int_kind)
1824 1.1 mrg {
1825 1.1 mrg gfc_error ("ATOM argument at %L to intrinsic function %s shall be an "
1826 1.1 mrg "integer of ATOMIC_INT_KIND", &atom->where,
1827 1.1 mrg gfc_current_intrinsic);
1828 1.1 mrg return false;
1829 1.1 mrg }
1830 1.1 mrg
1831 1.1 mrg if (!gfc_check_atomic (atom, 0, value, 1, stat, 3))
1832 1.1 mrg return false;
1833 1.1 mrg
1834 1.1 mrg if (!scalar_check (old, 2))
1835 1.1 mrg return false;
1836 1.1 mrg
1837 1.1 mrg if (!same_type_check (atom, 0, old, 2))
1838 1.1 mrg return false;
1839 1.1 mrg
1840 1.1 mrg if (!gfc_check_vardef_context (atom, false, false, false, NULL))
1841 1.1 mrg {
1842 1.1 mrg gfc_error ("ATOM argument of the %s intrinsic function at %L shall be "
1843 1.1 mrg "definable", gfc_current_intrinsic, &atom->where);
1844 1.1 mrg return false;
1845 1.1 mrg }
1846 1.1 mrg
1847 1.1 mrg if (!gfc_check_vardef_context (old, false, false, false, NULL))
1848 1.1 mrg {
1849 1.1 mrg gfc_error ("OLD argument of the %s intrinsic function at %L shall be "
1850 1.1 mrg "definable", gfc_current_intrinsic, &old->where);
1851 1.1 mrg return false;
1852 1.1 mrg }
1853 1.1 mrg
1854 1.1 mrg return true;
1855 1.1 mrg }
1856 1.1 mrg
1857 1.1 mrg
1858 1.1 mrg /* BESJN and BESYN functions. */
1859 1.1 mrg
1860 1.1 mrg bool
1861 1.1 mrg gfc_check_besn (gfc_expr *n, gfc_expr *x)
1862 1.1 mrg {
1863 1.1 mrg if (!type_check (n, 0, BT_INTEGER))
1864 1.1 mrg return false;
1865 1.1 mrg if (n->expr_type == EXPR_CONSTANT)
1866 1.1 mrg {
1867 1.1 mrg int i;
1868 1.1 mrg gfc_extract_int (n, &i);
1869 1.1 mrg if (i < 0 && !gfc_notify_std (GFC_STD_GNU, "Negative argument "
1870 1.1 mrg "N at %L", &n->where))
1871 1.1 mrg return false;
1872 1.1 mrg }
1873 1.1 mrg
1874 1.1 mrg if (!type_check (x, 1, BT_REAL))
1875 1.1 mrg return false;
1876 1.1 mrg
1877 1.1 mrg return true;
1878 1.1 mrg }
1879 1.1 mrg
1880 1.1 mrg
1881 1.1 mrg /* Transformational version of the Bessel JN and YN functions. */
1882 1.1 mrg
1883 1.1 mrg bool
1884 1.1 mrg gfc_check_bessel_n2 (gfc_expr *n1, gfc_expr *n2, gfc_expr *x)
1885 1.1 mrg {
1886 1.1 mrg if (!type_check (n1, 0, BT_INTEGER))
1887 1.1 mrg return false;
1888 1.1 mrg if (!scalar_check (n1, 0))
1889 1.1 mrg return false;
1890 1.1 mrg if (!nonnegative_check ("N1", n1))
1891 1.1 mrg return false;
1892 1.1 mrg
1893 1.1 mrg if (!type_check (n2, 1, BT_INTEGER))
1894 1.1 mrg return false;
1895 1.1 mrg if (!scalar_check (n2, 1))
1896 1.1 mrg return false;
1897 1.1 mrg if (!nonnegative_check ("N2", n2))
1898 1.1 mrg return false;
1899 1.1 mrg
1900 1.1 mrg if (!type_check (x, 2, BT_REAL))
1901 1.1 mrg return false;
1902 1.1 mrg if (!scalar_check (x, 2))
1903 1.1 mrg return false;
1904 1.1 mrg
1905 1.1 mrg return true;
1906 1.1 mrg }
1907 1.1 mrg
1908 1.1 mrg
1909 1.1 mrg bool
1910 1.1 mrg gfc_check_bge_bgt_ble_blt (gfc_expr *i, gfc_expr *j)
1911 1.1 mrg {
1912 1.1 mrg extern int gfc_max_integer_kind;
1913 1.1 mrg
1914 1.1 mrg /* If i and j are both BOZ, convert to widest INTEGER. */
1915 1.1 mrg if (i->ts.type == BT_BOZ && j->ts.type == BT_BOZ)
1916 1.1 mrg {
1917 1.1 mrg if (!gfc_boz2int (i, gfc_max_integer_kind))
1918 1.1 mrg return false;
1919 1.1 mrg if (!gfc_boz2int (j, gfc_max_integer_kind))
1920 1.1 mrg return false;
1921 1.1 mrg }
1922 1.1 mrg
1923 1.1 mrg /* If i is BOZ and j is integer, convert i to type of j. */
1924 1.1 mrg if (i->ts.type == BT_BOZ && j->ts.type == BT_INTEGER
1925 1.1 mrg && !gfc_boz2int (i, j->ts.kind))
1926 1.1 mrg return false;
1927 1.1 mrg
1928 1.1 mrg /* If j is BOZ and i is integer, convert j to type of i. */
1929 1.1 mrg if (j->ts.type == BT_BOZ && i->ts.type == BT_INTEGER
1930 1.1 mrg && !gfc_boz2int (j, i->ts.kind))
1931 1.1 mrg return false;
1932 1.1 mrg
1933 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
1934 1.1 mrg return false;
1935 1.1 mrg
1936 1.1 mrg if (!type_check (j, 1, BT_INTEGER))
1937 1.1 mrg return false;
1938 1.1 mrg
1939 1.1 mrg return true;
1940 1.1 mrg }
1941 1.1 mrg
1942 1.1 mrg
1943 1.1 mrg bool
1944 1.1 mrg gfc_check_bitfcn (gfc_expr *i, gfc_expr *pos)
1945 1.1 mrg {
1946 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
1947 1.1 mrg return false;
1948 1.1 mrg
1949 1.1 mrg if (!type_check (pos, 1, BT_INTEGER))
1950 1.1 mrg return false;
1951 1.1 mrg
1952 1.1 mrg if (!nonnegative_check ("pos", pos))
1953 1.1 mrg return false;
1954 1.1 mrg
1955 1.1 mrg if (!less_than_bitsize1 ("i", i, "pos", pos, false))
1956 1.1 mrg return false;
1957 1.1 mrg
1958 1.1 mrg return true;
1959 1.1 mrg }
1960 1.1 mrg
1961 1.1 mrg
1962 1.1 mrg bool
1963 1.1 mrg gfc_check_char (gfc_expr *i, gfc_expr *kind)
1964 1.1 mrg {
1965 1.1 mrg if (i->ts.type == BT_BOZ)
1966 1.1 mrg {
1967 1.1 mrg if (gfc_invalid_boz (G_("BOZ literal constant at %L cannot appear in "
1968 1.1 mrg "CHAR intrinsic subprogram"), &i->where))
1969 1.1 mrg return false;
1970 1.1 mrg
1971 1.1 mrg if (!gfc_boz2int (i, gfc_default_integer_kind))
1972 1.1 mrg return false;
1973 1.1 mrg }
1974 1.1 mrg
1975 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
1976 1.1 mrg return false;
1977 1.1 mrg
1978 1.1 mrg if (!kind_check (kind, 1, BT_CHARACTER))
1979 1.1 mrg return false;
1980 1.1 mrg
1981 1.1 mrg return true;
1982 1.1 mrg }
1983 1.1 mrg
1984 1.1 mrg
1985 1.1 mrg bool
1986 1.1 mrg gfc_check_chdir (gfc_expr *dir)
1987 1.1 mrg {
1988 1.1 mrg if (!type_check (dir, 0, BT_CHARACTER))
1989 1.1 mrg return false;
1990 1.1 mrg if (!kind_value_check (dir, 0, gfc_default_character_kind))
1991 1.1 mrg return false;
1992 1.1 mrg
1993 1.1 mrg return true;
1994 1.1 mrg }
1995 1.1 mrg
1996 1.1 mrg
1997 1.1 mrg bool
1998 1.1 mrg gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status)
1999 1.1 mrg {
2000 1.1 mrg if (!type_check (dir, 0, BT_CHARACTER))
2001 1.1 mrg return false;
2002 1.1 mrg if (!kind_value_check (dir, 0, gfc_default_character_kind))
2003 1.1 mrg return false;
2004 1.1 mrg
2005 1.1 mrg if (status == NULL)
2006 1.1 mrg return true;
2007 1.1 mrg
2008 1.1 mrg if (!type_check (status, 1, BT_INTEGER))
2009 1.1 mrg return false;
2010 1.1 mrg if (!scalar_check (status, 1))
2011 1.1 mrg return false;
2012 1.1 mrg
2013 1.1 mrg return true;
2014 1.1 mrg }
2015 1.1 mrg
2016 1.1 mrg
2017 1.1 mrg bool
2018 1.1 mrg gfc_check_chmod (gfc_expr *name, gfc_expr *mode)
2019 1.1 mrg {
2020 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
2021 1.1 mrg return false;
2022 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
2023 1.1 mrg return false;
2024 1.1 mrg
2025 1.1 mrg if (!type_check (mode, 1, BT_CHARACTER))
2026 1.1 mrg return false;
2027 1.1 mrg if (!kind_value_check (mode, 1, gfc_default_character_kind))
2028 1.1 mrg return false;
2029 1.1 mrg
2030 1.1 mrg return true;
2031 1.1 mrg }
2032 1.1 mrg
2033 1.1 mrg
2034 1.1 mrg bool
2035 1.1 mrg gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status)
2036 1.1 mrg {
2037 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
2038 1.1 mrg return false;
2039 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
2040 1.1 mrg return false;
2041 1.1 mrg
2042 1.1 mrg if (!type_check (mode, 1, BT_CHARACTER))
2043 1.1 mrg return false;
2044 1.1 mrg if (!kind_value_check (mode, 1, gfc_default_character_kind))
2045 1.1 mrg return false;
2046 1.1 mrg
2047 1.1 mrg if (status == NULL)
2048 1.1 mrg return true;
2049 1.1 mrg
2050 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
2051 1.1 mrg return false;
2052 1.1 mrg
2053 1.1 mrg if (!scalar_check (status, 2))
2054 1.1 mrg return false;
2055 1.1 mrg
2056 1.1 mrg return true;
2057 1.1 mrg }
2058 1.1 mrg
2059 1.1 mrg
2060 1.1 mrg bool
2061 1.1 mrg gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
2062 1.1 mrg {
2063 1.1 mrg int k;
2064 1.1 mrg
2065 1.1 mrg /* Check kind first, because it may be needed in conversion of a BOZ. */
2066 1.1 mrg if (kind)
2067 1.1 mrg {
2068 1.1 mrg if (!kind_check (kind, 2, BT_COMPLEX))
2069 1.1 mrg return false;
2070 1.1 mrg gfc_extract_int (kind, &k);
2071 1.1 mrg }
2072 1.1 mrg else
2073 1.1 mrg k = gfc_default_complex_kind;
2074 1.1 mrg
2075 1.1 mrg if (x->ts.type == BT_BOZ && !gfc_boz2real (x, k))
2076 1.1 mrg return false;
2077 1.1 mrg
2078 1.1 mrg if (!numeric_check (x, 0))
2079 1.1 mrg return false;
2080 1.1 mrg
2081 1.1 mrg if (y != NULL)
2082 1.1 mrg {
2083 1.1 mrg if (y->ts.type == BT_BOZ && !gfc_boz2real (y, k))
2084 1.1 mrg return false;
2085 1.1 mrg
2086 1.1 mrg if (!numeric_check (y, 1))
2087 1.1 mrg return false;
2088 1.1 mrg
2089 1.1 mrg if (x->ts.type == BT_COMPLEX)
2090 1.1 mrg {
2091 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must not be "
2092 1.1 mrg "present if %<x%> is COMPLEX",
2093 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2094 1.1 mrg &y->where);
2095 1.1 mrg return false;
2096 1.1 mrg }
2097 1.1 mrg
2098 1.1 mrg if (y->ts.type == BT_COMPLEX)
2099 1.1 mrg {
2100 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
2101 1.1 mrg "of either REAL or INTEGER",
2102 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2103 1.1 mrg &y->where);
2104 1.1 mrg return false;
2105 1.1 mrg }
2106 1.1 mrg }
2107 1.1 mrg
2108 1.1 mrg if (!kind && warn_conversion
2109 1.1 mrg && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind)
2110 1.1 mrg gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
2111 1.1 mrg "COMPLEX(%d) at %L might lose precision, consider using "
2112 1.1 mrg "the KIND argument", gfc_typename (&x->ts),
2113 1.1 mrg gfc_default_real_kind, &x->where);
2114 1.1 mrg else if (y && !kind && warn_conversion
2115 1.1 mrg && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind)
2116 1.1 mrg gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
2117 1.1 mrg "COMPLEX(%d) at %L might lose precision, consider using "
2118 1.1 mrg "the KIND argument", gfc_typename (&y->ts),
2119 1.1 mrg gfc_default_real_kind, &y->where);
2120 1.1 mrg return true;
2121 1.1 mrg }
2122 1.1 mrg
2123 1.1 mrg
2124 1.1 mrg static bool
2125 1.1 mrg check_co_collective (gfc_expr *a, gfc_expr *image_idx, gfc_expr *stat,
2126 1.1 mrg gfc_expr *errmsg, bool co_reduce)
2127 1.1 mrg {
2128 1.1 mrg if (!variable_check (a, 0, false))
2129 1.1 mrg return false;
2130 1.1 mrg
2131 1.1 mrg if (!gfc_check_vardef_context (a, false, false, false, "argument 'A' with "
2132 1.1 mrg "INTENT(INOUT)"))
2133 1.1 mrg return false;
2134 1.1 mrg
2135 1.1 mrg /* Fortran 2008, 12.5.2.4, paragraph 18. */
2136 1.1 mrg if (gfc_has_vector_subscript (a))
2137 1.1 mrg {
2138 1.1 mrg gfc_error ("Argument %<A%> with INTENT(INOUT) at %L of the intrinsic "
2139 1.1 mrg "subroutine %s shall not have a vector subscript",
2140 1.1 mrg &a->where, gfc_current_intrinsic);
2141 1.1 mrg return false;
2142 1.1 mrg }
2143 1.1 mrg
2144 1.1 mrg if (gfc_is_coindexed (a))
2145 1.1 mrg {
2146 1.1 mrg gfc_error ("The A argument at %L to the intrinsic %s shall not be "
2147 1.1 mrg "coindexed", &a->where, gfc_current_intrinsic);
2148 1.1 mrg return false;
2149 1.1 mrg }
2150 1.1 mrg
2151 1.1 mrg if (image_idx != NULL)
2152 1.1 mrg {
2153 1.1 mrg if (!type_check (image_idx, co_reduce ? 2 : 1, BT_INTEGER))
2154 1.1 mrg return false;
2155 1.1 mrg if (!scalar_check (image_idx, co_reduce ? 2 : 1))
2156 1.1 mrg return false;
2157 1.1 mrg }
2158 1.1 mrg
2159 1.1 mrg if (stat != NULL)
2160 1.1 mrg {
2161 1.1 mrg if (!type_check (stat, co_reduce ? 3 : 2, BT_INTEGER))
2162 1.1 mrg return false;
2163 1.1 mrg if (!scalar_check (stat, co_reduce ? 3 : 2))
2164 1.1 mrg return false;
2165 1.1 mrg if (!variable_check (stat, co_reduce ? 3 : 2, false))
2166 1.1 mrg return false;
2167 1.1 mrg if (stat->ts.kind != 4)
2168 1.1 mrg {
2169 1.1 mrg gfc_error ("The stat= argument at %L must be a kind=4 integer "
2170 1.1 mrg "variable", &stat->where);
2171 1.1 mrg return false;
2172 1.1 mrg }
2173 1.1 mrg }
2174 1.1 mrg
2175 1.1 mrg if (errmsg != NULL)
2176 1.1 mrg {
2177 1.1 mrg if (!type_check (errmsg, co_reduce ? 4 : 3, BT_CHARACTER))
2178 1.1 mrg return false;
2179 1.1 mrg if (!scalar_check (errmsg, co_reduce ? 4 : 3))
2180 1.1 mrg return false;
2181 1.1 mrg if (!variable_check (errmsg, co_reduce ? 4 : 3, false))
2182 1.1 mrg return false;
2183 1.1 mrg if (errmsg->ts.kind != 1)
2184 1.1 mrg {
2185 1.1 mrg gfc_error ("The errmsg= argument at %L must be a default-kind "
2186 1.1 mrg "character variable", &errmsg->where);
2187 1.1 mrg return false;
2188 1.1 mrg }
2189 1.1 mrg }
2190 1.1 mrg
2191 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
2192 1.1 mrg {
2193 1.1 mrg gfc_fatal_error ("Coarrays disabled at %L, use %<-fcoarray=%> to enable",
2194 1.1 mrg &a->where);
2195 1.1 mrg return false;
2196 1.1 mrg }
2197 1.1 mrg
2198 1.1 mrg return true;
2199 1.1 mrg }
2200 1.1 mrg
2201 1.1 mrg
2202 1.1 mrg bool
2203 1.1 mrg gfc_check_co_broadcast (gfc_expr *a, gfc_expr *source_image, gfc_expr *stat,
2204 1.1 mrg gfc_expr *errmsg)
2205 1.1 mrg {
2206 1.1 mrg if (a->ts.type == BT_CLASS || gfc_expr_attr (a).alloc_comp)
2207 1.1 mrg {
2208 1.1 mrg gfc_error ("Support for the A argument at %L which is polymorphic A "
2209 1.1 mrg "argument or has allocatable components is not yet "
2210 1.1 mrg "implemented", &a->where);
2211 1.1 mrg return false;
2212 1.1 mrg }
2213 1.1 mrg return check_co_collective (a, source_image, stat, errmsg, false);
2214 1.1 mrg }
2215 1.1 mrg
2216 1.1 mrg
2217 1.1 mrg bool
2218 1.1 mrg gfc_check_co_reduce (gfc_expr *a, gfc_expr *op, gfc_expr *result_image,
2219 1.1 mrg gfc_expr *stat, gfc_expr *errmsg)
2220 1.1 mrg {
2221 1.1 mrg symbol_attribute attr;
2222 1.1 mrg gfc_formal_arglist *formal;
2223 1.1 mrg gfc_symbol *sym;
2224 1.1 mrg
2225 1.1 mrg if (a->ts.type == BT_CLASS)
2226 1.1 mrg {
2227 1.1 mrg gfc_error ("The A argument at %L of CO_REDUCE shall not be polymorphic",
2228 1.1 mrg &a->where);
2229 1.1 mrg return false;
2230 1.1 mrg }
2231 1.1 mrg
2232 1.1 mrg if (gfc_expr_attr (a).alloc_comp)
2233 1.1 mrg {
2234 1.1 mrg gfc_error ("Support for the A argument at %L with allocatable components"
2235 1.1 mrg " is not yet implemented", &a->where);
2236 1.1 mrg return false;
2237 1.1 mrg }
2238 1.1 mrg
2239 1.1 mrg if (!check_co_collective (a, result_image, stat, errmsg, true))
2240 1.1 mrg return false;
2241 1.1 mrg
2242 1.1 mrg if (!gfc_resolve_expr (op))
2243 1.1 mrg return false;
2244 1.1 mrg
2245 1.1 mrg attr = gfc_expr_attr (op);
2246 1.1 mrg if (!attr.pure || !attr.function)
2247 1.1 mrg {
2248 1.1 mrg gfc_error ("OPERATION argument at %L must be a PURE function",
2249 1.1 mrg &op->where);
2250 1.1 mrg return false;
2251 1.1 mrg }
2252 1.1 mrg
2253 1.1 mrg if (attr.intrinsic)
2254 1.1 mrg {
2255 1.1 mrg /* None of the intrinsics fulfills the criteria of taking two arguments,
2256 1.1 mrg returning the same type and kind as the arguments and being permitted
2257 1.1 mrg as actual argument. */
2258 1.1 mrg gfc_error ("Intrinsic function %s at %L is not permitted for CO_REDUCE",
2259 1.1 mrg op->symtree->n.sym->name, &op->where);
2260 1.1 mrg return false;
2261 1.1 mrg }
2262 1.1 mrg
2263 1.1 mrg if (gfc_is_proc_ptr_comp (op))
2264 1.1 mrg {
2265 1.1 mrg gfc_component *comp = gfc_get_proc_ptr_comp (op);
2266 1.1 mrg sym = comp->ts.interface;
2267 1.1 mrg }
2268 1.1 mrg else
2269 1.1 mrg sym = op->symtree->n.sym;
2270 1.1 mrg
2271 1.1 mrg formal = sym->formal;
2272 1.1 mrg
2273 1.1 mrg if (!formal || !formal->next || formal->next->next)
2274 1.1 mrg {
2275 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall have two "
2276 1.1 mrg "arguments", &op->where);
2277 1.1 mrg return false;
2278 1.1 mrg }
2279 1.1 mrg
2280 1.1 mrg if (sym->result->ts.type == BT_UNKNOWN)
2281 1.1 mrg gfc_set_default_type (sym->result, 0, NULL);
2282 1.1 mrg
2283 1.1 mrg if (!gfc_compare_types (&a->ts, &sym->result->ts))
2284 1.1 mrg {
2285 1.1 mrg gfc_error ("The A argument at %L has type %s but the function passed as "
2286 1.1 mrg "OPERATION at %L returns %s",
2287 1.1 mrg &a->where, gfc_typename (a), &op->where,
2288 1.1 mrg gfc_typename (&sym->result->ts));
2289 1.1 mrg return false;
2290 1.1 mrg }
2291 1.1 mrg if (!gfc_compare_types (&a->ts, &formal->sym->ts)
2292 1.1 mrg || !gfc_compare_types (&a->ts, &formal->next->sym->ts))
2293 1.1 mrg {
2294 1.1 mrg gfc_error ("The function passed as OPERATION at %L has arguments of type "
2295 1.1 mrg "%s and %s but shall have type %s", &op->where,
2296 1.1 mrg gfc_typename (&formal->sym->ts),
2297 1.1 mrg gfc_typename (&formal->next->sym->ts), gfc_typename (a));
2298 1.1 mrg return false;
2299 1.1 mrg }
2300 1.1 mrg if (op->rank || attr.allocatable || attr.pointer || formal->sym->as
2301 1.1 mrg || formal->next->sym->as || formal->sym->attr.allocatable
2302 1.1 mrg || formal->next->sym->attr.allocatable || formal->sym->attr.pointer
2303 1.1 mrg || formal->next->sym->attr.pointer)
2304 1.1 mrg {
2305 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall have scalar "
2306 1.1 mrg "nonallocatable nonpointer arguments and return a "
2307 1.1 mrg "nonallocatable nonpointer scalar", &op->where);
2308 1.1 mrg return false;
2309 1.1 mrg }
2310 1.1 mrg
2311 1.1 mrg if (formal->sym->attr.value != formal->next->sym->attr.value)
2312 1.1 mrg {
2313 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall have the VALUE "
2314 1.1 mrg "attribute either for none or both arguments", &op->where);
2315 1.1 mrg return false;
2316 1.1 mrg }
2317 1.1 mrg
2318 1.1 mrg if (formal->sym->attr.target != formal->next->sym->attr.target)
2319 1.1 mrg {
2320 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall have the TARGET "
2321 1.1 mrg "attribute either for none or both arguments", &op->where);
2322 1.1 mrg return false;
2323 1.1 mrg }
2324 1.1 mrg
2325 1.1 mrg if (formal->sym->attr.asynchronous != formal->next->sym->attr.asynchronous)
2326 1.1 mrg {
2327 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall have the "
2328 1.1 mrg "ASYNCHRONOUS attribute either for none or both arguments",
2329 1.1 mrg &op->where);
2330 1.1 mrg return false;
2331 1.1 mrg }
2332 1.1 mrg
2333 1.1 mrg if (formal->sym->attr.optional || formal->next->sym->attr.optional)
2334 1.1 mrg {
2335 1.1 mrg gfc_error ("The function passed as OPERATION at %L shall not have the "
2336 1.1 mrg "OPTIONAL attribute for either of the arguments", &op->where);
2337 1.1 mrg return false;
2338 1.1 mrg }
2339 1.1 mrg
2340 1.1 mrg if (a->ts.type == BT_CHARACTER)
2341 1.1 mrg {
2342 1.1 mrg gfc_charlen *cl;
2343 1.1 mrg unsigned long actual_size, formal_size1, formal_size2, result_size;
2344 1.1 mrg
2345 1.1 mrg cl = a->ts.u.cl;
2346 1.1 mrg actual_size = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
2347 1.1 mrg ? mpz_get_ui (cl->length->value.integer) : 0;
2348 1.1 mrg
2349 1.1 mrg cl = formal->sym->ts.u.cl;
2350 1.1 mrg formal_size1 = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
2351 1.1 mrg ? mpz_get_ui (cl->length->value.integer) : 0;
2352 1.1 mrg
2353 1.1 mrg cl = formal->next->sym->ts.u.cl;
2354 1.1 mrg formal_size2 = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
2355 1.1 mrg ? mpz_get_ui (cl->length->value.integer) : 0;
2356 1.1 mrg
2357 1.1 mrg cl = sym->ts.u.cl;
2358 1.1 mrg result_size = cl && cl->length && cl->length->expr_type == EXPR_CONSTANT
2359 1.1 mrg ? mpz_get_ui (cl->length->value.integer) : 0;
2360 1.1 mrg
2361 1.1 mrg if (actual_size
2362 1.1 mrg && ((formal_size1 && actual_size != formal_size1)
2363 1.1 mrg || (formal_size2 && actual_size != formal_size2)))
2364 1.1 mrg {
2365 1.1 mrg gfc_error ("The character length of the A argument at %L and of the "
2366 1.1 mrg "arguments of the OPERATION at %L shall be the same",
2367 1.1 mrg &a->where, &op->where);
2368 1.1 mrg return false;
2369 1.1 mrg }
2370 1.1 mrg if (actual_size && result_size && actual_size != result_size)
2371 1.1 mrg {
2372 1.1 mrg gfc_error ("The character length of the A argument at %L and of the "
2373 1.1 mrg "function result of the OPERATION at %L shall be the same",
2374 1.1 mrg &a->where, &op->where);
2375 1.1 mrg return false;
2376 1.1 mrg }
2377 1.1 mrg }
2378 1.1 mrg
2379 1.1 mrg return true;
2380 1.1 mrg }
2381 1.1 mrg
2382 1.1 mrg
2383 1.1 mrg bool
2384 1.1 mrg gfc_check_co_minmax (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
2385 1.1 mrg gfc_expr *errmsg)
2386 1.1 mrg {
2387 1.1 mrg if (a->ts.type != BT_INTEGER && a->ts.type != BT_REAL
2388 1.1 mrg && a->ts.type != BT_CHARACTER)
2389 1.1 mrg {
2390 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall be of type "
2391 1.1 mrg "integer, real or character",
2392 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
2393 1.1 mrg &a->where);
2394 1.1 mrg return false;
2395 1.1 mrg }
2396 1.1 mrg return check_co_collective (a, result_image, stat, errmsg, false);
2397 1.1 mrg }
2398 1.1 mrg
2399 1.1 mrg
2400 1.1 mrg bool
2401 1.1 mrg gfc_check_co_sum (gfc_expr *a, gfc_expr *result_image, gfc_expr *stat,
2402 1.1 mrg gfc_expr *errmsg)
2403 1.1 mrg {
2404 1.1 mrg if (!numeric_check (a, 0))
2405 1.1 mrg return false;
2406 1.1 mrg return check_co_collective (a, result_image, stat, errmsg, false);
2407 1.1 mrg }
2408 1.1 mrg
2409 1.1 mrg
2410 1.1 mrg bool
2411 1.1 mrg gfc_check_complex (gfc_expr *x, gfc_expr *y)
2412 1.1 mrg {
2413 1.1 mrg if (!boz_args_check (x, y))
2414 1.1 mrg return false;
2415 1.1 mrg
2416 1.1 mrg if (x->ts.type == BT_BOZ)
2417 1.1 mrg {
2418 1.1 mrg if (gfc_invalid_boz (G_("BOZ constant at %L cannot appear in the COMPLEX"
2419 1.1 mrg " intrinsic subprogram"), &x->where))
2420 1.1 mrg {
2421 1.1 mrg reset_boz (x);
2422 1.1 mrg return false;
2423 1.1 mrg }
2424 1.1 mrg if (y->ts.type == BT_INTEGER && !gfc_boz2int (x, y->ts.kind))
2425 1.1 mrg return false;
2426 1.1 mrg if (y->ts.type == BT_REAL && !gfc_boz2real (x, y->ts.kind))
2427 1.1 mrg return false;
2428 1.1 mrg }
2429 1.1 mrg
2430 1.1 mrg if (y->ts.type == BT_BOZ)
2431 1.1 mrg {
2432 1.1 mrg if (gfc_invalid_boz (G_("BOZ constant at %L cannot appear in the COMPLEX"
2433 1.1 mrg " intrinsic subprogram"), &y->where))
2434 1.1 mrg {
2435 1.1 mrg reset_boz (y);
2436 1.1 mrg return false;
2437 1.1 mrg }
2438 1.1 mrg if (x->ts.type == BT_INTEGER && !gfc_boz2int (y, x->ts.kind))
2439 1.1 mrg return false;
2440 1.1 mrg if (x->ts.type == BT_REAL && !gfc_boz2real (y, x->ts.kind))
2441 1.1 mrg return false;
2442 1.1 mrg }
2443 1.1 mrg
2444 1.1 mrg if (!int_or_real_check (x, 0))
2445 1.1 mrg return false;
2446 1.1 mrg if (!scalar_check (x, 0))
2447 1.1 mrg return false;
2448 1.1 mrg
2449 1.1 mrg if (!int_or_real_check (y, 1))
2450 1.1 mrg return false;
2451 1.1 mrg if (!scalar_check (y, 1))
2452 1.1 mrg return false;
2453 1.1 mrg
2454 1.1 mrg return true;
2455 1.1 mrg }
2456 1.1 mrg
2457 1.1 mrg
2458 1.1 mrg bool
2459 1.1 mrg gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
2460 1.1 mrg {
2461 1.1 mrg if (!logical_array_check (mask, 0))
2462 1.1 mrg return false;
2463 1.1 mrg if (!dim_check (dim, 1, false))
2464 1.1 mrg return false;
2465 1.1 mrg if (!dim_rank_check (dim, mask, 0))
2466 1.1 mrg return false;
2467 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
2468 1.1 mrg return false;
2469 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
2470 1.1 mrg "with KIND argument at %L",
2471 1.1 mrg gfc_current_intrinsic, &kind->where))
2472 1.1 mrg return false;
2473 1.1 mrg
2474 1.1 mrg return true;
2475 1.1 mrg }
2476 1.1 mrg
2477 1.1 mrg
2478 1.1 mrg bool
2479 1.1 mrg gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim)
2480 1.1 mrg {
2481 1.1 mrg if (!array_check (array, 0))
2482 1.1 mrg return false;
2483 1.1 mrg
2484 1.1 mrg if (!type_check (shift, 1, BT_INTEGER))
2485 1.1 mrg return false;
2486 1.1 mrg
2487 1.1 mrg if (!dim_check (dim, 2, true))
2488 1.1 mrg return false;
2489 1.1 mrg
2490 1.1 mrg if (!dim_rank_check (dim, array, false))
2491 1.1 mrg return false;
2492 1.1 mrg
2493 1.1 mrg if (array->rank == 1 || shift->rank == 0)
2494 1.1 mrg {
2495 1.1 mrg if (!scalar_check (shift, 1))
2496 1.1 mrg return false;
2497 1.1 mrg }
2498 1.1 mrg else if (shift->rank == array->rank - 1)
2499 1.1 mrg {
2500 1.1 mrg int d;
2501 1.1 mrg if (!dim)
2502 1.1 mrg d = 1;
2503 1.1 mrg else if (dim->expr_type == EXPR_CONSTANT)
2504 1.1 mrg gfc_extract_int (dim, &d);
2505 1.1 mrg else
2506 1.1 mrg d = -1;
2507 1.1 mrg
2508 1.1 mrg if (d > 0)
2509 1.1 mrg {
2510 1.1 mrg int i, j;
2511 1.1 mrg for (i = 0, j = 0; i < array->rank; i++)
2512 1.1 mrg if (i != d - 1)
2513 1.1 mrg {
2514 1.1 mrg if (!identical_dimen_shape (array, i, shift, j))
2515 1.1 mrg {
2516 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L has "
2517 1.1 mrg "invalid shape in dimension %d (%ld/%ld)",
2518 1.1 mrg gfc_current_intrinsic_arg[1]->name,
2519 1.1 mrg gfc_current_intrinsic, &shift->where, i + 1,
2520 1.1 mrg mpz_get_si (array->shape[i]),
2521 1.1 mrg mpz_get_si (shift->shape[j]));
2522 1.1 mrg return false;
2523 1.1 mrg }
2524 1.1 mrg
2525 1.1 mrg j += 1;
2526 1.1 mrg }
2527 1.1 mrg }
2528 1.1 mrg }
2529 1.1 mrg else
2530 1.1 mrg {
2531 1.1 mrg gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
2532 1.1 mrg "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
2533 1.1 mrg gfc_current_intrinsic, &shift->where, array->rank - 1);
2534 1.1 mrg return false;
2535 1.1 mrg }
2536 1.1 mrg
2537 1.1 mrg return true;
2538 1.1 mrg }
2539 1.1 mrg
2540 1.1 mrg
2541 1.1 mrg bool
2542 1.1 mrg gfc_check_ctime (gfc_expr *time)
2543 1.1 mrg {
2544 1.1 mrg if (!scalar_check (time, 0))
2545 1.1 mrg return false;
2546 1.1 mrg
2547 1.1 mrg if (!type_check (time, 0, BT_INTEGER))
2548 1.1 mrg return false;
2549 1.1 mrg
2550 1.1 mrg return true;
2551 1.1 mrg }
2552 1.1 mrg
2553 1.1 mrg
2554 1.1 mrg bool gfc_check_datan2 (gfc_expr *y, gfc_expr *x)
2555 1.1 mrg {
2556 1.1 mrg if (!double_check (y, 0) || !double_check (x, 1))
2557 1.1 mrg return false;
2558 1.1 mrg
2559 1.1 mrg return true;
2560 1.1 mrg }
2561 1.1 mrg
2562 1.1 mrg bool
2563 1.1 mrg gfc_check_dcmplx (gfc_expr *x, gfc_expr *y)
2564 1.1 mrg {
2565 1.1 mrg if (x->ts.type == BT_BOZ && !gfc_boz2real (x, gfc_default_double_kind))
2566 1.1 mrg return false;
2567 1.1 mrg
2568 1.1 mrg if (!numeric_check (x, 0))
2569 1.1 mrg return false;
2570 1.1 mrg
2571 1.1 mrg if (y != NULL)
2572 1.1 mrg {
2573 1.1 mrg if (y->ts.type == BT_BOZ && !gfc_boz2real (y, gfc_default_double_kind))
2574 1.1 mrg return false;
2575 1.1 mrg
2576 1.1 mrg if (!numeric_check (y, 1))
2577 1.1 mrg return false;
2578 1.1 mrg
2579 1.1 mrg if (x->ts.type == BT_COMPLEX)
2580 1.1 mrg {
2581 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must not be "
2582 1.1 mrg "present if %<x%> is COMPLEX",
2583 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2584 1.1 mrg &y->where);
2585 1.1 mrg return false;
2586 1.1 mrg }
2587 1.1 mrg
2588 1.1 mrg if (y->ts.type == BT_COMPLEX)
2589 1.1 mrg {
2590 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must have a type "
2591 1.1 mrg "of either REAL or INTEGER",
2592 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2593 1.1 mrg &y->where);
2594 1.1 mrg return false;
2595 1.1 mrg }
2596 1.1 mrg }
2597 1.1 mrg
2598 1.1 mrg return true;
2599 1.1 mrg }
2600 1.1 mrg
2601 1.1 mrg
2602 1.1 mrg bool
2603 1.1 mrg gfc_check_dble (gfc_expr *x)
2604 1.1 mrg {
2605 1.1 mrg if (x->ts.type == BT_BOZ && !gfc_boz2real (x, gfc_default_double_kind))
2606 1.1 mrg return false;
2607 1.1 mrg
2608 1.1 mrg if (!numeric_check (x, 0))
2609 1.1 mrg return false;
2610 1.1 mrg
2611 1.1 mrg return true;
2612 1.1 mrg }
2613 1.1 mrg
2614 1.1 mrg
2615 1.1 mrg bool
2616 1.1 mrg gfc_check_digits (gfc_expr *x)
2617 1.1 mrg {
2618 1.1 mrg if (!int_or_real_check (x, 0))
2619 1.1 mrg return false;
2620 1.1 mrg
2621 1.1 mrg return true;
2622 1.1 mrg }
2623 1.1 mrg
2624 1.1 mrg
2625 1.1 mrg bool
2626 1.1 mrg gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b)
2627 1.1 mrg {
2628 1.1 mrg switch (vector_a->ts.type)
2629 1.1 mrg {
2630 1.1 mrg case BT_LOGICAL:
2631 1.1 mrg if (!type_check (vector_b, 1, BT_LOGICAL))
2632 1.1 mrg return false;
2633 1.1 mrg break;
2634 1.1 mrg
2635 1.1 mrg case BT_INTEGER:
2636 1.1 mrg case BT_REAL:
2637 1.1 mrg case BT_COMPLEX:
2638 1.1 mrg if (!numeric_check (vector_b, 1))
2639 1.1 mrg return false;
2640 1.1 mrg break;
2641 1.1 mrg
2642 1.1 mrg default:
2643 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
2644 1.1 mrg "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
2645 1.1 mrg gfc_current_intrinsic, &vector_a->where);
2646 1.1 mrg return false;
2647 1.1 mrg }
2648 1.1 mrg
2649 1.1 mrg if (!rank_check (vector_a, 0, 1))
2650 1.1 mrg return false;
2651 1.1 mrg
2652 1.1 mrg if (!rank_check (vector_b, 1, 1))
2653 1.1 mrg return false;
2654 1.1 mrg
2655 1.1 mrg if (! identical_dimen_shape (vector_a, 0, vector_b, 0))
2656 1.1 mrg {
2657 1.1 mrg gfc_error ("Different shape for arguments %qs and %qs at %L for "
2658 1.1 mrg "intrinsic %<dot_product%>",
2659 1.1 mrg gfc_current_intrinsic_arg[0]->name,
2660 1.1 mrg gfc_current_intrinsic_arg[1]->name, &vector_a->where);
2661 1.1 mrg return false;
2662 1.1 mrg }
2663 1.1 mrg
2664 1.1 mrg return true;
2665 1.1 mrg }
2666 1.1 mrg
2667 1.1 mrg
2668 1.1 mrg bool
2669 1.1 mrg gfc_check_dprod (gfc_expr *x, gfc_expr *y)
2670 1.1 mrg {
2671 1.1 mrg if (!type_check (x, 0, BT_REAL)
2672 1.1 mrg || !type_check (y, 1, BT_REAL))
2673 1.1 mrg return false;
2674 1.1 mrg
2675 1.1 mrg if (x->ts.kind != gfc_default_real_kind)
2676 1.1 mrg {
2677 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2678 1.1 mrg "real", gfc_current_intrinsic_arg[0]->name,
2679 1.1 mrg gfc_current_intrinsic, &x->where);
2680 1.1 mrg return false;
2681 1.1 mrg }
2682 1.1 mrg
2683 1.1 mrg if (y->ts.kind != gfc_default_real_kind)
2684 1.1 mrg {
2685 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be default "
2686 1.1 mrg "real", gfc_current_intrinsic_arg[1]->name,
2687 1.1 mrg gfc_current_intrinsic, &y->where);
2688 1.1 mrg return false;
2689 1.1 mrg }
2690 1.1 mrg
2691 1.1 mrg return true;
2692 1.1 mrg }
2693 1.1 mrg
2694 1.1 mrg bool
2695 1.1 mrg gfc_check_dshift (gfc_expr *i, gfc_expr *j, gfc_expr *shift)
2696 1.1 mrg {
2697 1.1 mrg /* i and j cannot both be BOZ literal constants. */
2698 1.1 mrg if (!boz_args_check (i, j))
2699 1.1 mrg return false;
2700 1.1 mrg
2701 1.1 mrg /* If i is BOZ and j is integer, convert i to type of j. If j is not
2702 1.1 mrg an integer, clear the BOZ; otherwise, check that i is an integer. */
2703 1.1 mrg if (i->ts.type == BT_BOZ)
2704 1.1 mrg {
2705 1.1 mrg if (j->ts.type != BT_INTEGER)
2706 1.1 mrg reset_boz (i);
2707 1.1 mrg else if (!gfc_boz2int (i, j->ts.kind))
2708 1.1 mrg return false;
2709 1.1 mrg }
2710 1.1 mrg else if (!type_check (i, 0, BT_INTEGER))
2711 1.1 mrg {
2712 1.1 mrg if (j->ts.type == BT_BOZ)
2713 1.1 mrg reset_boz (j);
2714 1.1 mrg return false;
2715 1.1 mrg }
2716 1.1 mrg
2717 1.1 mrg /* If j is BOZ and i is integer, convert j to type of i. If i is not
2718 1.1 mrg an integer, clear the BOZ; otherwise, check that i is an integer. */
2719 1.1 mrg if (j->ts.type == BT_BOZ)
2720 1.1 mrg {
2721 1.1 mrg if (i->ts.type != BT_INTEGER)
2722 1.1 mrg reset_boz (j);
2723 1.1 mrg else if (!gfc_boz2int (j, i->ts.kind))
2724 1.1 mrg return false;
2725 1.1 mrg }
2726 1.1 mrg else if (!type_check (j, 1, BT_INTEGER))
2727 1.1 mrg return false;
2728 1.1 mrg
2729 1.1 mrg if (!same_type_check (i, 0, j, 1))
2730 1.1 mrg return false;
2731 1.1 mrg
2732 1.1 mrg if (!type_check (shift, 2, BT_INTEGER))
2733 1.1 mrg return false;
2734 1.1 mrg
2735 1.1 mrg if (!nonnegative_check ("SHIFT", shift))
2736 1.1 mrg return false;
2737 1.1 mrg
2738 1.1 mrg if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
2739 1.1 mrg return false;
2740 1.1 mrg
2741 1.1 mrg return true;
2742 1.1 mrg }
2743 1.1 mrg
2744 1.1 mrg
2745 1.1 mrg bool
2746 1.1 mrg gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary,
2747 1.1 mrg gfc_expr *dim)
2748 1.1 mrg {
2749 1.1 mrg int d;
2750 1.1 mrg
2751 1.1 mrg if (!array_check (array, 0))
2752 1.1 mrg return false;
2753 1.1 mrg
2754 1.1 mrg if (!type_check (shift, 1, BT_INTEGER))
2755 1.1 mrg return false;
2756 1.1 mrg
2757 1.1 mrg if (!dim_check (dim, 3, true))
2758 1.1 mrg return false;
2759 1.1 mrg
2760 1.1 mrg if (!dim_rank_check (dim, array, false))
2761 1.1 mrg return false;
2762 1.1 mrg
2763 1.1 mrg if (!dim)
2764 1.1 mrg d = 1;
2765 1.1 mrg else if (dim->expr_type == EXPR_CONSTANT)
2766 1.1 mrg gfc_extract_int (dim, &d);
2767 1.1 mrg else
2768 1.1 mrg d = -1;
2769 1.1 mrg
2770 1.1 mrg if (array->rank == 1 || shift->rank == 0)
2771 1.1 mrg {
2772 1.1 mrg if (!scalar_check (shift, 1))
2773 1.1 mrg return false;
2774 1.1 mrg }
2775 1.1 mrg else if (shift->rank == array->rank - 1)
2776 1.1 mrg {
2777 1.1 mrg if (d > 0)
2778 1.1 mrg {
2779 1.1 mrg int i, j;
2780 1.1 mrg for (i = 0, j = 0; i < array->rank; i++)
2781 1.1 mrg if (i != d - 1)
2782 1.1 mrg {
2783 1.1 mrg if (!identical_dimen_shape (array, i, shift, j))
2784 1.1 mrg {
2785 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L has "
2786 1.1 mrg "invalid shape in dimension %d (%ld/%ld)",
2787 1.1 mrg gfc_current_intrinsic_arg[1]->name,
2788 1.1 mrg gfc_current_intrinsic, &shift->where, i + 1,
2789 1.1 mrg mpz_get_si (array->shape[i]),
2790 1.1 mrg mpz_get_si (shift->shape[j]));
2791 1.1 mrg return false;
2792 1.1 mrg }
2793 1.1 mrg
2794 1.1 mrg j += 1;
2795 1.1 mrg }
2796 1.1 mrg }
2797 1.1 mrg }
2798 1.1 mrg else
2799 1.1 mrg {
2800 1.1 mrg gfc_error ("%qs argument of intrinsic %qs at %L of must have rank "
2801 1.1 mrg "%d or be a scalar", gfc_current_intrinsic_arg[1]->name,
2802 1.1 mrg gfc_current_intrinsic, &shift->where, array->rank - 1);
2803 1.1 mrg return false;
2804 1.1 mrg }
2805 1.1 mrg
2806 1.1 mrg if (boundary != NULL)
2807 1.1 mrg {
2808 1.1 mrg if (!same_type_check (array, 0, boundary, 2))
2809 1.1 mrg return false;
2810 1.1 mrg
2811 1.1 mrg /* Reject unequal string lengths and emit a better error message than
2812 1.1 mrg gfc_check_same_strlen would. */
2813 1.1 mrg if (array->ts.type == BT_CHARACTER)
2814 1.1 mrg {
2815 1.1 mrg ssize_t len_a, len_b;
2816 1.1 mrg
2817 1.1 mrg len_a = gfc_var_strlen (array);
2818 1.1 mrg len_b = gfc_var_strlen (boundary);
2819 1.1 mrg if (len_a != -1 && len_b != -1 && len_a != len_b)
2820 1.1 mrg {
2821 1.1 mrg gfc_error ("%qs must be of same type and kind as %qs at %L in %qs",
2822 1.1 mrg gfc_current_intrinsic_arg[2]->name,
2823 1.1 mrg gfc_current_intrinsic_arg[0]->name,
2824 1.1 mrg &boundary->where, gfc_current_intrinsic);
2825 1.1 mrg return false;
2826 1.1 mrg }
2827 1.1 mrg }
2828 1.1 mrg
2829 1.1 mrg if (array->rank == 1 || boundary->rank == 0)
2830 1.1 mrg {
2831 1.1 mrg if (!scalar_check (boundary, 2))
2832 1.1 mrg return false;
2833 1.1 mrg }
2834 1.1 mrg else if (boundary->rank == array->rank - 1)
2835 1.1 mrg {
2836 1.1 mrg if (d > 0)
2837 1.1 mrg {
2838 1.1 mrg int i,j;
2839 1.1 mrg for (i = 0, j = 0; i < array->rank; i++)
2840 1.1 mrg {
2841 1.1 mrg if (i != d - 1)
2842 1.1 mrg {
2843 1.1 mrg if (!identical_dimen_shape (array, i, boundary, j))
2844 1.1 mrg {
2845 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L has "
2846 1.1 mrg "invalid shape in dimension %d (%ld/%ld)",
2847 1.1 mrg gfc_current_intrinsic_arg[2]->name,
2848 1.1 mrg gfc_current_intrinsic, &shift->where, i+1,
2849 1.1 mrg mpz_get_si (array->shape[i]),
2850 1.1 mrg mpz_get_si (boundary->shape[j]));
2851 1.1 mrg return false;
2852 1.1 mrg }
2853 1.1 mrg j += 1;
2854 1.1 mrg }
2855 1.1 mrg }
2856 1.1 mrg }
2857 1.1 mrg }
2858 1.1 mrg else
2859 1.1 mrg {
2860 1.1 mrg gfc_error ("%qs argument of intrinsic %qs at %L of must have "
2861 1.1 mrg "rank %d or be a scalar",
2862 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
2863 1.1 mrg &shift->where, array->rank - 1);
2864 1.1 mrg return false;
2865 1.1 mrg }
2866 1.1 mrg }
2867 1.1 mrg else
2868 1.1 mrg {
2869 1.1 mrg switch (array->ts.type)
2870 1.1 mrg {
2871 1.1 mrg case BT_INTEGER:
2872 1.1 mrg case BT_LOGICAL:
2873 1.1 mrg case BT_REAL:
2874 1.1 mrg case BT_COMPLEX:
2875 1.1 mrg case BT_CHARACTER:
2876 1.1 mrg break;
2877 1.1 mrg
2878 1.1 mrg default:
2879 1.1 mrg gfc_error ("Missing %qs argument to %qs intrinsic at %L for %qs "
2880 1.1 mrg "of type %qs", gfc_current_intrinsic_arg[2]->name,
2881 1.1 mrg gfc_current_intrinsic, &array->where,
2882 1.1 mrg gfc_current_intrinsic_arg[0]->name,
2883 1.1 mrg gfc_typename (array));
2884 1.1 mrg return false;
2885 1.1 mrg }
2886 1.1 mrg }
2887 1.1 mrg
2888 1.1 mrg return true;
2889 1.1 mrg }
2890 1.1 mrg
2891 1.1 mrg
2892 1.1 mrg bool
2893 1.1 mrg gfc_check_float (gfc_expr *a)
2894 1.1 mrg {
2895 1.1 mrg if (a->ts.type == BT_BOZ)
2896 1.1 mrg {
2897 1.1 mrg if (gfc_invalid_boz (G_("BOZ literal constant at %L cannot appear in the"
2898 1.1 mrg " FLOAT intrinsic subprogram"), &a->where))
2899 1.1 mrg {
2900 1.1 mrg reset_boz (a);
2901 1.1 mrg return false;
2902 1.1 mrg }
2903 1.1 mrg if (!gfc_boz2int (a, gfc_default_integer_kind))
2904 1.1 mrg return false;
2905 1.1 mrg }
2906 1.1 mrg
2907 1.1 mrg if (!type_check (a, 0, BT_INTEGER))
2908 1.1 mrg return false;
2909 1.1 mrg
2910 1.1 mrg if ((a->ts.kind != gfc_default_integer_kind)
2911 1.1 mrg && !gfc_notify_std (GFC_STD_GNU, "non-default INTEGER "
2912 1.1 mrg "kind argument to %s intrinsic at %L",
2913 1.1 mrg gfc_current_intrinsic, &a->where))
2914 1.1 mrg return false;
2915 1.1 mrg
2916 1.1 mrg return true;
2917 1.1 mrg }
2918 1.1 mrg
2919 1.1 mrg /* A single complex argument. */
2920 1.1 mrg
2921 1.1 mrg bool
2922 1.1 mrg gfc_check_fn_c (gfc_expr *a)
2923 1.1 mrg {
2924 1.1 mrg if (!type_check (a, 0, BT_COMPLEX))
2925 1.1 mrg return false;
2926 1.1 mrg
2927 1.1 mrg return true;
2928 1.1 mrg }
2929 1.1 mrg
2930 1.1 mrg
2931 1.1 mrg /* A single real argument. */
2932 1.1 mrg
2933 1.1 mrg bool
2934 1.1 mrg gfc_check_fn_r (gfc_expr *a)
2935 1.1 mrg {
2936 1.1 mrg if (!type_check (a, 0, BT_REAL))
2937 1.1 mrg return false;
2938 1.1 mrg
2939 1.1 mrg return true;
2940 1.1 mrg }
2941 1.1 mrg
2942 1.1 mrg /* A single double argument. */
2943 1.1 mrg
2944 1.1 mrg bool
2945 1.1 mrg gfc_check_fn_d (gfc_expr *a)
2946 1.1 mrg {
2947 1.1 mrg if (!double_check (a, 0))
2948 1.1 mrg return false;
2949 1.1 mrg
2950 1.1 mrg return true;
2951 1.1 mrg }
2952 1.1 mrg
2953 1.1 mrg /* A single real or complex argument. */
2954 1.1 mrg
2955 1.1 mrg bool
2956 1.1 mrg gfc_check_fn_rc (gfc_expr *a)
2957 1.1 mrg {
2958 1.1 mrg if (!real_or_complex_check (a, 0))
2959 1.1 mrg return false;
2960 1.1 mrg
2961 1.1 mrg return true;
2962 1.1 mrg }
2963 1.1 mrg
2964 1.1 mrg
2965 1.1 mrg bool
2966 1.1 mrg gfc_check_fn_rc2008 (gfc_expr *a)
2967 1.1 mrg {
2968 1.1 mrg if (!real_or_complex_check (a, 0))
2969 1.1 mrg return false;
2970 1.1 mrg
2971 1.1 mrg if (a->ts.type == BT_COMPLEX
2972 1.1 mrg && !gfc_notify_std (GFC_STD_F2008, "COMPLEX argument %qs "
2973 1.1 mrg "of %qs intrinsic at %L",
2974 1.1 mrg gfc_current_intrinsic_arg[0]->name,
2975 1.1 mrg gfc_current_intrinsic, &a->where))
2976 1.1 mrg return false;
2977 1.1 mrg
2978 1.1 mrg return true;
2979 1.1 mrg }
2980 1.1 mrg
2981 1.1 mrg
2982 1.1 mrg bool
2983 1.1 mrg gfc_check_fnum (gfc_expr *unit)
2984 1.1 mrg {
2985 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
2986 1.1 mrg return false;
2987 1.1 mrg
2988 1.1 mrg if (!scalar_check (unit, 0))
2989 1.1 mrg return false;
2990 1.1 mrg
2991 1.1 mrg return true;
2992 1.1 mrg }
2993 1.1 mrg
2994 1.1 mrg
2995 1.1 mrg bool
2996 1.1 mrg gfc_check_huge (gfc_expr *x)
2997 1.1 mrg {
2998 1.1 mrg if (!int_or_real_check (x, 0))
2999 1.1 mrg return false;
3000 1.1 mrg
3001 1.1 mrg return true;
3002 1.1 mrg }
3003 1.1 mrg
3004 1.1 mrg
3005 1.1 mrg bool
3006 1.1 mrg gfc_check_hypot (gfc_expr *x, gfc_expr *y)
3007 1.1 mrg {
3008 1.1 mrg if (!type_check (x, 0, BT_REAL))
3009 1.1 mrg return false;
3010 1.1 mrg if (!same_type_check (x, 0, y, 1))
3011 1.1 mrg return false;
3012 1.1 mrg
3013 1.1 mrg return true;
3014 1.1 mrg }
3015 1.1 mrg
3016 1.1 mrg
3017 1.1 mrg /* Check that the single argument is an integer. */
3018 1.1 mrg
3019 1.1 mrg bool
3020 1.1 mrg gfc_check_i (gfc_expr *i)
3021 1.1 mrg {
3022 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
3023 1.1 mrg return false;
3024 1.1 mrg
3025 1.1 mrg return true;
3026 1.1 mrg }
3027 1.1 mrg
3028 1.1 mrg
3029 1.1 mrg bool
3030 1.1 mrg gfc_check_iand_ieor_ior (gfc_expr *i, gfc_expr *j)
3031 1.1 mrg {
3032 1.1 mrg /* i and j cannot both be BOZ literal constants. */
3033 1.1 mrg if (!boz_args_check (i, j))
3034 1.1 mrg return false;
3035 1.1 mrg
3036 1.1 mrg /* If i is BOZ and j is integer, convert i to type of j. */
3037 1.1 mrg if (i->ts.type == BT_BOZ && j->ts.type == BT_INTEGER
3038 1.1 mrg && !gfc_boz2int (i, j->ts.kind))
3039 1.1 mrg return false;
3040 1.1 mrg
3041 1.1 mrg /* If j is BOZ and i is integer, convert j to type of i. */
3042 1.1 mrg if (j->ts.type == BT_BOZ && i->ts.type == BT_INTEGER
3043 1.1 mrg && !gfc_boz2int (j, i->ts.kind))
3044 1.1 mrg return false;
3045 1.1 mrg
3046 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
3047 1.1 mrg return false;
3048 1.1 mrg
3049 1.1 mrg if (!type_check (j, 1, BT_INTEGER))
3050 1.1 mrg return false;
3051 1.1 mrg
3052 1.1 mrg if (i->ts.kind != j->ts.kind)
3053 1.1 mrg {
3054 1.1 mrg gfc_error ("Arguments of %qs have different kind type parameters "
3055 1.1 mrg "at %L", gfc_current_intrinsic, &i->where);
3056 1.1 mrg return false;
3057 1.1 mrg }
3058 1.1 mrg
3059 1.1 mrg return true;
3060 1.1 mrg }
3061 1.1 mrg
3062 1.1 mrg
3063 1.1 mrg bool
3064 1.1 mrg gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len)
3065 1.1 mrg {
3066 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
3067 1.1 mrg return false;
3068 1.1 mrg
3069 1.1 mrg if (!type_check (pos, 1, BT_INTEGER))
3070 1.1 mrg return false;
3071 1.1 mrg
3072 1.1 mrg if (!type_check (len, 2, BT_INTEGER))
3073 1.1 mrg return false;
3074 1.1 mrg
3075 1.1 mrg if (!nonnegative_check ("pos", pos))
3076 1.1 mrg return false;
3077 1.1 mrg
3078 1.1 mrg if (!nonnegative_check ("len", len))
3079 1.1 mrg return false;
3080 1.1 mrg
3081 1.1 mrg if (!less_than_bitsize2 ("i", i, "pos", pos, "len", len))
3082 1.1 mrg return false;
3083 1.1 mrg
3084 1.1 mrg return true;
3085 1.1 mrg }
3086 1.1 mrg
3087 1.1 mrg
3088 1.1 mrg bool
3089 1.1 mrg gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
3090 1.1 mrg {
3091 1.1 mrg int i;
3092 1.1 mrg
3093 1.1 mrg if (!type_check (c, 0, BT_CHARACTER))
3094 1.1 mrg return false;
3095 1.1 mrg
3096 1.1 mrg if (!kind_check (kind, 1, BT_INTEGER))
3097 1.1 mrg return false;
3098 1.1 mrg
3099 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3100 1.1 mrg "with KIND argument at %L",
3101 1.1 mrg gfc_current_intrinsic, &kind->where))
3102 1.1 mrg return false;
3103 1.1 mrg
3104 1.1 mrg if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING)
3105 1.1 mrg {
3106 1.1 mrg gfc_expr *start;
3107 1.1 mrg gfc_expr *end;
3108 1.1 mrg gfc_ref *ref;
3109 1.1 mrg
3110 1.1 mrg /* Substring references don't have the charlength set. */
3111 1.1 mrg ref = c->ref;
3112 1.1 mrg while (ref && ref->type != REF_SUBSTRING)
3113 1.1 mrg ref = ref->next;
3114 1.1 mrg
3115 1.1 mrg gcc_assert (ref == NULL || ref->type == REF_SUBSTRING);
3116 1.1 mrg
3117 1.1 mrg if (!ref)
3118 1.1 mrg {
3119 1.1 mrg /* Check that the argument is length one. Non-constant lengths
3120 1.1 mrg can't be checked here, so assume they are ok. */
3121 1.1 mrg if (c->ts.u.cl && c->ts.u.cl->length)
3122 1.1 mrg {
3123 1.1 mrg /* If we already have a length for this expression then use it. */
3124 1.1 mrg if (c->ts.u.cl->length->expr_type != EXPR_CONSTANT)
3125 1.1 mrg return true;
3126 1.1 mrg i = mpz_get_si (c->ts.u.cl->length->value.integer);
3127 1.1 mrg }
3128 1.1 mrg else
3129 1.1 mrg return true;
3130 1.1 mrg }
3131 1.1 mrg else
3132 1.1 mrg {
3133 1.1 mrg start = ref->u.ss.start;
3134 1.1 mrg end = ref->u.ss.end;
3135 1.1 mrg
3136 1.1 mrg gcc_assert (start);
3137 1.1 mrg if (end == NULL || end->expr_type != EXPR_CONSTANT
3138 1.1 mrg || start->expr_type != EXPR_CONSTANT)
3139 1.1 mrg return true;
3140 1.1 mrg
3141 1.1 mrg i = mpz_get_si (end->value.integer) + 1
3142 1.1 mrg - mpz_get_si (start->value.integer);
3143 1.1 mrg }
3144 1.1 mrg }
3145 1.1 mrg else
3146 1.1 mrg return true;
3147 1.1 mrg
3148 1.1 mrg if (i != 1)
3149 1.1 mrg {
3150 1.1 mrg gfc_error ("Argument of %s at %L must be of length one",
3151 1.1 mrg gfc_current_intrinsic, &c->where);
3152 1.1 mrg return false;
3153 1.1 mrg }
3154 1.1 mrg
3155 1.1 mrg return true;
3156 1.1 mrg }
3157 1.1 mrg
3158 1.1 mrg
3159 1.1 mrg bool
3160 1.1 mrg gfc_check_idnint (gfc_expr *a)
3161 1.1 mrg {
3162 1.1 mrg if (!double_check (a, 0))
3163 1.1 mrg return false;
3164 1.1 mrg
3165 1.1 mrg return true;
3166 1.1 mrg }
3167 1.1 mrg
3168 1.1 mrg
3169 1.1 mrg bool
3170 1.1 mrg gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back,
3171 1.1 mrg gfc_expr *kind)
3172 1.1 mrg {
3173 1.1 mrg if (!type_check (string, 0, BT_CHARACTER)
3174 1.1 mrg || !type_check (substring, 1, BT_CHARACTER))
3175 1.1 mrg return false;
3176 1.1 mrg
3177 1.1 mrg if (back != NULL && !type_check (back, 2, BT_LOGICAL))
3178 1.1 mrg return false;
3179 1.1 mrg
3180 1.1 mrg if (!kind_check (kind, 3, BT_INTEGER))
3181 1.1 mrg return false;
3182 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3183 1.1 mrg "with KIND argument at %L",
3184 1.1 mrg gfc_current_intrinsic, &kind->where))
3185 1.1 mrg return false;
3186 1.1 mrg
3187 1.1 mrg if (string->ts.kind != substring->ts.kind)
3188 1.1 mrg {
3189 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be the same "
3190 1.1 mrg "kind as %qs", gfc_current_intrinsic_arg[1]->name,
3191 1.1 mrg gfc_current_intrinsic, &substring->where,
3192 1.1 mrg gfc_current_intrinsic_arg[0]->name);
3193 1.1 mrg return false;
3194 1.1 mrg }
3195 1.1 mrg
3196 1.1 mrg return true;
3197 1.1 mrg }
3198 1.1 mrg
3199 1.1 mrg
3200 1.1 mrg bool
3201 1.1 mrg gfc_check_int (gfc_expr *x, gfc_expr *kind)
3202 1.1 mrg {
3203 1.1 mrg /* BOZ is dealt within simplify_int*. */
3204 1.1 mrg if (x->ts.type == BT_BOZ)
3205 1.1 mrg return true;
3206 1.1 mrg
3207 1.1 mrg if (!numeric_check (x, 0))
3208 1.1 mrg return false;
3209 1.1 mrg
3210 1.1 mrg if (!kind_check (kind, 1, BT_INTEGER))
3211 1.1 mrg return false;
3212 1.1 mrg
3213 1.1 mrg return true;
3214 1.1 mrg }
3215 1.1 mrg
3216 1.1 mrg
3217 1.1 mrg bool
3218 1.1 mrg gfc_check_intconv (gfc_expr *x)
3219 1.1 mrg {
3220 1.1 mrg if (strcmp (gfc_current_intrinsic, "short") == 0
3221 1.1 mrg || strcmp (gfc_current_intrinsic, "long") == 0)
3222 1.1 mrg {
3223 1.1 mrg gfc_error ("%qs intrinsic subprogram at %L has been removed. "
3224 1.1 mrg "Use INT intrinsic subprogram.", gfc_current_intrinsic,
3225 1.1 mrg &x->where);
3226 1.1 mrg return false;
3227 1.1 mrg }
3228 1.1 mrg
3229 1.1 mrg /* BOZ is dealt within simplify_int*. */
3230 1.1 mrg if (x->ts.type == BT_BOZ)
3231 1.1 mrg return true;
3232 1.1 mrg
3233 1.1 mrg if (!numeric_check (x, 0))
3234 1.1 mrg return false;
3235 1.1 mrg
3236 1.1 mrg return true;
3237 1.1 mrg }
3238 1.1 mrg
3239 1.1 mrg bool
3240 1.1 mrg gfc_check_ishft (gfc_expr *i, gfc_expr *shift)
3241 1.1 mrg {
3242 1.1 mrg if (!type_check (i, 0, BT_INTEGER)
3243 1.1 mrg || !type_check (shift, 1, BT_INTEGER))
3244 1.1 mrg return false;
3245 1.1 mrg
3246 1.1 mrg if (!less_than_bitsize1 ("I", i, NULL, shift, true))
3247 1.1 mrg return false;
3248 1.1 mrg
3249 1.1 mrg return true;
3250 1.1 mrg }
3251 1.1 mrg
3252 1.1 mrg
3253 1.1 mrg bool
3254 1.1 mrg gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size)
3255 1.1 mrg {
3256 1.1 mrg if (!type_check (i, 0, BT_INTEGER)
3257 1.1 mrg || !type_check (shift, 1, BT_INTEGER))
3258 1.1 mrg return false;
3259 1.1 mrg
3260 1.1 mrg if (size != NULL)
3261 1.1 mrg {
3262 1.1 mrg int i2, i3;
3263 1.1 mrg
3264 1.1 mrg if (!type_check (size, 2, BT_INTEGER))
3265 1.1 mrg return false;
3266 1.1 mrg
3267 1.1 mrg if (!less_than_bitsize1 ("I", i, "SIZE", size, true))
3268 1.1 mrg return false;
3269 1.1 mrg
3270 1.1 mrg if (size->expr_type == EXPR_CONSTANT)
3271 1.1 mrg {
3272 1.1 mrg gfc_extract_int (size, &i3);
3273 1.1 mrg if (i3 <= 0)
3274 1.1 mrg {
3275 1.1 mrg gfc_error ("SIZE at %L must be positive", &size->where);
3276 1.1 mrg return false;
3277 1.1 mrg }
3278 1.1 mrg
3279 1.1 mrg if (shift->expr_type == EXPR_CONSTANT)
3280 1.1 mrg {
3281 1.1 mrg gfc_extract_int (shift, &i2);
3282 1.1 mrg if (i2 < 0)
3283 1.1 mrg i2 = -i2;
3284 1.1 mrg
3285 1.1 mrg if (i2 > i3)
3286 1.1 mrg {
3287 1.1 mrg gfc_error ("The absolute value of SHIFT at %L must be less "
3288 1.1 mrg "than or equal to SIZE at %L", &shift->where,
3289 1.1 mrg &size->where);
3290 1.1 mrg return false;
3291 1.1 mrg }
3292 1.1 mrg }
3293 1.1 mrg }
3294 1.1 mrg }
3295 1.1 mrg else if (!less_than_bitsize1 ("I", i, NULL, shift, true))
3296 1.1 mrg return false;
3297 1.1 mrg
3298 1.1 mrg return true;
3299 1.1 mrg }
3300 1.1 mrg
3301 1.1 mrg
3302 1.1 mrg bool
3303 1.1 mrg gfc_check_kill (gfc_expr *pid, gfc_expr *sig)
3304 1.1 mrg {
3305 1.1 mrg if (!type_check (pid, 0, BT_INTEGER))
3306 1.1 mrg return false;
3307 1.1 mrg
3308 1.1 mrg if (!scalar_check (pid, 0))
3309 1.1 mrg return false;
3310 1.1 mrg
3311 1.1 mrg if (!type_check (sig, 1, BT_INTEGER))
3312 1.1 mrg return false;
3313 1.1 mrg
3314 1.1 mrg if (!scalar_check (sig, 1))
3315 1.1 mrg return false;
3316 1.1 mrg
3317 1.1 mrg return true;
3318 1.1 mrg }
3319 1.1 mrg
3320 1.1 mrg
3321 1.1 mrg bool
3322 1.1 mrg gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status)
3323 1.1 mrg {
3324 1.1 mrg if (!type_check (pid, 0, BT_INTEGER))
3325 1.1 mrg return false;
3326 1.1 mrg
3327 1.1 mrg if (!scalar_check (pid, 0))
3328 1.1 mrg return false;
3329 1.1 mrg
3330 1.1 mrg if (!type_check (sig, 1, BT_INTEGER))
3331 1.1 mrg return false;
3332 1.1 mrg
3333 1.1 mrg if (!scalar_check (sig, 1))
3334 1.1 mrg return false;
3335 1.1 mrg
3336 1.1 mrg if (status)
3337 1.1 mrg {
3338 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
3339 1.1 mrg return false;
3340 1.1 mrg
3341 1.1 mrg if (!scalar_check (status, 2))
3342 1.1 mrg return false;
3343 1.1 mrg
3344 1.1 mrg if (status->expr_type != EXPR_VARIABLE)
3345 1.1 mrg {
3346 1.1 mrg gfc_error ("STATUS at %L shall be an INTENT(OUT) variable",
3347 1.1 mrg &status->where);
3348 1.1 mrg return false;
3349 1.1 mrg }
3350 1.1 mrg
3351 1.1 mrg if (status->expr_type == EXPR_VARIABLE
3352 1.1 mrg && status->symtree && status->symtree->n.sym
3353 1.1 mrg && status->symtree->n.sym->attr.intent == INTENT_IN)
3354 1.1 mrg {
3355 1.1 mrg gfc_error ("%qs at %L shall be an INTENT(OUT) variable",
3356 1.1 mrg status->symtree->name, &status->where);
3357 1.1 mrg return false;
3358 1.1 mrg }
3359 1.1 mrg }
3360 1.1 mrg
3361 1.1 mrg return true;
3362 1.1 mrg }
3363 1.1 mrg
3364 1.1 mrg
3365 1.1 mrg bool
3366 1.1 mrg gfc_check_kind (gfc_expr *x)
3367 1.1 mrg {
3368 1.1 mrg if (gfc_invalid_null_arg (x))
3369 1.1 mrg return false;
3370 1.1 mrg
3371 1.1 mrg if (gfc_bt_struct (x->ts.type) || x->ts.type == BT_CLASS)
3372 1.1 mrg {
3373 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of "
3374 1.1 mrg "intrinsic type", gfc_current_intrinsic_arg[0]->name,
3375 1.1 mrg gfc_current_intrinsic, &x->where);
3376 1.1 mrg return false;
3377 1.1 mrg }
3378 1.1 mrg if (x->ts.type == BT_PROCEDURE)
3379 1.1 mrg {
3380 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a data entity",
3381 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
3382 1.1 mrg &x->where);
3383 1.1 mrg return false;
3384 1.1 mrg }
3385 1.1 mrg
3386 1.1 mrg return true;
3387 1.1 mrg }
3388 1.1 mrg
3389 1.1 mrg
3390 1.1 mrg bool
3391 1.1 mrg gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
3392 1.1 mrg {
3393 1.1 mrg if (!array_check (array, 0))
3394 1.1 mrg return false;
3395 1.1 mrg
3396 1.1 mrg if (!dim_check (dim, 1, false))
3397 1.1 mrg return false;
3398 1.1 mrg
3399 1.1 mrg if (!dim_rank_check (dim, array, 1))
3400 1.1 mrg return false;
3401 1.1 mrg
3402 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
3403 1.1 mrg return false;
3404 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3405 1.1 mrg "with KIND argument at %L",
3406 1.1 mrg gfc_current_intrinsic, &kind->where))
3407 1.1 mrg return false;
3408 1.1 mrg
3409 1.1 mrg return true;
3410 1.1 mrg }
3411 1.1 mrg
3412 1.1 mrg
3413 1.1 mrg bool
3414 1.1 mrg gfc_check_lcobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
3415 1.1 mrg {
3416 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
3417 1.1 mrg {
3418 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
3419 1.1 mrg return false;
3420 1.1 mrg }
3421 1.1 mrg
3422 1.1 mrg if (!coarray_check (coarray, 0))
3423 1.1 mrg return false;
3424 1.1 mrg
3425 1.1 mrg if (dim != NULL)
3426 1.1 mrg {
3427 1.1 mrg if (!dim_check (dim, 1, false))
3428 1.1 mrg return false;
3429 1.1 mrg
3430 1.1 mrg if (!dim_corank_check (dim, coarray))
3431 1.1 mrg return false;
3432 1.1 mrg }
3433 1.1 mrg
3434 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
3435 1.1 mrg return false;
3436 1.1 mrg
3437 1.1 mrg return true;
3438 1.1 mrg }
3439 1.1 mrg
3440 1.1 mrg
3441 1.1 mrg bool
3442 1.1 mrg gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind)
3443 1.1 mrg {
3444 1.1 mrg if (!type_check (s, 0, BT_CHARACTER))
3445 1.1 mrg return false;
3446 1.1 mrg
3447 1.1 mrg if (gfc_invalid_null_arg (s))
3448 1.1 mrg return false;
3449 1.1 mrg
3450 1.1 mrg if (!kind_check (kind, 1, BT_INTEGER))
3451 1.1 mrg return false;
3452 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3453 1.1 mrg "with KIND argument at %L",
3454 1.1 mrg gfc_current_intrinsic, &kind->where))
3455 1.1 mrg return false;
3456 1.1 mrg
3457 1.1 mrg return true;
3458 1.1 mrg }
3459 1.1 mrg
3460 1.1 mrg
3461 1.1 mrg bool
3462 1.1 mrg gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b)
3463 1.1 mrg {
3464 1.1 mrg if (!type_check (a, 0, BT_CHARACTER))
3465 1.1 mrg return false;
3466 1.1 mrg if (!kind_value_check (a, 0, gfc_default_character_kind))
3467 1.1 mrg return false;
3468 1.1 mrg
3469 1.1 mrg if (!type_check (b, 1, BT_CHARACTER))
3470 1.1 mrg return false;
3471 1.1 mrg if (!kind_value_check (b, 1, gfc_default_character_kind))
3472 1.1 mrg return false;
3473 1.1 mrg
3474 1.1 mrg return true;
3475 1.1 mrg }
3476 1.1 mrg
3477 1.1 mrg
3478 1.1 mrg bool
3479 1.1 mrg gfc_check_link (gfc_expr *path1, gfc_expr *path2)
3480 1.1 mrg {
3481 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
3482 1.1 mrg return false;
3483 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
3484 1.1 mrg return false;
3485 1.1 mrg
3486 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
3487 1.1 mrg return false;
3488 1.1 mrg if (!kind_value_check (path2, 1, gfc_default_character_kind))
3489 1.1 mrg return false;
3490 1.1 mrg
3491 1.1 mrg return true;
3492 1.1 mrg }
3493 1.1 mrg
3494 1.1 mrg
3495 1.1 mrg bool
3496 1.1 mrg gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3497 1.1 mrg {
3498 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
3499 1.1 mrg return false;
3500 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
3501 1.1 mrg return false;
3502 1.1 mrg
3503 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
3504 1.1 mrg return false;
3505 1.1 mrg if (!kind_value_check (path2, 0, gfc_default_character_kind))
3506 1.1 mrg return false;
3507 1.1 mrg
3508 1.1 mrg if (status == NULL)
3509 1.1 mrg return true;
3510 1.1 mrg
3511 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
3512 1.1 mrg return false;
3513 1.1 mrg
3514 1.1 mrg if (!scalar_check (status, 2))
3515 1.1 mrg return false;
3516 1.1 mrg
3517 1.1 mrg return true;
3518 1.1 mrg }
3519 1.1 mrg
3520 1.1 mrg
3521 1.1 mrg bool
3522 1.1 mrg gfc_check_loc (gfc_expr *expr)
3523 1.1 mrg {
3524 1.1 mrg return variable_check (expr, 0, true);
3525 1.1 mrg }
3526 1.1 mrg
3527 1.1 mrg
3528 1.1 mrg bool
3529 1.1 mrg gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2)
3530 1.1 mrg {
3531 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
3532 1.1 mrg return false;
3533 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
3534 1.1 mrg return false;
3535 1.1 mrg
3536 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
3537 1.1 mrg return false;
3538 1.1 mrg if (!kind_value_check (path2, 1, gfc_default_character_kind))
3539 1.1 mrg return false;
3540 1.1 mrg
3541 1.1 mrg return true;
3542 1.1 mrg }
3543 1.1 mrg
3544 1.1 mrg
3545 1.1 mrg bool
3546 1.1 mrg gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
3547 1.1 mrg {
3548 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
3549 1.1 mrg return false;
3550 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
3551 1.1 mrg return false;
3552 1.1 mrg
3553 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
3554 1.1 mrg return false;
3555 1.1 mrg if (!kind_value_check (path2, 1, gfc_default_character_kind))
3556 1.1 mrg return false;
3557 1.1 mrg
3558 1.1 mrg if (status == NULL)
3559 1.1 mrg return true;
3560 1.1 mrg
3561 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
3562 1.1 mrg return false;
3563 1.1 mrg
3564 1.1 mrg if (!scalar_check (status, 2))
3565 1.1 mrg return false;
3566 1.1 mrg
3567 1.1 mrg return true;
3568 1.1 mrg }
3569 1.1 mrg
3570 1.1 mrg
3571 1.1 mrg bool
3572 1.1 mrg gfc_check_logical (gfc_expr *a, gfc_expr *kind)
3573 1.1 mrg {
3574 1.1 mrg if (!type_check (a, 0, BT_LOGICAL))
3575 1.1 mrg return false;
3576 1.1 mrg if (!kind_check (kind, 1, BT_LOGICAL))
3577 1.1 mrg return false;
3578 1.1 mrg
3579 1.1 mrg return true;
3580 1.1 mrg }
3581 1.1 mrg
3582 1.1 mrg
3583 1.1 mrg /* Min/max family. */
3584 1.1 mrg
3585 1.1 mrg static bool
3586 1.1 mrg min_max_args (gfc_actual_arglist *args)
3587 1.1 mrg {
3588 1.1 mrg gfc_actual_arglist *arg;
3589 1.1 mrg int i, j, nargs, *nlabels, nlabelless;
3590 1.1 mrg bool a1 = false, a2 = false;
3591 1.1 mrg
3592 1.1 mrg if (args == NULL || args->next == NULL)
3593 1.1 mrg {
3594 1.1 mrg gfc_error ("Intrinsic %qs at %L must have at least two arguments",
3595 1.1 mrg gfc_current_intrinsic, gfc_current_intrinsic_where);
3596 1.1 mrg return false;
3597 1.1 mrg }
3598 1.1 mrg
3599 1.1 mrg if (!args->name)
3600 1.1 mrg a1 = true;
3601 1.1 mrg
3602 1.1 mrg if (!args->next->name)
3603 1.1 mrg a2 = true;
3604 1.1 mrg
3605 1.1 mrg nargs = 0;
3606 1.1 mrg for (arg = args; arg; arg = arg->next)
3607 1.1 mrg if (arg->name)
3608 1.1 mrg nargs++;
3609 1.1 mrg
3610 1.1 mrg if (nargs == 0)
3611 1.1 mrg return true;
3612 1.1 mrg
3613 1.1 mrg /* Note: Having a keywordless argument after an "arg=" is checked before. */
3614 1.1 mrg nlabelless = 0;
3615 1.1 mrg nlabels = XALLOCAVEC (int, nargs);
3616 1.1 mrg for (arg = args, i = 0; arg; arg = arg->next, i++)
3617 1.1 mrg if (arg->name)
3618 1.1 mrg {
3619 1.1 mrg int n;
3620 1.1 mrg char *endp;
3621 1.1 mrg
3622 1.1 mrg if (arg->name[0] != 'a' || arg->name[1] < '1' || arg->name[1] > '9')
3623 1.1 mrg goto unknown;
3624 1.1 mrg n = strtol (&arg->name[1], &endp, 10);
3625 1.1 mrg if (endp[0] != '\0')
3626 1.1 mrg goto unknown;
3627 1.1 mrg if (n <= 0)
3628 1.1 mrg goto unknown;
3629 1.1 mrg if (n <= nlabelless)
3630 1.1 mrg goto duplicate;
3631 1.1 mrg nlabels[i] = n;
3632 1.1 mrg if (n == 1)
3633 1.1 mrg a1 = true;
3634 1.1 mrg if (n == 2)
3635 1.1 mrg a2 = true;
3636 1.1 mrg }
3637 1.1 mrg else
3638 1.1 mrg nlabelless++;
3639 1.1 mrg
3640 1.1 mrg if (!a1 || !a2)
3641 1.1 mrg {
3642 1.1 mrg gfc_error ("Missing %qs argument to the %s intrinsic at %L",
3643 1.1 mrg !a1 ? "a1" : "a2", gfc_current_intrinsic,
3644 1.1 mrg gfc_current_intrinsic_where);
3645 1.1 mrg return false;
3646 1.1 mrg }
3647 1.1 mrg
3648 1.1 mrg /* Check for duplicates. */
3649 1.1 mrg for (i = 0; i < nargs; i++)
3650 1.1 mrg for (j = i + 1; j < nargs; j++)
3651 1.1 mrg if (nlabels[i] == nlabels[j])
3652 1.1 mrg goto duplicate;
3653 1.1 mrg
3654 1.1 mrg return true;
3655 1.1 mrg
3656 1.1 mrg duplicate:
3657 1.1 mrg gfc_error ("Duplicate argument %qs at %L to intrinsic %s", arg->name,
3658 1.1 mrg &arg->expr->where, gfc_current_intrinsic);
3659 1.1 mrg return false;
3660 1.1 mrg
3661 1.1 mrg unknown:
3662 1.1 mrg gfc_error ("Unknown argument %qs at %L to intrinsic %s", arg->name,
3663 1.1 mrg &arg->expr->where, gfc_current_intrinsic);
3664 1.1 mrg return false;
3665 1.1 mrg }
3666 1.1 mrg
3667 1.1 mrg
3668 1.1 mrg static bool
3669 1.1 mrg check_rest (bt type, int kind, gfc_actual_arglist *arglist)
3670 1.1 mrg {
3671 1.1 mrg gfc_actual_arglist *arg, *tmp;
3672 1.1 mrg gfc_expr *x;
3673 1.1 mrg int m, n;
3674 1.1 mrg
3675 1.1 mrg if (!min_max_args (arglist))
3676 1.1 mrg return false;
3677 1.1 mrg
3678 1.1 mrg for (arg = arglist, n=1; arg; arg = arg->next, n++)
3679 1.1 mrg {
3680 1.1 mrg x = arg->expr;
3681 1.1 mrg if (x->ts.type != type || x->ts.kind != kind)
3682 1.1 mrg {
3683 1.1 mrg if (x->ts.type == type)
3684 1.1 mrg {
3685 1.1 mrg if (x->ts.type == BT_CHARACTER)
3686 1.1 mrg {
3687 1.1 mrg gfc_error ("Different character kinds at %L", &x->where);
3688 1.1 mrg return false;
3689 1.1 mrg }
3690 1.1 mrg if (!gfc_notify_std (GFC_STD_GNU, "Different type "
3691 1.1 mrg "kinds at %L", &x->where))
3692 1.1 mrg return false;
3693 1.1 mrg }
3694 1.1 mrg else
3695 1.1 mrg {
3696 1.1 mrg gfc_error ("%<a%d%> argument of %qs intrinsic at %L must be "
3697 1.1 mrg "%s(%d)", n, gfc_current_intrinsic, &x->where,
3698 1.1 mrg gfc_basic_typename (type), kind);
3699 1.1 mrg return false;
3700 1.1 mrg }
3701 1.1 mrg }
3702 1.1 mrg
3703 1.1 mrg for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++)
3704 1.1 mrg if (!gfc_check_conformance (tmp->expr, x,
3705 1.1 mrg _("arguments 'a%d' and 'a%d' for "
3706 1.1 mrg "intrinsic '%s'"), m, n,
3707 1.1 mrg gfc_current_intrinsic))
3708 1.1 mrg return false;
3709 1.1 mrg }
3710 1.1 mrg
3711 1.1 mrg return true;
3712 1.1 mrg }
3713 1.1 mrg
3714 1.1 mrg
3715 1.1 mrg bool
3716 1.1 mrg gfc_check_min_max (gfc_actual_arglist *arg)
3717 1.1 mrg {
3718 1.1 mrg gfc_expr *x;
3719 1.1 mrg
3720 1.1 mrg if (!min_max_args (arg))
3721 1.1 mrg return false;
3722 1.1 mrg
3723 1.1 mrg x = arg->expr;
3724 1.1 mrg
3725 1.1 mrg if (x->ts.type == BT_CHARACTER)
3726 1.1 mrg {
3727 1.1 mrg if (!gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
3728 1.1 mrg "with CHARACTER argument at %L",
3729 1.1 mrg gfc_current_intrinsic, &x->where))
3730 1.1 mrg return false;
3731 1.1 mrg }
3732 1.1 mrg else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL)
3733 1.1 mrg {
3734 1.1 mrg gfc_error ("%<a1%> argument of %qs intrinsic at %L must be INTEGER, "
3735 1.1 mrg "REAL or CHARACTER", gfc_current_intrinsic, &x->where);
3736 1.1 mrg return false;
3737 1.1 mrg }
3738 1.1 mrg
3739 1.1 mrg return check_rest (x->ts.type, x->ts.kind, arg);
3740 1.1 mrg }
3741 1.1 mrg
3742 1.1 mrg
3743 1.1 mrg bool
3744 1.1 mrg gfc_check_min_max_integer (gfc_actual_arglist *arg)
3745 1.1 mrg {
3746 1.1 mrg return check_rest (BT_INTEGER, gfc_default_integer_kind, arg);
3747 1.1 mrg }
3748 1.1 mrg
3749 1.1 mrg
3750 1.1 mrg bool
3751 1.1 mrg gfc_check_min_max_real (gfc_actual_arglist *arg)
3752 1.1 mrg {
3753 1.1 mrg return check_rest (BT_REAL, gfc_default_real_kind, arg);
3754 1.1 mrg }
3755 1.1 mrg
3756 1.1 mrg
3757 1.1 mrg bool
3758 1.1 mrg gfc_check_min_max_double (gfc_actual_arglist *arg)
3759 1.1 mrg {
3760 1.1 mrg return check_rest (BT_REAL, gfc_default_double_kind, arg);
3761 1.1 mrg }
3762 1.1 mrg
3763 1.1 mrg
3764 1.1 mrg /* End of min/max family. */
3765 1.1 mrg
3766 1.1 mrg bool
3767 1.1 mrg gfc_check_malloc (gfc_expr *size)
3768 1.1 mrg {
3769 1.1 mrg if (!type_check (size, 0, BT_INTEGER))
3770 1.1 mrg return false;
3771 1.1 mrg
3772 1.1 mrg if (!scalar_check (size, 0))
3773 1.1 mrg return false;
3774 1.1 mrg
3775 1.1 mrg return true;
3776 1.1 mrg }
3777 1.1 mrg
3778 1.1 mrg
3779 1.1 mrg bool
3780 1.1 mrg gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
3781 1.1 mrg {
3782 1.1 mrg if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts))
3783 1.1 mrg {
3784 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3785 1.1 mrg "or LOGICAL", gfc_current_intrinsic_arg[0]->name,
3786 1.1 mrg gfc_current_intrinsic, &matrix_a->where);
3787 1.1 mrg return false;
3788 1.1 mrg }
3789 1.1 mrg
3790 1.1 mrg if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts))
3791 1.1 mrg {
3792 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be numeric "
3793 1.1 mrg "or LOGICAL", gfc_current_intrinsic_arg[1]->name,
3794 1.1 mrg gfc_current_intrinsic, &matrix_b->where);
3795 1.1 mrg return false;
3796 1.1 mrg }
3797 1.1 mrg
3798 1.1 mrg if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts))
3799 1.1 mrg || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL))
3800 1.1 mrg {
3801 1.1 mrg gfc_error ("Argument types of %qs intrinsic at %L must match (%s/%s)",
3802 1.1 mrg gfc_current_intrinsic, &matrix_a->where,
3803 1.1 mrg gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts));
3804 1.1 mrg return false;
3805 1.1 mrg }
3806 1.1 mrg
3807 1.1 mrg switch (matrix_a->rank)
3808 1.1 mrg {
3809 1.1 mrg case 1:
3810 1.1 mrg if (!rank_check (matrix_b, 1, 2))
3811 1.1 mrg return false;
3812 1.1 mrg /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */
3813 1.1 mrg if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0))
3814 1.1 mrg {
3815 1.1 mrg gfc_error ("Different shape on dimension 1 for arguments %qs "
3816 1.1 mrg "and %qs at %L for intrinsic matmul",
3817 1.1 mrg gfc_current_intrinsic_arg[0]->name,
3818 1.1 mrg gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
3819 1.1 mrg return false;
3820 1.1 mrg }
3821 1.1 mrg break;
3822 1.1 mrg
3823 1.1 mrg case 2:
3824 1.1 mrg if (matrix_b->rank != 2)
3825 1.1 mrg {
3826 1.1 mrg if (!rank_check (matrix_b, 1, 1))
3827 1.1 mrg return false;
3828 1.1 mrg }
3829 1.1 mrg /* matrix_b has rank 1 or 2 here. Common check for the cases
3830 1.1 mrg - matrix_a has shape (n,m) and matrix_b has shape (m, k)
3831 1.1 mrg - matrix_a has shape (n,m) and matrix_b has shape (m). */
3832 1.1 mrg if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0))
3833 1.1 mrg {
3834 1.1 mrg gfc_error ("Different shape on dimension 2 for argument %qs and "
3835 1.1 mrg "dimension 1 for argument %qs at %L for intrinsic "
3836 1.1 mrg "matmul", gfc_current_intrinsic_arg[0]->name,
3837 1.1 mrg gfc_current_intrinsic_arg[1]->name, &matrix_a->where);
3838 1.1 mrg return false;
3839 1.1 mrg }
3840 1.1 mrg break;
3841 1.1 mrg
3842 1.1 mrg default:
3843 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of rank "
3844 1.1 mrg "1 or 2", gfc_current_intrinsic_arg[0]->name,
3845 1.1 mrg gfc_current_intrinsic, &matrix_a->where);
3846 1.1 mrg return false;
3847 1.1 mrg }
3848 1.1 mrg
3849 1.1 mrg return true;
3850 1.1 mrg }
3851 1.1 mrg
3852 1.1 mrg
3853 1.1 mrg /* Whoever came up with this interface was probably on something.
3854 1.1 mrg The possibilities for the occupation of the second and third
3855 1.1 mrg parameters are:
3856 1.1 mrg
3857 1.1 mrg Arg #2 Arg #3
3858 1.1 mrg NULL NULL
3859 1.1 mrg DIM NULL
3860 1.1 mrg MASK NULL
3861 1.1 mrg NULL MASK minloc(array, mask=m)
3862 1.1 mrg DIM MASK
3863 1.1 mrg
3864 1.1 mrg I.e. in the case of minloc(array,mask), mask will be in the second
3865 1.1 mrg position of the argument list and we'll have to fix that up. Also,
3866 1.1 mrg add the BACK argument if that isn't present. */
3867 1.1 mrg
3868 1.1 mrg bool
3869 1.1 mrg gfc_check_minloc_maxloc (gfc_actual_arglist *ap)
3870 1.1 mrg {
3871 1.1 mrg gfc_expr *a, *m, *d, *k, *b;
3872 1.1 mrg
3873 1.1 mrg a = ap->expr;
3874 1.1 mrg if (!int_or_real_or_char_check_f2003 (a, 0) || !array_check (a, 0))
3875 1.1 mrg return false;
3876 1.1 mrg
3877 1.1 mrg d = ap->next->expr;
3878 1.1 mrg m = ap->next->next->expr;
3879 1.1 mrg k = ap->next->next->next->expr;
3880 1.1 mrg b = ap->next->next->next->next->expr;
3881 1.1 mrg
3882 1.1 mrg if (b)
3883 1.1 mrg {
3884 1.1 mrg if (!type_check (b, 4, BT_LOGICAL) || !scalar_check (b,4))
3885 1.1 mrg return false;
3886 1.1 mrg }
3887 1.1 mrg else
3888 1.1 mrg {
3889 1.1 mrg b = gfc_get_logical_expr (gfc_logical_4_kind, NULL, 0);
3890 1.1 mrg ap->next->next->next->next->expr = b;
3891 1.1 mrg ap->next->next->next->next->name = gfc_get_string ("back");
3892 1.1 mrg }
3893 1.1 mrg
3894 1.1 mrg if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
3895 1.1 mrg && ap->next->name == NULL)
3896 1.1 mrg {
3897 1.1 mrg m = d;
3898 1.1 mrg d = NULL;
3899 1.1 mrg ap->next->expr = NULL;
3900 1.1 mrg ap->next->next->expr = m;
3901 1.1 mrg }
3902 1.1 mrg
3903 1.1 mrg if (!dim_check (d, 1, false))
3904 1.1 mrg return false;
3905 1.1 mrg
3906 1.1 mrg if (!dim_rank_check (d, a, 0))
3907 1.1 mrg return false;
3908 1.1 mrg
3909 1.1 mrg if (m != NULL && !type_check (m, 2, BT_LOGICAL))
3910 1.1 mrg return false;
3911 1.1 mrg
3912 1.1 mrg if (m != NULL
3913 1.1 mrg && !gfc_check_conformance (a, m,
3914 1.1 mrg _("arguments '%s' and '%s' for intrinsic %s"),
3915 1.1 mrg gfc_current_intrinsic_arg[0]->name,
3916 1.1 mrg gfc_current_intrinsic_arg[2]->name,
3917 1.1 mrg gfc_current_intrinsic))
3918 1.1 mrg return false;
3919 1.1 mrg
3920 1.1 mrg if (!kind_check (k, 1, BT_INTEGER))
3921 1.1 mrg return false;
3922 1.1 mrg
3923 1.1 mrg return true;
3924 1.1 mrg }
3925 1.1 mrg
3926 1.1 mrg /* Check function for findloc. Mostly like gfc_check_minloc_maxloc
3927 1.1 mrg above, with the additional "value" argument. */
3928 1.1 mrg
3929 1.1 mrg bool
3930 1.1 mrg gfc_check_findloc (gfc_actual_arglist *ap)
3931 1.1 mrg {
3932 1.1 mrg gfc_expr *a, *v, *m, *d, *k, *b;
3933 1.1 mrg bool a1, v1;
3934 1.1 mrg
3935 1.1 mrg a = ap->expr;
3936 1.1 mrg if (!intrinsic_type_check (a, 0) || !array_check (a, 0))
3937 1.1 mrg return false;
3938 1.1 mrg
3939 1.1 mrg v = ap->next->expr;
3940 1.1 mrg if (!intrinsic_type_check (v, 1) || !scalar_check (v,1))
3941 1.1 mrg return false;
3942 1.1 mrg
3943 1.1 mrg /* Check if the type are both logical. */
3944 1.1 mrg a1 = a->ts.type == BT_LOGICAL;
3945 1.1 mrg v1 = v->ts.type == BT_LOGICAL;
3946 1.1 mrg if ((a1 && !v1) || (!a1 && v1))
3947 1.1 mrg goto incompat;
3948 1.1 mrg
3949 1.1 mrg /* Check if the type are both character. */
3950 1.1 mrg a1 = a->ts.type == BT_CHARACTER;
3951 1.1 mrg v1 = v->ts.type == BT_CHARACTER;
3952 1.1 mrg if ((a1 && !v1) || (!a1 && v1))
3953 1.1 mrg goto incompat;
3954 1.1 mrg
3955 1.1 mrg /* Check the kind of the characters argument match. */
3956 1.1 mrg if (a1 && v1 && a->ts.kind != v->ts.kind)
3957 1.1 mrg goto incompat;
3958 1.1 mrg
3959 1.1 mrg d = ap->next->next->expr;
3960 1.1 mrg m = ap->next->next->next->expr;
3961 1.1 mrg k = ap->next->next->next->next->expr;
3962 1.1 mrg b = ap->next->next->next->next->next->expr;
3963 1.1 mrg
3964 1.1 mrg if (b)
3965 1.1 mrg {
3966 1.1 mrg if (!type_check (b, 5, BT_LOGICAL) || !scalar_check (b,4))
3967 1.1 mrg return false;
3968 1.1 mrg }
3969 1.1 mrg else
3970 1.1 mrg {
3971 1.1 mrg b = gfc_get_logical_expr (gfc_logical_4_kind, NULL, 0);
3972 1.1 mrg ap->next->next->next->next->next->expr = b;
3973 1.1 mrg ap->next->next->next->next->next->name = gfc_get_string ("back");
3974 1.1 mrg }
3975 1.1 mrg
3976 1.1 mrg if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
3977 1.1 mrg && ap->next->name == NULL)
3978 1.1 mrg {
3979 1.1 mrg m = d;
3980 1.1 mrg d = NULL;
3981 1.1 mrg ap->next->next->expr = NULL;
3982 1.1 mrg ap->next->next->next->expr = m;
3983 1.1 mrg }
3984 1.1 mrg
3985 1.1 mrg if (!dim_check (d, 2, false))
3986 1.1 mrg return false;
3987 1.1 mrg
3988 1.1 mrg if (!dim_rank_check (d, a, 0))
3989 1.1 mrg return false;
3990 1.1 mrg
3991 1.1 mrg if (m != NULL && !type_check (m, 3, BT_LOGICAL))
3992 1.1 mrg return false;
3993 1.1 mrg
3994 1.1 mrg if (m != NULL
3995 1.1 mrg && !gfc_check_conformance (a, m,
3996 1.1 mrg _("arguments '%s' and '%s' for intrinsic %s"),
3997 1.1 mrg gfc_current_intrinsic_arg[0]->name,
3998 1.1 mrg gfc_current_intrinsic_arg[3]->name,
3999 1.1 mrg gfc_current_intrinsic))
4000 1.1 mrg return false;
4001 1.1 mrg
4002 1.1 mrg if (!kind_check (k, 1, BT_INTEGER))
4003 1.1 mrg return false;
4004 1.1 mrg
4005 1.1 mrg return true;
4006 1.1 mrg
4007 1.1 mrg incompat:
4008 1.1 mrg gfc_error ("Argument %qs of %qs intrinsic at %L must be in type "
4009 1.1 mrg "conformance to argument %qs at %L",
4010 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4011 1.1 mrg gfc_current_intrinsic, &a->where,
4012 1.1 mrg gfc_current_intrinsic_arg[1]->name, &v->where);
4013 1.1 mrg return false;
4014 1.1 mrg }
4015 1.1 mrg
4016 1.1 mrg
4017 1.1 mrg /* Similar to minloc/maxloc, the argument list might need to be
4018 1.1 mrg reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The
4019 1.1 mrg difference is that MINLOC/MAXLOC take an additional KIND argument.
4020 1.1 mrg The possibilities are:
4021 1.1 mrg
4022 1.1 mrg Arg #2 Arg #3
4023 1.1 mrg NULL NULL
4024 1.1 mrg DIM NULL
4025 1.1 mrg MASK NULL
4026 1.1 mrg NULL MASK minval(array, mask=m)
4027 1.1 mrg DIM MASK
4028 1.1 mrg
4029 1.1 mrg I.e. in the case of minval(array,mask), mask will be in the second
4030 1.1 mrg position of the argument list and we'll have to fix that up. */
4031 1.1 mrg
4032 1.1 mrg static bool
4033 1.1 mrg check_reduction (gfc_actual_arglist *ap)
4034 1.1 mrg {
4035 1.1 mrg gfc_expr *a, *m, *d;
4036 1.1 mrg
4037 1.1 mrg a = ap->expr;
4038 1.1 mrg d = ap->next->expr;
4039 1.1 mrg m = ap->next->next->expr;
4040 1.1 mrg
4041 1.1 mrg if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL
4042 1.1 mrg && ap->next->name == NULL)
4043 1.1 mrg {
4044 1.1 mrg m = d;
4045 1.1 mrg d = NULL;
4046 1.1 mrg ap->next->expr = NULL;
4047 1.1 mrg ap->next->next->expr = m;
4048 1.1 mrg }
4049 1.1 mrg
4050 1.1 mrg if (!dim_check (d, 1, false))
4051 1.1 mrg return false;
4052 1.1 mrg
4053 1.1 mrg if (!dim_rank_check (d, a, 0))
4054 1.1 mrg return false;
4055 1.1 mrg
4056 1.1 mrg if (m != NULL && !type_check (m, 2, BT_LOGICAL))
4057 1.1 mrg return false;
4058 1.1 mrg
4059 1.1 mrg if (m != NULL
4060 1.1 mrg && !gfc_check_conformance (a, m,
4061 1.1 mrg _("arguments '%s' and '%s' for intrinsic %s"),
4062 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4063 1.1 mrg gfc_current_intrinsic_arg[2]->name,
4064 1.1 mrg gfc_current_intrinsic))
4065 1.1 mrg return false;
4066 1.1 mrg
4067 1.1 mrg return true;
4068 1.1 mrg }
4069 1.1 mrg
4070 1.1 mrg
4071 1.1 mrg bool
4072 1.1 mrg gfc_check_minval_maxval (gfc_actual_arglist *ap)
4073 1.1 mrg {
4074 1.1 mrg if (!int_or_real_or_char_check_f2003 (ap->expr, 0)
4075 1.1 mrg || !array_check (ap->expr, 0))
4076 1.1 mrg return false;
4077 1.1 mrg
4078 1.1 mrg return check_reduction (ap);
4079 1.1 mrg }
4080 1.1 mrg
4081 1.1 mrg
4082 1.1 mrg bool
4083 1.1 mrg gfc_check_product_sum (gfc_actual_arglist *ap)
4084 1.1 mrg {
4085 1.1 mrg if (!numeric_check (ap->expr, 0)
4086 1.1 mrg || !array_check (ap->expr, 0))
4087 1.1 mrg return false;
4088 1.1 mrg
4089 1.1 mrg return check_reduction (ap);
4090 1.1 mrg }
4091 1.1 mrg
4092 1.1 mrg
4093 1.1 mrg /* For IANY, IALL and IPARITY. */
4094 1.1 mrg
4095 1.1 mrg bool
4096 1.1 mrg gfc_check_mask (gfc_expr *i, gfc_expr *kind)
4097 1.1 mrg {
4098 1.1 mrg int k;
4099 1.1 mrg
4100 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
4101 1.1 mrg return false;
4102 1.1 mrg
4103 1.1 mrg if (!nonnegative_check ("I", i))
4104 1.1 mrg return false;
4105 1.1 mrg
4106 1.1 mrg if (!kind_check (kind, 1, BT_INTEGER))
4107 1.1 mrg return false;
4108 1.1 mrg
4109 1.1 mrg if (kind)
4110 1.1 mrg gfc_extract_int (kind, &k);
4111 1.1 mrg else
4112 1.1 mrg k = gfc_default_integer_kind;
4113 1.1 mrg
4114 1.1 mrg if (!less_than_bitsizekind ("I", i, k))
4115 1.1 mrg return false;
4116 1.1 mrg
4117 1.1 mrg return true;
4118 1.1 mrg }
4119 1.1 mrg
4120 1.1 mrg
4121 1.1 mrg bool
4122 1.1 mrg gfc_check_transf_bit_intrins (gfc_actual_arglist *ap)
4123 1.1 mrg {
4124 1.1 mrg if (ap->expr->ts.type != BT_INTEGER)
4125 1.1 mrg {
4126 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
4127 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4128 1.1 mrg gfc_current_intrinsic, &ap->expr->where);
4129 1.1 mrg return false;
4130 1.1 mrg }
4131 1.1 mrg
4132 1.1 mrg if (!array_check (ap->expr, 0))
4133 1.1 mrg return false;
4134 1.1 mrg
4135 1.1 mrg return check_reduction (ap);
4136 1.1 mrg }
4137 1.1 mrg
4138 1.1 mrg
4139 1.1 mrg bool
4140 1.1 mrg gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask)
4141 1.1 mrg {
4142 1.1 mrg if (gfc_invalid_null_arg (tsource))
4143 1.1 mrg return false;
4144 1.1 mrg
4145 1.1 mrg if (gfc_invalid_null_arg (fsource))
4146 1.1 mrg return false;
4147 1.1 mrg
4148 1.1 mrg if (!same_type_check (tsource, 0, fsource, 1))
4149 1.1 mrg return false;
4150 1.1 mrg
4151 1.1 mrg if (!type_check (mask, 2, BT_LOGICAL))
4152 1.1 mrg return false;
4153 1.1 mrg
4154 1.1 mrg if (tsource->ts.type == BT_CHARACTER)
4155 1.1 mrg return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic");
4156 1.1 mrg
4157 1.1 mrg return true;
4158 1.1 mrg }
4159 1.1 mrg
4160 1.1 mrg
4161 1.1 mrg bool
4162 1.1 mrg gfc_check_merge_bits (gfc_expr *i, gfc_expr *j, gfc_expr *mask)
4163 1.1 mrg {
4164 1.1 mrg /* i and j cannot both be BOZ literal constants. */
4165 1.1 mrg if (!boz_args_check (i, j))
4166 1.1 mrg return false;
4167 1.1 mrg
4168 1.1 mrg /* If i is BOZ and j is integer, convert i to type of j. */
4169 1.1 mrg if (i->ts.type == BT_BOZ && j->ts.type == BT_INTEGER
4170 1.1 mrg && !gfc_boz2int (i, j->ts.kind))
4171 1.1 mrg return false;
4172 1.1 mrg
4173 1.1 mrg /* If j is BOZ and i is integer, convert j to type of i. */
4174 1.1 mrg if (j->ts.type == BT_BOZ && i->ts.type == BT_INTEGER
4175 1.1 mrg && !gfc_boz2int (j, i->ts.kind))
4176 1.1 mrg return false;
4177 1.1 mrg
4178 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
4179 1.1 mrg return false;
4180 1.1 mrg
4181 1.1 mrg if (!type_check (j, 1, BT_INTEGER))
4182 1.1 mrg return false;
4183 1.1 mrg
4184 1.1 mrg if (!same_type_check (i, 0, j, 1))
4185 1.1 mrg return false;
4186 1.1 mrg
4187 1.1 mrg if (mask->ts.type == BT_BOZ && !gfc_boz2int(mask, i->ts.kind))
4188 1.1 mrg return false;
4189 1.1 mrg
4190 1.1 mrg if (!type_check (mask, 2, BT_INTEGER))
4191 1.1 mrg return false;
4192 1.1 mrg
4193 1.1 mrg if (!same_type_check (i, 0, mask, 2))
4194 1.1 mrg return false;
4195 1.1 mrg
4196 1.1 mrg return true;
4197 1.1 mrg }
4198 1.1 mrg
4199 1.1 mrg
4200 1.1 mrg bool
4201 1.1 mrg gfc_check_move_alloc (gfc_expr *from, gfc_expr *to)
4202 1.1 mrg {
4203 1.1 mrg if (!variable_check (from, 0, false))
4204 1.1 mrg return false;
4205 1.1 mrg if (!allocatable_check (from, 0))
4206 1.1 mrg return false;
4207 1.1 mrg if (gfc_is_coindexed (from))
4208 1.1 mrg {
4209 1.1 mrg gfc_error ("The FROM argument to MOVE_ALLOC at %L shall not be "
4210 1.1 mrg "coindexed", &from->where);
4211 1.1 mrg return false;
4212 1.1 mrg }
4213 1.1 mrg
4214 1.1 mrg if (!variable_check (to, 1, false))
4215 1.1 mrg return false;
4216 1.1 mrg if (!allocatable_check (to, 1))
4217 1.1 mrg return false;
4218 1.1 mrg if (gfc_is_coindexed (to))
4219 1.1 mrg {
4220 1.1 mrg gfc_error ("The TO argument to MOVE_ALLOC at %L shall not be "
4221 1.1 mrg "coindexed", &to->where);
4222 1.1 mrg return false;
4223 1.1 mrg }
4224 1.1 mrg
4225 1.1 mrg if (from->ts.type == BT_CLASS && to->ts.type == BT_DERIVED)
4226 1.1 mrg {
4227 1.1 mrg gfc_error ("The TO arguments in MOVE_ALLOC at %L must be "
4228 1.1 mrg "polymorphic if FROM is polymorphic",
4229 1.1 mrg &to->where);
4230 1.1 mrg return false;
4231 1.1 mrg }
4232 1.1 mrg
4233 1.1 mrg if (!same_type_check (to, 1, from, 0))
4234 1.1 mrg return false;
4235 1.1 mrg
4236 1.1 mrg if (to->rank != from->rank)
4237 1.1 mrg {
4238 1.1 mrg gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
4239 1.1 mrg "must have the same rank %d/%d", &to->where, from->rank,
4240 1.1 mrg to->rank);
4241 1.1 mrg return false;
4242 1.1 mrg }
4243 1.1 mrg
4244 1.1 mrg /* IR F08/0040; cf. 12-006A. */
4245 1.1 mrg if (gfc_get_corank (to) != gfc_get_corank (from))
4246 1.1 mrg {
4247 1.1 mrg gfc_error ("The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L "
4248 1.1 mrg "must have the same corank %d/%d", &to->where,
4249 1.1 mrg gfc_get_corank (from), gfc_get_corank (to));
4250 1.1 mrg return false;
4251 1.1 mrg }
4252 1.1 mrg
4253 1.1 mrg /* This is based losely on F2003 12.4.1.7. It is intended to prevent
4254 1.1 mrg the likes of to = sym->cmp1->cmp2 and from = sym->cmp1, where cmp1
4255 1.1 mrg and cmp2 are allocatable. After the allocation is transferred,
4256 1.1 mrg the 'to' chain is broken by the nullification of the 'from'. A bit
4257 1.1 mrg of reflection reveals that this can only occur for derived types
4258 1.1 mrg with recursive allocatable components. */
4259 1.1 mrg if (to->expr_type == EXPR_VARIABLE && from->expr_type == EXPR_VARIABLE
4260 1.1 mrg && !strcmp (to->symtree->n.sym->name, from->symtree->n.sym->name))
4261 1.1 mrg {
4262 1.1 mrg gfc_ref *to_ref, *from_ref;
4263 1.1 mrg to_ref = to->ref;
4264 1.1 mrg from_ref = from->ref;
4265 1.1 mrg bool aliasing = true;
4266 1.1 mrg
4267 1.1 mrg for (; from_ref && to_ref;
4268 1.1 mrg from_ref = from_ref->next, to_ref = to_ref->next)
4269 1.1 mrg {
4270 1.1 mrg if (to_ref->type != from->ref->type)
4271 1.1 mrg aliasing = false;
4272 1.1 mrg else if (to_ref->type == REF_ARRAY
4273 1.1 mrg && to_ref->u.ar.type != AR_FULL
4274 1.1 mrg && from_ref->u.ar.type != AR_FULL)
4275 1.1 mrg /* Play safe; assume sections and elements are different. */
4276 1.1 mrg aliasing = false;
4277 1.1 mrg else if (to_ref->type == REF_COMPONENT
4278 1.1 mrg && to_ref->u.c.component != from_ref->u.c.component)
4279 1.1 mrg aliasing = false;
4280 1.1 mrg
4281 1.1 mrg if (!aliasing)
4282 1.1 mrg break;
4283 1.1 mrg }
4284 1.1 mrg
4285 1.1 mrg if (aliasing)
4286 1.1 mrg {
4287 1.1 mrg gfc_error ("The FROM and TO arguments at %L violate aliasing "
4288 1.1 mrg "restrictions (F2003 12.4.1.7)", &to->where);
4289 1.1 mrg return false;
4290 1.1 mrg }
4291 1.1 mrg }
4292 1.1 mrg
4293 1.1 mrg /* CLASS arguments: Make sure the vtab of from is present. */
4294 1.1 mrg if (to->ts.type == BT_CLASS && !UNLIMITED_POLY (from))
4295 1.1 mrg gfc_find_vtab (&from->ts);
4296 1.1 mrg
4297 1.1 mrg return true;
4298 1.1 mrg }
4299 1.1 mrg
4300 1.1 mrg
4301 1.1 mrg bool
4302 1.1 mrg gfc_check_nearest (gfc_expr *x, gfc_expr *s)
4303 1.1 mrg {
4304 1.1 mrg if (!type_check (x, 0, BT_REAL))
4305 1.1 mrg return false;
4306 1.1 mrg
4307 1.1 mrg if (!type_check (s, 1, BT_REAL))
4308 1.1 mrg return false;
4309 1.1 mrg
4310 1.1 mrg if (s->expr_type == EXPR_CONSTANT)
4311 1.1 mrg {
4312 1.1 mrg if (mpfr_sgn (s->value.real) == 0)
4313 1.1 mrg {
4314 1.1 mrg gfc_error ("Argument %<S%> of NEAREST at %L shall not be zero",
4315 1.1 mrg &s->where);
4316 1.1 mrg return false;
4317 1.1 mrg }
4318 1.1 mrg }
4319 1.1 mrg
4320 1.1 mrg return true;
4321 1.1 mrg }
4322 1.1 mrg
4323 1.1 mrg
4324 1.1 mrg bool
4325 1.1 mrg gfc_check_new_line (gfc_expr *a)
4326 1.1 mrg {
4327 1.1 mrg if (!type_check (a, 0, BT_CHARACTER))
4328 1.1 mrg return false;
4329 1.1 mrg
4330 1.1 mrg return true;
4331 1.1 mrg }
4332 1.1 mrg
4333 1.1 mrg
4334 1.1 mrg bool
4335 1.1 mrg gfc_check_norm2 (gfc_expr *array, gfc_expr *dim)
4336 1.1 mrg {
4337 1.1 mrg if (!type_check (array, 0, BT_REAL))
4338 1.1 mrg return false;
4339 1.1 mrg
4340 1.1 mrg if (!array_check (array, 0))
4341 1.1 mrg return false;
4342 1.1 mrg
4343 1.1 mrg if (!dim_check (dim, 1, false))
4344 1.1 mrg return false;
4345 1.1 mrg
4346 1.1 mrg if (!dim_rank_check (dim, array, false))
4347 1.1 mrg return false;
4348 1.1 mrg
4349 1.1 mrg return true;
4350 1.1 mrg }
4351 1.1 mrg
4352 1.1 mrg bool
4353 1.1 mrg gfc_check_null (gfc_expr *mold)
4354 1.1 mrg {
4355 1.1 mrg symbol_attribute attr;
4356 1.1 mrg
4357 1.1 mrg if (mold == NULL)
4358 1.1 mrg return true;
4359 1.1 mrg
4360 1.1 mrg if (!variable_check (mold, 0, true))
4361 1.1 mrg return false;
4362 1.1 mrg
4363 1.1 mrg attr = gfc_variable_attr (mold, NULL);
4364 1.1 mrg
4365 1.1 mrg if (!attr.pointer && !attr.proc_pointer && !attr.allocatable)
4366 1.1 mrg {
4367 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a POINTER, "
4368 1.1 mrg "ALLOCATABLE or procedure pointer",
4369 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4370 1.1 mrg gfc_current_intrinsic, &mold->where);
4371 1.1 mrg return false;
4372 1.1 mrg }
4373 1.1 mrg
4374 1.1 mrg if (attr.allocatable
4375 1.1 mrg && !gfc_notify_std (GFC_STD_F2003, "NULL intrinsic with "
4376 1.1 mrg "allocatable MOLD at %L", &mold->where))
4377 1.1 mrg return false;
4378 1.1 mrg
4379 1.1 mrg /* F2008, C1242. */
4380 1.1 mrg if (gfc_is_coindexed (mold))
4381 1.1 mrg {
4382 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
4383 1.1 mrg "coindexed", gfc_current_intrinsic_arg[0]->name,
4384 1.1 mrg gfc_current_intrinsic, &mold->where);
4385 1.1 mrg return false;
4386 1.1 mrg }
4387 1.1 mrg
4388 1.1 mrg return true;
4389 1.1 mrg }
4390 1.1 mrg
4391 1.1 mrg
4392 1.1 mrg bool
4393 1.1 mrg gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector)
4394 1.1 mrg {
4395 1.1 mrg if (!array_check (array, 0))
4396 1.1 mrg return false;
4397 1.1 mrg
4398 1.1 mrg if (!type_check (mask, 1, BT_LOGICAL))
4399 1.1 mrg return false;
4400 1.1 mrg
4401 1.1 mrg if (!gfc_check_conformance (array, mask,
4402 1.1 mrg _("arguments '%s' and '%s' for intrinsic '%s'"),
4403 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4404 1.1 mrg gfc_current_intrinsic_arg[1]->name,
4405 1.1 mrg gfc_current_intrinsic))
4406 1.1 mrg return false;
4407 1.1 mrg
4408 1.1 mrg if (vector != NULL)
4409 1.1 mrg {
4410 1.1 mrg mpz_t array_size, vector_size;
4411 1.1 mrg bool have_array_size, have_vector_size;
4412 1.1 mrg
4413 1.1 mrg if (!same_type_check (array, 0, vector, 2))
4414 1.1 mrg return false;
4415 1.1 mrg
4416 1.1 mrg if (!rank_check (vector, 2, 1))
4417 1.1 mrg return false;
4418 1.1 mrg
4419 1.1 mrg /* VECTOR requires at least as many elements as MASK
4420 1.1 mrg has .TRUE. values. */
4421 1.1 mrg have_array_size = gfc_array_size(array, &array_size);
4422 1.1 mrg have_vector_size = gfc_array_size(vector, &vector_size);
4423 1.1 mrg
4424 1.1 mrg if (have_vector_size
4425 1.1 mrg && (mask->expr_type == EXPR_ARRAY
4426 1.1 mrg || (mask->expr_type == EXPR_CONSTANT
4427 1.1 mrg && have_array_size)))
4428 1.1 mrg {
4429 1.1 mrg int mask_true_values = 0;
4430 1.1 mrg
4431 1.1 mrg if (mask->expr_type == EXPR_ARRAY)
4432 1.1 mrg {
4433 1.1 mrg gfc_constructor *mask_ctor;
4434 1.1 mrg mask_ctor = gfc_constructor_first (mask->value.constructor);
4435 1.1 mrg while (mask_ctor)
4436 1.1 mrg {
4437 1.1 mrg if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
4438 1.1 mrg {
4439 1.1 mrg mask_true_values = 0;
4440 1.1 mrg break;
4441 1.1 mrg }
4442 1.1 mrg
4443 1.1 mrg if (mask_ctor->expr->value.logical)
4444 1.1 mrg mask_true_values++;
4445 1.1 mrg
4446 1.1 mrg mask_ctor = gfc_constructor_next (mask_ctor);
4447 1.1 mrg }
4448 1.1 mrg }
4449 1.1 mrg else if (mask->expr_type == EXPR_CONSTANT && mask->value.logical)
4450 1.1 mrg mask_true_values = mpz_get_si (array_size);
4451 1.1 mrg
4452 1.1 mrg if (mpz_get_si (vector_size) < mask_true_values)
4453 1.1 mrg {
4454 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must "
4455 1.1 mrg "provide at least as many elements as there "
4456 1.1 mrg "are .TRUE. values in %qs (%ld/%d)",
4457 1.1 mrg gfc_current_intrinsic_arg[2]->name,
4458 1.1 mrg gfc_current_intrinsic, &vector->where,
4459 1.1 mrg gfc_current_intrinsic_arg[1]->name,
4460 1.1 mrg mpz_get_si (vector_size), mask_true_values);
4461 1.1 mrg return false;
4462 1.1 mrg }
4463 1.1 mrg }
4464 1.1 mrg
4465 1.1 mrg if (have_array_size)
4466 1.1 mrg mpz_clear (array_size);
4467 1.1 mrg if (have_vector_size)
4468 1.1 mrg mpz_clear (vector_size);
4469 1.1 mrg }
4470 1.1 mrg
4471 1.1 mrg return true;
4472 1.1 mrg }
4473 1.1 mrg
4474 1.1 mrg
4475 1.1 mrg bool
4476 1.1 mrg gfc_check_parity (gfc_expr *mask, gfc_expr *dim)
4477 1.1 mrg {
4478 1.1 mrg if (!type_check (mask, 0, BT_LOGICAL))
4479 1.1 mrg return false;
4480 1.1 mrg
4481 1.1 mrg if (!array_check (mask, 0))
4482 1.1 mrg return false;
4483 1.1 mrg
4484 1.1 mrg if (!dim_check (dim, 1, false))
4485 1.1 mrg return false;
4486 1.1 mrg
4487 1.1 mrg if (!dim_rank_check (dim, mask, false))
4488 1.1 mrg return false;
4489 1.1 mrg
4490 1.1 mrg return true;
4491 1.1 mrg }
4492 1.1 mrg
4493 1.1 mrg
4494 1.1 mrg bool
4495 1.1 mrg gfc_check_precision (gfc_expr *x)
4496 1.1 mrg {
4497 1.1 mrg if (!real_or_complex_check (x, 0))
4498 1.1 mrg return false;
4499 1.1 mrg
4500 1.1 mrg return true;
4501 1.1 mrg }
4502 1.1 mrg
4503 1.1 mrg
4504 1.1 mrg bool
4505 1.1 mrg gfc_check_present (gfc_expr *a)
4506 1.1 mrg {
4507 1.1 mrg gfc_symbol *sym;
4508 1.1 mrg
4509 1.1 mrg if (!variable_check (a, 0, true))
4510 1.1 mrg return false;
4511 1.1 mrg
4512 1.1 mrg sym = a->symtree->n.sym;
4513 1.1 mrg if (!sym->attr.dummy)
4514 1.1 mrg {
4515 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of a "
4516 1.1 mrg "dummy variable", gfc_current_intrinsic_arg[0]->name,
4517 1.1 mrg gfc_current_intrinsic, &a->where);
4518 1.1 mrg return false;
4519 1.1 mrg }
4520 1.1 mrg
4521 1.1 mrg /* For CLASS, the optional attribute might be set at either location. */
4522 1.1 mrg if ((sym->ts.type != BT_CLASS || !CLASS_DATA (sym)->attr.optional)
4523 1.1 mrg && !sym->attr.optional)
4524 1.1 mrg {
4525 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of "
4526 1.1 mrg "an OPTIONAL dummy variable",
4527 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4528 1.1 mrg &a->where);
4529 1.1 mrg return false;
4530 1.1 mrg }
4531 1.1 mrg
4532 1.1 mrg /* 13.14.82 PRESENT(A)
4533 1.1 mrg ......
4534 1.1 mrg Argument. A shall be the name of an optional dummy argument that is
4535 1.1 mrg accessible in the subprogram in which the PRESENT function reference
4536 1.1 mrg appears... */
4537 1.1 mrg
4538 1.1 mrg if (a->ref != NULL
4539 1.1 mrg && !(a->ref->next == NULL && a->ref->type == REF_ARRAY
4540 1.1 mrg && (a->ref->u.ar.type == AR_FULL
4541 1.1 mrg || (a->ref->u.ar.type == AR_ELEMENT
4542 1.1 mrg && a->ref->u.ar.as->rank == 0))))
4543 1.1 mrg {
4544 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must not be a "
4545 1.1 mrg "subobject of %qs", gfc_current_intrinsic_arg[0]->name,
4546 1.1 mrg gfc_current_intrinsic, &a->where, sym->name);
4547 1.1 mrg return false;
4548 1.1 mrg }
4549 1.1 mrg
4550 1.1 mrg return true;
4551 1.1 mrg }
4552 1.1 mrg
4553 1.1 mrg
4554 1.1 mrg bool
4555 1.1 mrg gfc_check_radix (gfc_expr *x)
4556 1.1 mrg {
4557 1.1 mrg if (!int_or_real_check (x, 0))
4558 1.1 mrg return false;
4559 1.1 mrg
4560 1.1 mrg return true;
4561 1.1 mrg }
4562 1.1 mrg
4563 1.1 mrg
4564 1.1 mrg bool
4565 1.1 mrg gfc_check_range (gfc_expr *x)
4566 1.1 mrg {
4567 1.1 mrg if (!numeric_check (x, 0))
4568 1.1 mrg return false;
4569 1.1 mrg
4570 1.1 mrg return true;
4571 1.1 mrg }
4572 1.1 mrg
4573 1.1 mrg
4574 1.1 mrg bool
4575 1.1 mrg gfc_check_rank (gfc_expr *a)
4576 1.1 mrg {
4577 1.1 mrg /* Any data object is allowed; a "data object" is a "constant (4.1.3),
4578 1.1 mrg variable (6), or subobject of a constant (2.4.3.2.3)" (F2008, 1.3.45). */
4579 1.1 mrg
4580 1.1 mrg bool is_variable = true;
4581 1.1 mrg
4582 1.1 mrg /* Functions returning pointers are regarded as variable, cf. F2008, R602. */
4583 1.1 mrg if (a->expr_type == EXPR_FUNCTION)
4584 1.1 mrg is_variable = a->value.function.esym
4585 1.1 mrg ? a->value.function.esym->result->attr.pointer
4586 1.1 mrg : a->symtree->n.sym->result->attr.pointer;
4587 1.1 mrg
4588 1.1 mrg if (a->expr_type == EXPR_OP
4589 1.1 mrg || a->expr_type == EXPR_NULL
4590 1.1 mrg || a->expr_type == EXPR_COMPCALL
4591 1.1 mrg || a->expr_type == EXPR_PPC
4592 1.1 mrg || a->ts.type == BT_PROCEDURE
4593 1.1 mrg || !is_variable)
4594 1.1 mrg {
4595 1.1 mrg gfc_error ("The argument of the RANK intrinsic at %L must be a data "
4596 1.1 mrg "object", &a->where);
4597 1.1 mrg return false;
4598 1.1 mrg }
4599 1.1 mrg
4600 1.1 mrg return true;
4601 1.1 mrg }
4602 1.1 mrg
4603 1.1 mrg
4604 1.1 mrg bool
4605 1.1 mrg gfc_check_real (gfc_expr *a, gfc_expr *kind)
4606 1.1 mrg {
4607 1.1 mrg if (!kind_check (kind, 1, BT_REAL))
4608 1.1 mrg return false;
4609 1.1 mrg
4610 1.1 mrg /* BOZ is dealt with in gfc_simplify_real. */
4611 1.1 mrg if (a->ts.type == BT_BOZ)
4612 1.1 mrg return true;
4613 1.1 mrg
4614 1.1 mrg if (!numeric_check (a, 0))
4615 1.1 mrg return false;
4616 1.1 mrg
4617 1.1 mrg return true;
4618 1.1 mrg }
4619 1.1 mrg
4620 1.1 mrg
4621 1.1 mrg bool
4622 1.1 mrg gfc_check_rename (gfc_expr *path1, gfc_expr *path2)
4623 1.1 mrg {
4624 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
4625 1.1 mrg return false;
4626 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
4627 1.1 mrg return false;
4628 1.1 mrg
4629 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
4630 1.1 mrg return false;
4631 1.1 mrg if (!kind_value_check (path2, 1, gfc_default_character_kind))
4632 1.1 mrg return false;
4633 1.1 mrg
4634 1.1 mrg return true;
4635 1.1 mrg }
4636 1.1 mrg
4637 1.1 mrg
4638 1.1 mrg bool
4639 1.1 mrg gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status)
4640 1.1 mrg {
4641 1.1 mrg if (!type_check (path1, 0, BT_CHARACTER))
4642 1.1 mrg return false;
4643 1.1 mrg if (!kind_value_check (path1, 0, gfc_default_character_kind))
4644 1.1 mrg return false;
4645 1.1 mrg
4646 1.1 mrg if (!type_check (path2, 1, BT_CHARACTER))
4647 1.1 mrg return false;
4648 1.1 mrg if (!kind_value_check (path2, 1, gfc_default_character_kind))
4649 1.1 mrg return false;
4650 1.1 mrg
4651 1.1 mrg if (status == NULL)
4652 1.1 mrg return true;
4653 1.1 mrg
4654 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
4655 1.1 mrg return false;
4656 1.1 mrg
4657 1.1 mrg if (!scalar_check (status, 2))
4658 1.1 mrg return false;
4659 1.1 mrg
4660 1.1 mrg return true;
4661 1.1 mrg }
4662 1.1 mrg
4663 1.1 mrg
4664 1.1 mrg bool
4665 1.1 mrg gfc_check_repeat (gfc_expr *x, gfc_expr *y)
4666 1.1 mrg {
4667 1.1 mrg if (!type_check (x, 0, BT_CHARACTER))
4668 1.1 mrg return false;
4669 1.1 mrg
4670 1.1 mrg if (!scalar_check (x, 0))
4671 1.1 mrg return false;
4672 1.1 mrg
4673 1.1 mrg if (!type_check (y, 0, BT_INTEGER))
4674 1.1 mrg return false;
4675 1.1 mrg
4676 1.1 mrg if (!scalar_check (y, 1))
4677 1.1 mrg return false;
4678 1.1 mrg
4679 1.1 mrg return true;
4680 1.1 mrg }
4681 1.1 mrg
4682 1.1 mrg
4683 1.1 mrg bool
4684 1.1 mrg gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
4685 1.1 mrg gfc_expr *pad, gfc_expr *order)
4686 1.1 mrg {
4687 1.1 mrg mpz_t size;
4688 1.1 mrg mpz_t nelems;
4689 1.1 mrg int shape_size;
4690 1.1 mrg bool shape_is_const;
4691 1.1 mrg
4692 1.1 mrg if (!array_check (source, 0))
4693 1.1 mrg return false;
4694 1.1 mrg
4695 1.1 mrg if (!rank_check (shape, 1, 1))
4696 1.1 mrg return false;
4697 1.1 mrg
4698 1.1 mrg if (!type_check (shape, 1, BT_INTEGER))
4699 1.1 mrg return false;
4700 1.1 mrg
4701 1.1 mrg if (!gfc_array_size (shape, &size))
4702 1.1 mrg {
4703 1.1 mrg gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L must be an "
4704 1.1 mrg "array of constant size", &shape->where);
4705 1.1 mrg return false;
4706 1.1 mrg }
4707 1.1 mrg
4708 1.1 mrg shape_size = mpz_get_ui (size);
4709 1.1 mrg mpz_clear (size);
4710 1.1 mrg
4711 1.1 mrg if (shape_size <= 0)
4712 1.1 mrg {
4713 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L is empty",
4714 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4715 1.1 mrg &shape->where);
4716 1.1 mrg return false;
4717 1.1 mrg }
4718 1.1 mrg else if (shape_size > GFC_MAX_DIMENSIONS)
4719 1.1 mrg {
4720 1.1 mrg gfc_error ("%<shape%> argument of %<reshape%> intrinsic at %L has more "
4721 1.1 mrg "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
4722 1.1 mrg return false;
4723 1.1 mrg }
4724 1.1 mrg
4725 1.1 mrg gfc_simplify_expr (shape, 0);
4726 1.1 mrg shape_is_const = gfc_is_constant_expr (shape);
4727 1.1 mrg
4728 1.1 mrg if (shape->expr_type == EXPR_ARRAY && shape_is_const)
4729 1.1 mrg {
4730 1.1 mrg gfc_expr *e;
4731 1.1 mrg int i, extent;
4732 1.1 mrg for (i = 0; i < shape_size; ++i)
4733 1.1 mrg {
4734 1.1 mrg e = gfc_constructor_lookup_expr (shape->value.constructor, i);
4735 1.1 mrg if (e->expr_type != EXPR_CONSTANT)
4736 1.1 mrg continue;
4737 1.1 mrg
4738 1.1 mrg gfc_extract_int (e, &extent);
4739 1.1 mrg if (extent < 0)
4740 1.1 mrg {
4741 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L has "
4742 1.1 mrg "negative element (%d)",
4743 1.1 mrg gfc_current_intrinsic_arg[1]->name,
4744 1.1 mrg gfc_current_intrinsic, &shape->where, extent);
4745 1.1 mrg return false;
4746 1.1 mrg }
4747 1.1 mrg }
4748 1.1 mrg }
4749 1.1 mrg
4750 1.1 mrg if (pad != NULL)
4751 1.1 mrg {
4752 1.1 mrg if (!same_type_check (source, 0, pad, 2))
4753 1.1 mrg return false;
4754 1.1 mrg
4755 1.1 mrg if (!array_check (pad, 2))
4756 1.1 mrg return false;
4757 1.1 mrg }
4758 1.1 mrg
4759 1.1 mrg if (order != NULL)
4760 1.1 mrg {
4761 1.1 mrg if (!array_check (order, 3))
4762 1.1 mrg return false;
4763 1.1 mrg
4764 1.1 mrg if (!type_check (order, 3, BT_INTEGER))
4765 1.1 mrg return false;
4766 1.1 mrg
4767 1.1 mrg if (order->expr_type == EXPR_ARRAY && gfc_is_constant_expr (order))
4768 1.1 mrg {
4769 1.1 mrg int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
4770 1.1 mrg gfc_expr *e;
4771 1.1 mrg
4772 1.1 mrg for (i = 0; i < GFC_MAX_DIMENSIONS; ++i)
4773 1.1 mrg perm[i] = 0;
4774 1.1 mrg
4775 1.1 mrg gfc_array_size (order, &size);
4776 1.1 mrg order_size = mpz_get_ui (size);
4777 1.1 mrg mpz_clear (size);
4778 1.1 mrg
4779 1.1 mrg if (order_size != shape_size)
4780 1.1 mrg {
4781 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4782 1.1 mrg "has wrong number of elements (%d/%d)",
4783 1.1 mrg gfc_current_intrinsic_arg[3]->name,
4784 1.1 mrg gfc_current_intrinsic, &order->where,
4785 1.1 mrg order_size, shape_size);
4786 1.1 mrg return false;
4787 1.1 mrg }
4788 1.1 mrg
4789 1.1 mrg for (i = 1; i <= order_size; ++i)
4790 1.1 mrg {
4791 1.1 mrg e = gfc_constructor_lookup_expr (order->value.constructor, i-1);
4792 1.1 mrg if (e->expr_type != EXPR_CONSTANT)
4793 1.1 mrg continue;
4794 1.1 mrg
4795 1.1 mrg gfc_extract_int (e, &dim);
4796 1.1 mrg
4797 1.1 mrg if (dim < 1 || dim > order_size)
4798 1.1 mrg {
4799 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4800 1.1 mrg "has out-of-range dimension (%d)",
4801 1.1 mrg gfc_current_intrinsic_arg[3]->name,
4802 1.1 mrg gfc_current_intrinsic, &e->where, dim);
4803 1.1 mrg return false;
4804 1.1 mrg }
4805 1.1 mrg
4806 1.1 mrg if (perm[dim-1] != 0)
4807 1.1 mrg {
4808 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L has "
4809 1.1 mrg "invalid permutation of dimensions (dimension "
4810 1.1 mrg "%qd duplicated)",
4811 1.1 mrg gfc_current_intrinsic_arg[3]->name,
4812 1.1 mrg gfc_current_intrinsic, &e->where, dim);
4813 1.1 mrg return false;
4814 1.1 mrg }
4815 1.1 mrg
4816 1.1 mrg perm[dim-1] = 1;
4817 1.1 mrg }
4818 1.1 mrg }
4819 1.1 mrg }
4820 1.1 mrg
4821 1.1 mrg if (pad == NULL && shape->expr_type == EXPR_ARRAY && shape_is_const
4822 1.1 mrg && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as
4823 1.1 mrg && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE))
4824 1.1 mrg {
4825 1.1 mrg /* Check the match in size between source and destination. */
4826 1.1 mrg if (gfc_array_size (source, &nelems))
4827 1.1 mrg {
4828 1.1 mrg gfc_constructor *c;
4829 1.1 mrg bool test;
4830 1.1 mrg
4831 1.1 mrg
4832 1.1 mrg mpz_init_set_ui (size, 1);
4833 1.1 mrg for (c = gfc_constructor_first (shape->value.constructor);
4834 1.1 mrg c; c = gfc_constructor_next (c))
4835 1.1 mrg mpz_mul (size, size, c->expr->value.integer);
4836 1.1 mrg
4837 1.1 mrg test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0;
4838 1.1 mrg mpz_clear (nelems);
4839 1.1 mrg mpz_clear (size);
4840 1.1 mrg
4841 1.1 mrg if (test)
4842 1.1 mrg {
4843 1.1 mrg gfc_error ("Without padding, there are not enough elements "
4844 1.1 mrg "in the intrinsic RESHAPE source at %L to match "
4845 1.1 mrg "the shape", &source->where);
4846 1.1 mrg return false;
4847 1.1 mrg }
4848 1.1 mrg }
4849 1.1 mrg }
4850 1.1 mrg
4851 1.1 mrg return true;
4852 1.1 mrg }
4853 1.1 mrg
4854 1.1 mrg
4855 1.1 mrg bool
4856 1.1 mrg gfc_check_same_type_as (gfc_expr *a, gfc_expr *b)
4857 1.1 mrg {
4858 1.1 mrg if (a->ts.type != BT_DERIVED && a->ts.type != BT_CLASS)
4859 1.1 mrg {
4860 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4861 1.1 mrg "cannot be of type %s",
4862 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4863 1.1 mrg gfc_current_intrinsic,
4864 1.1 mrg &a->where, gfc_typename (a));
4865 1.1 mrg return false;
4866 1.1 mrg }
4867 1.1 mrg
4868 1.1 mrg if (!(gfc_type_is_extensible (a->ts.u.derived) || UNLIMITED_POLY (a)))
4869 1.1 mrg {
4870 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4871 1.1 mrg "must be of an extensible type",
4872 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
4873 1.1 mrg &a->where);
4874 1.1 mrg return false;
4875 1.1 mrg }
4876 1.1 mrg
4877 1.1 mrg if (b->ts.type != BT_DERIVED && b->ts.type != BT_CLASS)
4878 1.1 mrg {
4879 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4880 1.1 mrg "cannot be of type %s",
4881 1.1 mrg gfc_current_intrinsic_arg[0]->name,
4882 1.1 mrg gfc_current_intrinsic,
4883 1.1 mrg &b->where, gfc_typename (b));
4884 1.1 mrg return false;
4885 1.1 mrg }
4886 1.1 mrg
4887 1.1 mrg if (!(gfc_type_is_extensible (b->ts.u.derived) || UNLIMITED_POLY (b)))
4888 1.1 mrg {
4889 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L "
4890 1.1 mrg "must be of an extensible type",
4891 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
4892 1.1 mrg &b->where);
4893 1.1 mrg return false;
4894 1.1 mrg }
4895 1.1 mrg
4896 1.1 mrg return true;
4897 1.1 mrg }
4898 1.1 mrg
4899 1.1 mrg
4900 1.1 mrg bool
4901 1.1 mrg gfc_check_scale (gfc_expr *x, gfc_expr *i)
4902 1.1 mrg {
4903 1.1 mrg if (!type_check (x, 0, BT_REAL))
4904 1.1 mrg return false;
4905 1.1 mrg
4906 1.1 mrg if (!type_check (i, 1, BT_INTEGER))
4907 1.1 mrg return false;
4908 1.1 mrg
4909 1.1 mrg return true;
4910 1.1 mrg }
4911 1.1 mrg
4912 1.1 mrg
4913 1.1 mrg bool
4914 1.1 mrg gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
4915 1.1 mrg {
4916 1.1 mrg if (!type_check (x, 0, BT_CHARACTER))
4917 1.1 mrg return false;
4918 1.1 mrg
4919 1.1 mrg if (!type_check (y, 1, BT_CHARACTER))
4920 1.1 mrg return false;
4921 1.1 mrg
4922 1.1 mrg if (z != NULL && !type_check (z, 2, BT_LOGICAL))
4923 1.1 mrg return false;
4924 1.1 mrg
4925 1.1 mrg if (!kind_check (kind, 3, BT_INTEGER))
4926 1.1 mrg return false;
4927 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
4928 1.1 mrg "with KIND argument at %L",
4929 1.1 mrg gfc_current_intrinsic, &kind->where))
4930 1.1 mrg return false;
4931 1.1 mrg
4932 1.1 mrg if (!same_type_check (x, 0, y, 1))
4933 1.1 mrg return false;
4934 1.1 mrg
4935 1.1 mrg return true;
4936 1.1 mrg }
4937 1.1 mrg
4938 1.1 mrg
4939 1.1 mrg bool
4940 1.1 mrg gfc_check_secnds (gfc_expr *r)
4941 1.1 mrg {
4942 1.1 mrg if (!type_check (r, 0, BT_REAL))
4943 1.1 mrg return false;
4944 1.1 mrg
4945 1.1 mrg if (!kind_value_check (r, 0, 4))
4946 1.1 mrg return false;
4947 1.1 mrg
4948 1.1 mrg if (!scalar_check (r, 0))
4949 1.1 mrg return false;
4950 1.1 mrg
4951 1.1 mrg return true;
4952 1.1 mrg }
4953 1.1 mrg
4954 1.1 mrg
4955 1.1 mrg bool
4956 1.1 mrg gfc_check_selected_char_kind (gfc_expr *name)
4957 1.1 mrg {
4958 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
4959 1.1 mrg return false;
4960 1.1 mrg
4961 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
4962 1.1 mrg return false;
4963 1.1 mrg
4964 1.1 mrg if (!scalar_check (name, 0))
4965 1.1 mrg return false;
4966 1.1 mrg
4967 1.1 mrg return true;
4968 1.1 mrg }
4969 1.1 mrg
4970 1.1 mrg
4971 1.1 mrg bool
4972 1.1 mrg gfc_check_selected_int_kind (gfc_expr *r)
4973 1.1 mrg {
4974 1.1 mrg if (!type_check (r, 0, BT_INTEGER))
4975 1.1 mrg return false;
4976 1.1 mrg
4977 1.1 mrg if (!scalar_check (r, 0))
4978 1.1 mrg return false;
4979 1.1 mrg
4980 1.1 mrg return true;
4981 1.1 mrg }
4982 1.1 mrg
4983 1.1 mrg
4984 1.1 mrg bool
4985 1.1 mrg gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r, gfc_expr *radix)
4986 1.1 mrg {
4987 1.1 mrg if (p == NULL && r == NULL
4988 1.1 mrg && !gfc_notify_std (GFC_STD_F2008, "SELECTED_REAL_KIND with"
4989 1.1 mrg " neither %<P%> nor %<R%> argument at %L",
4990 1.1 mrg gfc_current_intrinsic_where))
4991 1.1 mrg return false;
4992 1.1 mrg
4993 1.1 mrg if (p)
4994 1.1 mrg {
4995 1.1 mrg if (!type_check (p, 0, BT_INTEGER))
4996 1.1 mrg return false;
4997 1.1 mrg
4998 1.1 mrg if (!scalar_check (p, 0))
4999 1.1 mrg return false;
5000 1.1 mrg }
5001 1.1 mrg
5002 1.1 mrg if (r)
5003 1.1 mrg {
5004 1.1 mrg if (!type_check (r, 1, BT_INTEGER))
5005 1.1 mrg return false;
5006 1.1 mrg
5007 1.1 mrg if (!scalar_check (r, 1))
5008 1.1 mrg return false;
5009 1.1 mrg }
5010 1.1 mrg
5011 1.1 mrg if (radix)
5012 1.1 mrg {
5013 1.1 mrg if (!type_check (radix, 1, BT_INTEGER))
5014 1.1 mrg return false;
5015 1.1 mrg
5016 1.1 mrg if (!scalar_check (radix, 1))
5017 1.1 mrg return false;
5018 1.1 mrg
5019 1.1 mrg if (!gfc_notify_std (GFC_STD_F2008, "%qs intrinsic with "
5020 1.1 mrg "RADIX argument at %L", gfc_current_intrinsic,
5021 1.1 mrg &radix->where))
5022 1.1 mrg return false;
5023 1.1 mrg }
5024 1.1 mrg
5025 1.1 mrg return true;
5026 1.1 mrg }
5027 1.1 mrg
5028 1.1 mrg
5029 1.1 mrg bool
5030 1.1 mrg gfc_check_set_exponent (gfc_expr *x, gfc_expr *i)
5031 1.1 mrg {
5032 1.1 mrg if (!type_check (x, 0, BT_REAL))
5033 1.1 mrg return false;
5034 1.1 mrg
5035 1.1 mrg if (!type_check (i, 1, BT_INTEGER))
5036 1.1 mrg return false;
5037 1.1 mrg
5038 1.1 mrg return true;
5039 1.1 mrg }
5040 1.1 mrg
5041 1.1 mrg
5042 1.1 mrg bool
5043 1.1 mrg gfc_check_shape (gfc_expr *source, gfc_expr *kind)
5044 1.1 mrg {
5045 1.1 mrg gfc_array_ref *ar;
5046 1.1 mrg
5047 1.1 mrg if (gfc_invalid_null_arg (source))
5048 1.1 mrg return false;
5049 1.1 mrg
5050 1.1 mrg if (!kind_check (kind, 1, BT_INTEGER))
5051 1.1 mrg return false;
5052 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
5053 1.1 mrg "with KIND argument at %L",
5054 1.1 mrg gfc_current_intrinsic, &kind->where))
5055 1.1 mrg return false;
5056 1.1 mrg
5057 1.1 mrg if (source->rank == 0 || source->expr_type != EXPR_VARIABLE)
5058 1.1 mrg return true;
5059 1.1 mrg
5060 1.1 mrg if (source->ref == NULL)
5061 1.1 mrg return false;
5062 1.1 mrg
5063 1.1 mrg ar = gfc_find_array_ref (source);
5064 1.1 mrg
5065 1.1 mrg if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL)
5066 1.1 mrg {
5067 1.1 mrg gfc_error ("%<source%> argument of %<shape%> intrinsic at %L must not be "
5068 1.1 mrg "an assumed size array", &source->where);
5069 1.1 mrg return false;
5070 1.1 mrg }
5071 1.1 mrg
5072 1.1 mrg return true;
5073 1.1 mrg }
5074 1.1 mrg
5075 1.1 mrg
5076 1.1 mrg bool
5077 1.1 mrg gfc_check_shift (gfc_expr *i, gfc_expr *shift)
5078 1.1 mrg {
5079 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
5080 1.1 mrg return false;
5081 1.1 mrg
5082 1.1 mrg if (!type_check (shift, 0, BT_INTEGER))
5083 1.1 mrg return false;
5084 1.1 mrg
5085 1.1 mrg if (!nonnegative_check ("SHIFT", shift))
5086 1.1 mrg return false;
5087 1.1 mrg
5088 1.1 mrg if (!less_than_bitsize1 ("I", i, "SHIFT", shift, true))
5089 1.1 mrg return false;
5090 1.1 mrg
5091 1.1 mrg return true;
5092 1.1 mrg }
5093 1.1 mrg
5094 1.1 mrg
5095 1.1 mrg bool
5096 1.1 mrg gfc_check_sign (gfc_expr *a, gfc_expr *b)
5097 1.1 mrg {
5098 1.1 mrg if (!int_or_real_check (a, 0))
5099 1.1 mrg return false;
5100 1.1 mrg
5101 1.1 mrg if (!same_type_check (a, 0, b, 1))
5102 1.1 mrg return false;
5103 1.1 mrg
5104 1.1 mrg return true;
5105 1.1 mrg }
5106 1.1 mrg
5107 1.1 mrg
5108 1.1 mrg bool
5109 1.1 mrg gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
5110 1.1 mrg {
5111 1.1 mrg if (!array_check (array, 0))
5112 1.1 mrg return false;
5113 1.1 mrg
5114 1.1 mrg if (!dim_check (dim, 1, true))
5115 1.1 mrg return false;
5116 1.1 mrg
5117 1.1 mrg if (!dim_rank_check (dim, array, 0))
5118 1.1 mrg return false;
5119 1.1 mrg
5120 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
5121 1.1 mrg return false;
5122 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
5123 1.1 mrg "with KIND argument at %L",
5124 1.1 mrg gfc_current_intrinsic, &kind->where))
5125 1.1 mrg return false;
5126 1.1 mrg
5127 1.1 mrg
5128 1.1 mrg return true;
5129 1.1 mrg }
5130 1.1 mrg
5131 1.1 mrg
5132 1.1 mrg bool
5133 1.1 mrg gfc_check_sizeof (gfc_expr *arg)
5134 1.1 mrg {
5135 1.1 mrg if (gfc_invalid_null_arg (arg))
5136 1.1 mrg return false;
5137 1.1 mrg
5138 1.1 mrg if (arg->ts.type == BT_PROCEDURE)
5139 1.1 mrg {
5140 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be a procedure",
5141 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5142 1.1 mrg &arg->where);
5143 1.1 mrg return false;
5144 1.1 mrg }
5145 1.1 mrg
5146 1.1 mrg if (illegal_boz_arg (arg))
5147 1.1 mrg return false;
5148 1.1 mrg
5149 1.1 mrg /* TYPE(*) is acceptable if and only if it uses an array descriptor. */
5150 1.1 mrg if (arg->ts.type == BT_ASSUMED
5151 1.1 mrg && (arg->symtree->n.sym->as == NULL
5152 1.1 mrg || (arg->symtree->n.sym->as->type != AS_ASSUMED_SHAPE
5153 1.1 mrg && arg->symtree->n.sym->as->type != AS_DEFERRED
5154 1.1 mrg && arg->symtree->n.sym->as->type != AS_ASSUMED_RANK)))
5155 1.1 mrg {
5156 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
5157 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5158 1.1 mrg &arg->where);
5159 1.1 mrg return false;
5160 1.1 mrg }
5161 1.1 mrg
5162 1.1 mrg if (arg->rank && arg->expr_type == EXPR_VARIABLE
5163 1.1 mrg && arg->symtree->n.sym->as != NULL
5164 1.1 mrg && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
5165 1.1 mrg && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
5166 1.1 mrg {
5167 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
5168 1.1 mrg "assumed-size array", gfc_current_intrinsic_arg[0]->name,
5169 1.1 mrg gfc_current_intrinsic, &arg->where);
5170 1.1 mrg return false;
5171 1.1 mrg }
5172 1.1 mrg
5173 1.1 mrg return true;
5174 1.1 mrg }
5175 1.1 mrg
5176 1.1 mrg
5177 1.1 mrg /* Check whether an expression is interoperable. When returning false,
5178 1.1 mrg msg is set to a string telling why the expression is not interoperable,
5179 1.1 mrg otherwise, it is set to NULL. The msg string can be used in diagnostics.
5180 1.1 mrg If c_loc is true, character with len > 1 are allowed (cf. Fortran
5181 1.1 mrg 2003corr5); additionally, assumed-shape/assumed-rank/deferred-shape
5182 1.1 mrg arrays are permitted. And if c_f_ptr is true, deferred-shape arrays
5183 1.1 mrg are permitted. */
5184 1.1 mrg
5185 1.1 mrg static bool
5186 1.1 mrg is_c_interoperable (gfc_expr *expr, const char **msg, bool c_loc, bool c_f_ptr)
5187 1.1 mrg {
5188 1.1 mrg *msg = NULL;
5189 1.1 mrg
5190 1.1 mrg if (expr->expr_type == EXPR_NULL)
5191 1.1 mrg {
5192 1.1 mrg *msg = "NULL() is not interoperable";
5193 1.1 mrg return false;
5194 1.1 mrg }
5195 1.1 mrg
5196 1.1 mrg if (expr->ts.type == BT_BOZ)
5197 1.1 mrg {
5198 1.1 mrg *msg = "BOZ literal constant";
5199 1.1 mrg return false;
5200 1.1 mrg }
5201 1.1 mrg
5202 1.1 mrg if (expr->ts.type == BT_CLASS)
5203 1.1 mrg {
5204 1.1 mrg *msg = "Expression is polymorphic";
5205 1.1 mrg return false;
5206 1.1 mrg }
5207 1.1 mrg
5208 1.1 mrg if (expr->ts.type == BT_DERIVED && !expr->ts.u.derived->attr.is_bind_c
5209 1.1 mrg && !expr->ts.u.derived->ts.is_iso_c)
5210 1.1 mrg {
5211 1.1 mrg *msg = "Expression is a noninteroperable derived type";
5212 1.1 mrg return false;
5213 1.1 mrg }
5214 1.1 mrg
5215 1.1 mrg if (expr->ts.type == BT_PROCEDURE)
5216 1.1 mrg {
5217 1.1 mrg *msg = "Procedure unexpected as argument";
5218 1.1 mrg return false;
5219 1.1 mrg }
5220 1.1 mrg
5221 1.1 mrg if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_LOGICAL)
5222 1.1 mrg {
5223 1.1 mrg int i;
5224 1.1 mrg for (i = 0; gfc_logical_kinds[i].kind; i++)
5225 1.1 mrg if (gfc_logical_kinds[i].kind == expr->ts.kind)
5226 1.1 mrg return true;
5227 1.1 mrg *msg = "Extension to use a non-C_Bool-kind LOGICAL";
5228 1.1 mrg return false;
5229 1.1 mrg }
5230 1.1 mrg
5231 1.1 mrg if (gfc_notification_std (GFC_STD_GNU) && expr->ts.type == BT_CHARACTER
5232 1.1 mrg && expr->ts.kind != 1)
5233 1.1 mrg {
5234 1.1 mrg *msg = "Extension to use a non-C_CHAR-kind CHARACTER";
5235 1.1 mrg return false;
5236 1.1 mrg }
5237 1.1 mrg
5238 1.1 mrg if (expr->ts.type == BT_CHARACTER) {
5239 1.1 mrg if (expr->ts.deferred)
5240 1.1 mrg {
5241 1.1 mrg /* TS 29113 allows deferred-length strings as dummy arguments,
5242 1.1 mrg but it is not an interoperable type. */
5243 1.1 mrg *msg = "Expression shall not be a deferred-length string";
5244 1.1 mrg return false;
5245 1.1 mrg }
5246 1.1 mrg
5247 1.1 mrg if (expr->ts.u.cl && expr->ts.u.cl->length
5248 1.1 mrg && !gfc_simplify_expr (expr->ts.u.cl->length, 0))
5249 1.1 mrg gfc_internal_error ("is_c_interoperable(): gfc_simplify_expr failed");
5250 1.1 mrg
5251 1.1 mrg if (!c_loc && expr->ts.u.cl
5252 1.1 mrg && (!expr->ts.u.cl->length
5253 1.1 mrg || expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
5254 1.1 mrg || mpz_cmp_si (expr->ts.u.cl->length->value.integer, 1) != 0))
5255 1.1 mrg {
5256 1.1 mrg *msg = "Type shall have a character length of 1";
5257 1.1 mrg return false;
5258 1.1 mrg }
5259 1.1 mrg }
5260 1.1 mrg
5261 1.1 mrg /* Note: The following checks are about interoperatable variables, Fortran
5262 1.1 mrg 15.3.5/15.3.6. In intrinsics like C_LOC or in procedure interface, more
5263 1.1 mrg is allowed, e.g. assumed-shape arrays with TS 29113. */
5264 1.1 mrg
5265 1.1 mrg if (gfc_is_coarray (expr))
5266 1.1 mrg {
5267 1.1 mrg *msg = "Coarrays are not interoperable";
5268 1.1 mrg return false;
5269 1.1 mrg }
5270 1.1 mrg
5271 1.1 mrg if (!c_loc && expr->rank > 0 && expr->expr_type != EXPR_ARRAY)
5272 1.1 mrg {
5273 1.1 mrg gfc_array_ref *ar = gfc_find_array_ref (expr);
5274 1.1 mrg if (ar->type != AR_FULL)
5275 1.1 mrg {
5276 1.1 mrg *msg = "Only whole-arrays are interoperable";
5277 1.1 mrg return false;
5278 1.1 mrg }
5279 1.1 mrg if (!c_f_ptr && ar->as->type != AS_EXPLICIT
5280 1.1 mrg && ar->as->type != AS_ASSUMED_SIZE)
5281 1.1 mrg {
5282 1.1 mrg *msg = "Only explicit-size and assumed-size arrays are interoperable";
5283 1.1 mrg return false;
5284 1.1 mrg }
5285 1.1 mrg }
5286 1.1 mrg
5287 1.1 mrg return true;
5288 1.1 mrg }
5289 1.1 mrg
5290 1.1 mrg
5291 1.1 mrg bool
5292 1.1 mrg gfc_check_c_sizeof (gfc_expr *arg)
5293 1.1 mrg {
5294 1.1 mrg const char *msg;
5295 1.1 mrg
5296 1.1 mrg if (!is_c_interoperable (arg, &msg, false, false))
5297 1.1 mrg {
5298 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be an "
5299 1.1 mrg "interoperable data entity: %s",
5300 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5301 1.1 mrg &arg->where, msg);
5302 1.1 mrg return false;
5303 1.1 mrg }
5304 1.1 mrg
5305 1.1 mrg if (arg->ts.type == BT_ASSUMED)
5306 1.1 mrg {
5307 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be "
5308 1.1 mrg "TYPE(*)",
5309 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
5310 1.1 mrg &arg->where);
5311 1.1 mrg return false;
5312 1.1 mrg }
5313 1.1 mrg
5314 1.1 mrg if (arg->rank && arg->expr_type == EXPR_VARIABLE
5315 1.1 mrg && arg->symtree->n.sym->as != NULL
5316 1.1 mrg && arg->symtree->n.sym->as->type == AS_ASSUMED_SIZE && arg->ref
5317 1.1 mrg && arg->ref->type == REF_ARRAY && arg->ref->u.ar.type == AR_FULL)
5318 1.1 mrg {
5319 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be an "
5320 1.1 mrg "assumed-size array", gfc_current_intrinsic_arg[0]->name,
5321 1.1 mrg gfc_current_intrinsic, &arg->where);
5322 1.1 mrg return false;
5323 1.1 mrg }
5324 1.1 mrg
5325 1.1 mrg return true;
5326 1.1 mrg }
5327 1.1 mrg
5328 1.1 mrg
5329 1.1 mrg bool
5330 1.1 mrg gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
5331 1.1 mrg {
5332 1.1 mrg if (c_ptr_1->ts.type != BT_DERIVED
5333 1.1 mrg || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
5334 1.1 mrg || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
5335 1.1 mrg && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
5336 1.1 mrg {
5337 1.1 mrg gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
5338 1.1 mrg "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
5339 1.1 mrg return false;
5340 1.1 mrg }
5341 1.1 mrg
5342 1.1 mrg if (!scalar_check (c_ptr_1, 0))
5343 1.1 mrg return false;
5344 1.1 mrg
5345 1.1 mrg if (c_ptr_2
5346 1.1 mrg && (c_ptr_2->ts.type != BT_DERIVED
5347 1.1 mrg || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
5348 1.1 mrg || (c_ptr_1->ts.u.derived->intmod_sym_id
5349 1.1 mrg != c_ptr_2->ts.u.derived->intmod_sym_id)))
5350 1.1 mrg {
5351 1.1 mrg gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
5352 1.1 mrg "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
5353 1.1 mrg gfc_typename (&c_ptr_1->ts),
5354 1.1 mrg gfc_typename (&c_ptr_2->ts));
5355 1.1 mrg return false;
5356 1.1 mrg }
5357 1.1 mrg
5358 1.1 mrg if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
5359 1.1 mrg return false;
5360 1.1 mrg
5361 1.1 mrg return true;
5362 1.1 mrg }
5363 1.1 mrg
5364 1.1 mrg
5365 1.1 mrg bool
5366 1.1 mrg gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape)
5367 1.1 mrg {
5368 1.1 mrg symbol_attribute attr;
5369 1.1 mrg const char *msg;
5370 1.1 mrg
5371 1.1 mrg if (cptr->ts.type != BT_DERIVED
5372 1.1 mrg || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
5373 1.1 mrg || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR)
5374 1.1 mrg {
5375 1.1 mrg gfc_error ("Argument CPTR at %L to C_F_POINTER shall have the "
5376 1.1 mrg "type TYPE(C_PTR)", &cptr->where);
5377 1.1 mrg return false;
5378 1.1 mrg }
5379 1.1 mrg
5380 1.1 mrg if (!scalar_check (cptr, 0))
5381 1.1 mrg return false;
5382 1.1 mrg
5383 1.1 mrg attr = gfc_expr_attr (fptr);
5384 1.1 mrg
5385 1.1 mrg if (!attr.pointer)
5386 1.1 mrg {
5387 1.1 mrg gfc_error ("Argument FPTR at %L to C_F_POINTER must be a pointer",
5388 1.1 mrg &fptr->where);
5389 1.1 mrg return false;
5390 1.1 mrg }
5391 1.1 mrg
5392 1.1 mrg if (fptr->ts.type == BT_CLASS)
5393 1.1 mrg {
5394 1.1 mrg gfc_error ("FPTR argument at %L to C_F_POINTER shall not be polymorphic",
5395 1.1 mrg &fptr->where);
5396 1.1 mrg return false;
5397 1.1 mrg }
5398 1.1 mrg
5399 1.1 mrg if (gfc_is_coindexed (fptr))
5400 1.1 mrg {
5401 1.1 mrg gfc_error ("Argument FPTR at %L to C_F_POINTER shall not be "
5402 1.1 mrg "coindexed", &fptr->where);
5403 1.1 mrg return false;
5404 1.1 mrg }
5405 1.1 mrg
5406 1.1 mrg if (fptr->rank == 0 && shape)
5407 1.1 mrg {
5408 1.1 mrg gfc_error ("Unexpected SHAPE argument at %L to C_F_POINTER with scalar "
5409 1.1 mrg "FPTR", &fptr->where);
5410 1.1 mrg return false;
5411 1.1 mrg }
5412 1.1 mrg else if (fptr->rank && !shape)
5413 1.1 mrg {
5414 1.1 mrg gfc_error ("Expected SHAPE argument to C_F_POINTER with array "
5415 1.1 mrg "FPTR at %L", &fptr->where);
5416 1.1 mrg return false;
5417 1.1 mrg }
5418 1.1 mrg
5419 1.1 mrg if (shape && !rank_check (shape, 2, 1))
5420 1.1 mrg return false;
5421 1.1 mrg
5422 1.1 mrg if (shape && !type_check (shape, 2, BT_INTEGER))
5423 1.1 mrg return false;
5424 1.1 mrg
5425 1.1 mrg if (shape)
5426 1.1 mrg {
5427 1.1 mrg mpz_t size;
5428 1.1 mrg if (gfc_array_size (shape, &size))
5429 1.1 mrg {
5430 1.1 mrg if (mpz_cmp_ui (size, fptr->rank) != 0)
5431 1.1 mrg {
5432 1.1 mrg mpz_clear (size);
5433 1.1 mrg gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same "
5434 1.1 mrg "size as the RANK of FPTR", &shape->where);
5435 1.1 mrg return false;
5436 1.1 mrg }
5437 1.1 mrg mpz_clear (size);
5438 1.1 mrg }
5439 1.1 mrg }
5440 1.1 mrg
5441 1.1 mrg if (fptr->ts.type == BT_CLASS)
5442 1.1 mrg {
5443 1.1 mrg gfc_error ("Polymorphic FPTR at %L to C_F_POINTER", &fptr->where);
5444 1.1 mrg return false;
5445 1.1 mrg }
5446 1.1 mrg
5447 1.1 mrg if (fptr->rank > 0 && !is_c_interoperable (fptr, &msg, false, true))
5448 1.1 mrg return gfc_notify_std (GFC_STD_F2018, "Noninteroperable array FPTR "
5449 1.1 mrg "at %L to C_F_POINTER: %s", &fptr->where, msg);
5450 1.1 mrg
5451 1.1 mrg return true;
5452 1.1 mrg }
5453 1.1 mrg
5454 1.1 mrg
5455 1.1 mrg bool
5456 1.1 mrg gfc_check_c_f_procpointer (gfc_expr *cptr, gfc_expr *fptr)
5457 1.1 mrg {
5458 1.1 mrg symbol_attribute attr;
5459 1.1 mrg
5460 1.1 mrg if (cptr->ts.type != BT_DERIVED
5461 1.1 mrg || cptr->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
5462 1.1 mrg || cptr->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR)
5463 1.1 mrg {
5464 1.1 mrg gfc_error ("Argument CPTR at %L to C_F_PROCPOINTER shall have the "
5465 1.1 mrg "type TYPE(C_FUNPTR)", &cptr->where);
5466 1.1 mrg return false;
5467 1.1 mrg }
5468 1.1 mrg
5469 1.1 mrg if (!scalar_check (cptr, 0))
5470 1.1 mrg return false;
5471 1.1 mrg
5472 1.1 mrg attr = gfc_expr_attr (fptr);
5473 1.1 mrg
5474 1.1 mrg if (!attr.proc_pointer)
5475 1.1 mrg {
5476 1.1 mrg gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure "
5477 1.1 mrg "pointer", &fptr->where);
5478 1.1 mrg return false;
5479 1.1 mrg }
5480 1.1 mrg
5481 1.1 mrg if (gfc_is_coindexed (fptr))
5482 1.1 mrg {
5483 1.1 mrg gfc_error ("Argument FPTR at %L to C_F_PROCPOINTER shall not be "
5484 1.1 mrg "coindexed", &fptr->where);
5485 1.1 mrg return false;
5486 1.1 mrg }
5487 1.1 mrg
5488 1.1 mrg if (!attr.is_bind_c)
5489 1.1 mrg return gfc_notify_std (GFC_STD_F2018, "Noninteroperable procedure "
5490 1.1 mrg "pointer at %L to C_F_PROCPOINTER", &fptr->where);
5491 1.1 mrg
5492 1.1 mrg return true;
5493 1.1 mrg }
5494 1.1 mrg
5495 1.1 mrg
5496 1.1 mrg bool
5497 1.1 mrg gfc_check_c_funloc (gfc_expr *x)
5498 1.1 mrg {
5499 1.1 mrg symbol_attribute attr;
5500 1.1 mrg
5501 1.1 mrg if (gfc_is_coindexed (x))
5502 1.1 mrg {
5503 1.1 mrg gfc_error ("Argument X at %L to C_FUNLOC shall not be "
5504 1.1 mrg "coindexed", &x->where);
5505 1.1 mrg return false;
5506 1.1 mrg }
5507 1.1 mrg
5508 1.1 mrg attr = gfc_expr_attr (x);
5509 1.1 mrg
5510 1.1 mrg if (attr.function && !attr.proc_pointer && x->expr_type == EXPR_VARIABLE
5511 1.1 mrg && x->symtree->n.sym == x->symtree->n.sym->result)
5512 1.1 mrg for (gfc_namespace *ns = gfc_current_ns; ns; ns = ns->parent)
5513 1.1 mrg if (x->symtree->n.sym == ns->proc_name)
5514 1.1 mrg {
5515 1.1 mrg gfc_error ("Function result %qs at %L is invalid as X argument "
5516 1.1 mrg "to C_FUNLOC", x->symtree->n.sym->name, &x->where);
5517 1.1 mrg return false;
5518 1.1 mrg }
5519 1.1 mrg
5520 1.1 mrg if (attr.flavor != FL_PROCEDURE)
5521 1.1 mrg {
5522 1.1 mrg gfc_error ("Argument X at %L to C_FUNLOC shall be a procedure "
5523 1.1 mrg "or a procedure pointer", &x->where);
5524 1.1 mrg return false;
5525 1.1 mrg }
5526 1.1 mrg
5527 1.1 mrg if (!attr.is_bind_c)
5528 1.1 mrg return gfc_notify_std (GFC_STD_F2018, "Noninteroperable procedure "
5529 1.1 mrg "at %L to C_FUNLOC", &x->where);
5530 1.1 mrg return true;
5531 1.1 mrg }
5532 1.1 mrg
5533 1.1 mrg
5534 1.1 mrg bool
5535 1.1 mrg gfc_check_c_loc (gfc_expr *x)
5536 1.1 mrg {
5537 1.1 mrg symbol_attribute attr;
5538 1.1 mrg const char *msg;
5539 1.1 mrg
5540 1.1 mrg if (gfc_is_coindexed (x))
5541 1.1 mrg {
5542 1.1 mrg gfc_error ("Argument X at %L to C_LOC shall not be coindexed", &x->where);
5543 1.1 mrg return false;
5544 1.1 mrg }
5545 1.1 mrg
5546 1.1 mrg if (x->ts.type == BT_CLASS)
5547 1.1 mrg {
5548 1.1 mrg gfc_error ("X argument at %L to C_LOC shall not be polymorphic",
5549 1.1 mrg &x->where);
5550 1.1 mrg return false;
5551 1.1 mrg }
5552 1.1 mrg
5553 1.1 mrg attr = gfc_expr_attr (x);
5554 1.1 mrg
5555 1.1 mrg if (!attr.pointer
5556 1.1 mrg && (x->expr_type != EXPR_VARIABLE || !attr.target
5557 1.1 mrg || attr.flavor == FL_PARAMETER))
5558 1.1 mrg {
5559 1.1 mrg gfc_error ("Argument X at %L to C_LOC shall have either "
5560 1.1 mrg "the POINTER or the TARGET attribute", &x->where);
5561 1.1 mrg return false;
5562 1.1 mrg }
5563 1.1 mrg
5564 1.1 mrg if (x->ts.type == BT_CHARACTER
5565 1.1 mrg && gfc_var_strlen (x) == 0)
5566 1.1 mrg {
5567 1.1 mrg gfc_error ("Argument X at %L to C_LOC shall be not be a zero-sized "
5568 1.1 mrg "string", &x->where);
5569 1.1 mrg return false;
5570 1.1 mrg }
5571 1.1 mrg
5572 1.1 mrg if (!is_c_interoperable (x, &msg, true, false))
5573 1.1 mrg {
5574 1.1 mrg if (x->ts.type == BT_CLASS)
5575 1.1 mrg {
5576 1.1 mrg gfc_error ("Argument at %L to C_LOC shall not be polymorphic",
5577 1.1 mrg &x->where);
5578 1.1 mrg return false;
5579 1.1 mrg }
5580 1.1 mrg
5581 1.1 mrg if (x->rank
5582 1.1 mrg && !gfc_notify_std (GFC_STD_F2018,
5583 1.1 mrg "Noninteroperable array at %L as"
5584 1.1 mrg " argument to C_LOC: %s", &x->where, msg))
5585 1.1 mrg return false;
5586 1.1 mrg }
5587 1.1 mrg else if (x->rank > 0 && gfc_notification_std (GFC_STD_F2008))
5588 1.1 mrg {
5589 1.1 mrg gfc_array_ref *ar = gfc_find_array_ref (x);
5590 1.1 mrg
5591 1.1 mrg if (ar->as->type != AS_EXPLICIT && ar->as->type != AS_ASSUMED_SIZE
5592 1.1 mrg && !attr.allocatable
5593 1.1 mrg && !gfc_notify_std (GFC_STD_F2008,
5594 1.1 mrg "Array of interoperable type at %L "
5595 1.1 mrg "to C_LOC which is nonallocatable and neither "
5596 1.1 mrg "assumed size nor explicit size", &x->where))
5597 1.1 mrg return false;
5598 1.1 mrg else if (ar->type != AR_FULL
5599 1.1 mrg && !gfc_notify_std (GFC_STD_F2008, "Array section at %L "
5600 1.1 mrg "to C_LOC", &x->where))
5601 1.1 mrg return false;
5602 1.1 mrg }
5603 1.1 mrg
5604 1.1 mrg return true;
5605 1.1 mrg }
5606 1.1 mrg
5607 1.1 mrg
5608 1.1 mrg bool
5609 1.1 mrg gfc_check_sleep_sub (gfc_expr *seconds)
5610 1.1 mrg {
5611 1.1 mrg if (!type_check (seconds, 0, BT_INTEGER))
5612 1.1 mrg return false;
5613 1.1 mrg
5614 1.1 mrg if (!scalar_check (seconds, 0))
5615 1.1 mrg return false;
5616 1.1 mrg
5617 1.1 mrg return true;
5618 1.1 mrg }
5619 1.1 mrg
5620 1.1 mrg bool
5621 1.1 mrg gfc_check_sngl (gfc_expr *a)
5622 1.1 mrg {
5623 1.1 mrg if (!type_check (a, 0, BT_REAL))
5624 1.1 mrg return false;
5625 1.1 mrg
5626 1.1 mrg if ((a->ts.kind != gfc_default_double_kind)
5627 1.1 mrg && !gfc_notify_std (GFC_STD_GNU, "non double precision "
5628 1.1 mrg "REAL argument to %s intrinsic at %L",
5629 1.1 mrg gfc_current_intrinsic, &a->where))
5630 1.1 mrg return false;
5631 1.1 mrg
5632 1.1 mrg return true;
5633 1.1 mrg }
5634 1.1 mrg
5635 1.1 mrg bool
5636 1.1 mrg gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
5637 1.1 mrg {
5638 1.1 mrg if (gfc_invalid_null_arg (source))
5639 1.1 mrg return false;
5640 1.1 mrg
5641 1.1 mrg if (source->rank >= GFC_MAX_DIMENSIONS)
5642 1.1 mrg {
5643 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be less "
5644 1.1 mrg "than rank %d", gfc_current_intrinsic_arg[0]->name,
5645 1.1 mrg gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS);
5646 1.1 mrg
5647 1.1 mrg return false;
5648 1.1 mrg }
5649 1.1 mrg
5650 1.1 mrg if (dim == NULL)
5651 1.1 mrg return false;
5652 1.1 mrg
5653 1.1 mrg if (!dim_check (dim, 1, false))
5654 1.1 mrg return false;
5655 1.1 mrg
5656 1.1 mrg /* dim_rank_check() does not apply here. */
5657 1.1 mrg if (dim
5658 1.1 mrg && dim->expr_type == EXPR_CONSTANT
5659 1.1 mrg && (mpz_cmp_ui (dim->value.integer, 1) < 0
5660 1.1 mrg || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
5661 1.1 mrg {
5662 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L is not a valid "
5663 1.1 mrg "dimension index", gfc_current_intrinsic_arg[1]->name,
5664 1.1 mrg gfc_current_intrinsic, &dim->where);
5665 1.1 mrg return false;
5666 1.1 mrg }
5667 1.1 mrg
5668 1.1 mrg if (!type_check (ncopies, 2, BT_INTEGER))
5669 1.1 mrg return false;
5670 1.1 mrg
5671 1.1 mrg if (!scalar_check (ncopies, 2))
5672 1.1 mrg return false;
5673 1.1 mrg
5674 1.1 mrg return true;
5675 1.1 mrg }
5676 1.1 mrg
5677 1.1 mrg
5678 1.1 mrg /* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and
5679 1.1 mrg functions). */
5680 1.1 mrg
5681 1.1 mrg bool
5682 1.1 mrg arg_strlen_is_zero (gfc_expr *c, int n)
5683 1.1 mrg {
5684 1.1 mrg if (gfc_var_strlen (c) == 0)
5685 1.1 mrg {
5686 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must have "
5687 1.1 mrg "length at least 1", gfc_current_intrinsic_arg[n]->name,
5688 1.1 mrg gfc_current_intrinsic, &c->where);
5689 1.1 mrg return true;
5690 1.1 mrg }
5691 1.1 mrg return false;
5692 1.1 mrg }
5693 1.1 mrg
5694 1.1 mrg bool
5695 1.1 mrg gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status)
5696 1.1 mrg {
5697 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5698 1.1 mrg return false;
5699 1.1 mrg
5700 1.1 mrg if (!scalar_check (unit, 0))
5701 1.1 mrg return false;
5702 1.1 mrg
5703 1.1 mrg if (!type_check (c, 1, BT_CHARACTER))
5704 1.1 mrg return false;
5705 1.1 mrg if (!kind_value_check (c, 1, gfc_default_character_kind))
5706 1.1 mrg return false;
5707 1.1 mrg if (strcmp (gfc_current_intrinsic, "fgetc") == 0
5708 1.1 mrg && !variable_check (c, 1, false))
5709 1.1 mrg return false;
5710 1.1 mrg if (arg_strlen_is_zero (c, 1))
5711 1.1 mrg return false;
5712 1.1 mrg
5713 1.1 mrg if (status == NULL)
5714 1.1 mrg return true;
5715 1.1 mrg
5716 1.1 mrg if (!type_check (status, 2, BT_INTEGER)
5717 1.1 mrg || !kind_value_check (status, 2, gfc_default_integer_kind)
5718 1.1 mrg || !scalar_check (status, 2)
5719 1.1 mrg || !variable_check (status, 2, false))
5720 1.1 mrg return false;
5721 1.1 mrg
5722 1.1 mrg return true;
5723 1.1 mrg }
5724 1.1 mrg
5725 1.1 mrg
5726 1.1 mrg bool
5727 1.1 mrg gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c)
5728 1.1 mrg {
5729 1.1 mrg return gfc_check_fgetputc_sub (unit, c, NULL);
5730 1.1 mrg }
5731 1.1 mrg
5732 1.1 mrg
5733 1.1 mrg bool
5734 1.1 mrg gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status)
5735 1.1 mrg {
5736 1.1 mrg if (!type_check (c, 0, BT_CHARACTER))
5737 1.1 mrg return false;
5738 1.1 mrg if (!kind_value_check (c, 0, gfc_default_character_kind))
5739 1.1 mrg return false;
5740 1.1 mrg if (strcmp (gfc_current_intrinsic, "fget") == 0
5741 1.1 mrg && !variable_check (c, 0, false))
5742 1.1 mrg return false;
5743 1.1 mrg if (arg_strlen_is_zero (c, 0))
5744 1.1 mrg return false;
5745 1.1 mrg
5746 1.1 mrg if (status == NULL)
5747 1.1 mrg return true;
5748 1.1 mrg
5749 1.1 mrg if (!type_check (status, 1, BT_INTEGER)
5750 1.1 mrg || !kind_value_check (status, 1, gfc_default_integer_kind)
5751 1.1 mrg || !scalar_check (status, 1)
5752 1.1 mrg || !variable_check (status, 1, false))
5753 1.1 mrg return false;
5754 1.1 mrg
5755 1.1 mrg return true;
5756 1.1 mrg }
5757 1.1 mrg
5758 1.1 mrg
5759 1.1 mrg bool
5760 1.1 mrg gfc_check_fgetput (gfc_expr *c)
5761 1.1 mrg {
5762 1.1 mrg return gfc_check_fgetput_sub (c, NULL);
5763 1.1 mrg }
5764 1.1 mrg
5765 1.1 mrg
5766 1.1 mrg bool
5767 1.1 mrg gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status)
5768 1.1 mrg {
5769 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5770 1.1 mrg return false;
5771 1.1 mrg
5772 1.1 mrg if (!scalar_check (unit, 0))
5773 1.1 mrg return false;
5774 1.1 mrg
5775 1.1 mrg if (!type_check (offset, 1, BT_INTEGER))
5776 1.1 mrg return false;
5777 1.1 mrg
5778 1.1 mrg if (!scalar_check (offset, 1))
5779 1.1 mrg return false;
5780 1.1 mrg
5781 1.1 mrg if (!type_check (whence, 2, BT_INTEGER))
5782 1.1 mrg return false;
5783 1.1 mrg
5784 1.1 mrg if (!scalar_check (whence, 2))
5785 1.1 mrg return false;
5786 1.1 mrg
5787 1.1 mrg if (status == NULL)
5788 1.1 mrg return true;
5789 1.1 mrg
5790 1.1 mrg if (!type_check (status, 3, BT_INTEGER))
5791 1.1 mrg return false;
5792 1.1 mrg
5793 1.1 mrg if (!kind_value_check (status, 3, 4))
5794 1.1 mrg return false;
5795 1.1 mrg
5796 1.1 mrg if (!scalar_check (status, 3))
5797 1.1 mrg return false;
5798 1.1 mrg
5799 1.1 mrg return true;
5800 1.1 mrg }
5801 1.1 mrg
5802 1.1 mrg
5803 1.1 mrg
5804 1.1 mrg bool
5805 1.1 mrg gfc_check_fstat (gfc_expr *unit, gfc_expr *array)
5806 1.1 mrg {
5807 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5808 1.1 mrg return false;
5809 1.1 mrg
5810 1.1 mrg if (!scalar_check (unit, 0))
5811 1.1 mrg return false;
5812 1.1 mrg
5813 1.1 mrg if (!type_check (array, 1, BT_INTEGER)
5814 1.1 mrg || !kind_value_check (unit, 0, gfc_default_integer_kind))
5815 1.1 mrg return false;
5816 1.1 mrg
5817 1.1 mrg if (!array_check (array, 1))
5818 1.1 mrg return false;
5819 1.1 mrg
5820 1.1 mrg return true;
5821 1.1 mrg }
5822 1.1 mrg
5823 1.1 mrg
5824 1.1 mrg bool
5825 1.1 mrg gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status)
5826 1.1 mrg {
5827 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5828 1.1 mrg return false;
5829 1.1 mrg
5830 1.1 mrg if (!scalar_check (unit, 0))
5831 1.1 mrg return false;
5832 1.1 mrg
5833 1.1 mrg if (!type_check (array, 1, BT_INTEGER)
5834 1.1 mrg || !kind_value_check (array, 1, gfc_default_integer_kind))
5835 1.1 mrg return false;
5836 1.1 mrg
5837 1.1 mrg if (!array_check (array, 1))
5838 1.1 mrg return false;
5839 1.1 mrg
5840 1.1 mrg if (status == NULL)
5841 1.1 mrg return true;
5842 1.1 mrg
5843 1.1 mrg if (!type_check (status, 2, BT_INTEGER)
5844 1.1 mrg || !kind_value_check (status, 2, gfc_default_integer_kind))
5845 1.1 mrg return false;
5846 1.1 mrg
5847 1.1 mrg if (!scalar_check (status, 2))
5848 1.1 mrg return false;
5849 1.1 mrg
5850 1.1 mrg return true;
5851 1.1 mrg }
5852 1.1 mrg
5853 1.1 mrg
5854 1.1 mrg bool
5855 1.1 mrg gfc_check_ftell (gfc_expr *unit)
5856 1.1 mrg {
5857 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5858 1.1 mrg return false;
5859 1.1 mrg
5860 1.1 mrg if (!scalar_check (unit, 0))
5861 1.1 mrg return false;
5862 1.1 mrg
5863 1.1 mrg return true;
5864 1.1 mrg }
5865 1.1 mrg
5866 1.1 mrg
5867 1.1 mrg bool
5868 1.1 mrg gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset)
5869 1.1 mrg {
5870 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
5871 1.1 mrg return false;
5872 1.1 mrg
5873 1.1 mrg if (!scalar_check (unit, 0))
5874 1.1 mrg return false;
5875 1.1 mrg
5876 1.1 mrg if (!type_check (offset, 1, BT_INTEGER))
5877 1.1 mrg return false;
5878 1.1 mrg
5879 1.1 mrg if (!scalar_check (offset, 1))
5880 1.1 mrg return false;
5881 1.1 mrg
5882 1.1 mrg return true;
5883 1.1 mrg }
5884 1.1 mrg
5885 1.1 mrg
5886 1.1 mrg bool
5887 1.1 mrg gfc_check_stat (gfc_expr *name, gfc_expr *array)
5888 1.1 mrg {
5889 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
5890 1.1 mrg return false;
5891 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
5892 1.1 mrg return false;
5893 1.1 mrg
5894 1.1 mrg if (!type_check (array, 1, BT_INTEGER)
5895 1.1 mrg || !kind_value_check (array, 1, gfc_default_integer_kind))
5896 1.1 mrg return false;
5897 1.1 mrg
5898 1.1 mrg if (!array_check (array, 1))
5899 1.1 mrg return false;
5900 1.1 mrg
5901 1.1 mrg return true;
5902 1.1 mrg }
5903 1.1 mrg
5904 1.1 mrg
5905 1.1 mrg bool
5906 1.1 mrg gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status)
5907 1.1 mrg {
5908 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
5909 1.1 mrg return false;
5910 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
5911 1.1 mrg return false;
5912 1.1 mrg
5913 1.1 mrg if (!type_check (array, 1, BT_INTEGER)
5914 1.1 mrg || !kind_value_check (array, 1, gfc_default_integer_kind))
5915 1.1 mrg return false;
5916 1.1 mrg
5917 1.1 mrg if (!array_check (array, 1))
5918 1.1 mrg return false;
5919 1.1 mrg
5920 1.1 mrg if (status == NULL)
5921 1.1 mrg return true;
5922 1.1 mrg
5923 1.1 mrg if (!type_check (status, 2, BT_INTEGER)
5924 1.1 mrg || !kind_value_check (array, 1, gfc_default_integer_kind))
5925 1.1 mrg return false;
5926 1.1 mrg
5927 1.1 mrg if (!scalar_check (status, 2))
5928 1.1 mrg return false;
5929 1.1 mrg
5930 1.1 mrg return true;
5931 1.1 mrg }
5932 1.1 mrg
5933 1.1 mrg
5934 1.1 mrg bool
5935 1.1 mrg gfc_check_image_index (gfc_expr *coarray, gfc_expr *sub)
5936 1.1 mrg {
5937 1.1 mrg mpz_t nelems;
5938 1.1 mrg
5939 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
5940 1.1 mrg {
5941 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5942 1.1 mrg return false;
5943 1.1 mrg }
5944 1.1 mrg
5945 1.1 mrg if (!coarray_check (coarray, 0))
5946 1.1 mrg return false;
5947 1.1 mrg
5948 1.1 mrg if (sub->rank != 1)
5949 1.1 mrg {
5950 1.1 mrg gfc_error ("%s argument to IMAGE_INDEX must be a rank one array at %L",
5951 1.1 mrg gfc_current_intrinsic_arg[1]->name, &sub->where);
5952 1.1 mrg return false;
5953 1.1 mrg }
5954 1.1 mrg
5955 1.1 mrg if (sub->ts.type != BT_INTEGER)
5956 1.1 mrg {
5957 1.1 mrg gfc_error ("Type of %s argument of IMAGE_INDEX at %L shall be INTEGER",
5958 1.1 mrg gfc_current_intrinsic_arg[1]->name, &sub->where);
5959 1.1 mrg return false;
5960 1.1 mrg }
5961 1.1 mrg
5962 1.1 mrg if (gfc_array_size (sub, &nelems))
5963 1.1 mrg {
5964 1.1 mrg int corank = gfc_get_corank (coarray);
5965 1.1 mrg
5966 1.1 mrg if (mpz_cmp_ui (nelems, corank) != 0)
5967 1.1 mrg {
5968 1.1 mrg gfc_error ("The number of array elements of the SUB argument to "
5969 1.1 mrg "IMAGE_INDEX at %L shall be %d (corank) not %d",
5970 1.1 mrg &sub->where, corank, (int) mpz_get_si (nelems));
5971 1.1 mrg mpz_clear (nelems);
5972 1.1 mrg return false;
5973 1.1 mrg }
5974 1.1 mrg mpz_clear (nelems);
5975 1.1 mrg }
5976 1.1 mrg
5977 1.1 mrg return true;
5978 1.1 mrg }
5979 1.1 mrg
5980 1.1 mrg
5981 1.1 mrg bool
5982 1.1 mrg gfc_check_num_images (gfc_expr *distance, gfc_expr *failed)
5983 1.1 mrg {
5984 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
5985 1.1 mrg {
5986 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
5987 1.1 mrg return false;
5988 1.1 mrg }
5989 1.1 mrg
5990 1.1 mrg if (distance)
5991 1.1 mrg {
5992 1.1 mrg if (!type_check (distance, 0, BT_INTEGER))
5993 1.1 mrg return false;
5994 1.1 mrg
5995 1.1 mrg if (!nonnegative_check ("DISTANCE", distance))
5996 1.1 mrg return false;
5997 1.1 mrg
5998 1.1 mrg if (!scalar_check (distance, 0))
5999 1.1 mrg return false;
6000 1.1 mrg
6001 1.1 mrg if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to "
6002 1.1 mrg "NUM_IMAGES at %L", &distance->where))
6003 1.1 mrg return false;
6004 1.1 mrg }
6005 1.1 mrg
6006 1.1 mrg if (failed)
6007 1.1 mrg {
6008 1.1 mrg if (!type_check (failed, 1, BT_LOGICAL))
6009 1.1 mrg return false;
6010 1.1 mrg
6011 1.1 mrg if (!scalar_check (failed, 1))
6012 1.1 mrg return false;
6013 1.1 mrg
6014 1.1 mrg if (!gfc_notify_std (GFC_STD_F2018, "FAILED= argument to "
6015 1.1 mrg "NUM_IMAGES at %L", &failed->where))
6016 1.1 mrg return false;
6017 1.1 mrg }
6018 1.1 mrg
6019 1.1 mrg return true;
6020 1.1 mrg }
6021 1.1 mrg
6022 1.1 mrg
6023 1.1 mrg bool
6024 1.1 mrg gfc_check_team_number (gfc_expr *team)
6025 1.1 mrg {
6026 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
6027 1.1 mrg {
6028 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
6029 1.1 mrg return false;
6030 1.1 mrg }
6031 1.1 mrg
6032 1.1 mrg if (team)
6033 1.1 mrg {
6034 1.1 mrg if (team->ts.type != BT_DERIVED
6035 1.1 mrg || team->ts.u.derived->from_intmod != INTMOD_ISO_FORTRAN_ENV
6036 1.1 mrg || team->ts.u.derived->intmod_sym_id != ISOFORTRAN_TEAM_TYPE)
6037 1.1 mrg {
6038 1.1 mrg gfc_error ("TEAM argument at %L to the intrinsic TEAM_NUMBER "
6039 1.1 mrg "shall be of type TEAM_TYPE", &team->where);
6040 1.1 mrg return false;
6041 1.1 mrg }
6042 1.1 mrg }
6043 1.1 mrg else
6044 1.1 mrg return true;
6045 1.1 mrg
6046 1.1 mrg return true;
6047 1.1 mrg }
6048 1.1 mrg
6049 1.1 mrg
6050 1.1 mrg bool
6051 1.1 mrg gfc_check_this_image (gfc_expr *coarray, gfc_expr *dim, gfc_expr *distance)
6052 1.1 mrg {
6053 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
6054 1.1 mrg {
6055 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
6056 1.1 mrg return false;
6057 1.1 mrg }
6058 1.1 mrg
6059 1.1 mrg if (coarray == NULL && dim == NULL && distance == NULL)
6060 1.1 mrg return true;
6061 1.1 mrg
6062 1.1 mrg if (dim != NULL && coarray == NULL)
6063 1.1 mrg {
6064 1.1 mrg gfc_error ("DIM argument without COARRAY argument not allowed for "
6065 1.1 mrg "THIS_IMAGE intrinsic at %L", &dim->where);
6066 1.1 mrg return false;
6067 1.1 mrg }
6068 1.1 mrg
6069 1.1 mrg if (distance && (coarray || dim))
6070 1.1 mrg {
6071 1.1 mrg gfc_error ("The DISTANCE argument may not be specified together with the "
6072 1.1 mrg "COARRAY or DIM argument in intrinsic at %L",
6073 1.1 mrg &distance->where);
6074 1.1 mrg return false;
6075 1.1 mrg }
6076 1.1 mrg
6077 1.1 mrg /* Assume that we have "this_image (distance)". */
6078 1.1 mrg if (coarray && !gfc_is_coarray (coarray) && coarray->ts.type == BT_INTEGER)
6079 1.1 mrg {
6080 1.1 mrg if (dim)
6081 1.1 mrg {
6082 1.1 mrg gfc_error ("Unexpected DIM argument with noncoarray argument at %L",
6083 1.1 mrg &coarray->where);
6084 1.1 mrg return false;
6085 1.1 mrg }
6086 1.1 mrg distance = coarray;
6087 1.1 mrg }
6088 1.1 mrg
6089 1.1 mrg if (distance)
6090 1.1 mrg {
6091 1.1 mrg if (!type_check (distance, 2, BT_INTEGER))
6092 1.1 mrg return false;
6093 1.1 mrg
6094 1.1 mrg if (!nonnegative_check ("DISTANCE", distance))
6095 1.1 mrg return false;
6096 1.1 mrg
6097 1.1 mrg if (!scalar_check (distance, 2))
6098 1.1 mrg return false;
6099 1.1 mrg
6100 1.1 mrg if (!gfc_notify_std (GFC_STD_F2018, "DISTANCE= argument to "
6101 1.1 mrg "THIS_IMAGE at %L", &distance->where))
6102 1.1 mrg return false;
6103 1.1 mrg
6104 1.1 mrg return true;
6105 1.1 mrg }
6106 1.1 mrg
6107 1.1 mrg if (!coarray_check (coarray, 0))
6108 1.1 mrg return false;
6109 1.1 mrg
6110 1.1 mrg if (dim != NULL)
6111 1.1 mrg {
6112 1.1 mrg if (!dim_check (dim, 1, false))
6113 1.1 mrg return false;
6114 1.1 mrg
6115 1.1 mrg if (!dim_corank_check (dim, coarray))
6116 1.1 mrg return false;
6117 1.1 mrg }
6118 1.1 mrg
6119 1.1 mrg return true;
6120 1.1 mrg }
6121 1.1 mrg
6122 1.1 mrg /* Calculate the sizes for transfer, used by gfc_check_transfer and also
6123 1.1 mrg by gfc_simplify_transfer. Return false if we cannot do so. */
6124 1.1 mrg
6125 1.1 mrg bool
6126 1.1 mrg gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size,
6127 1.1 mrg size_t *source_size, size_t *result_size,
6128 1.1 mrg size_t *result_length_p)
6129 1.1 mrg {
6130 1.1 mrg size_t result_elt_size;
6131 1.1 mrg
6132 1.1 mrg if (source->expr_type == EXPR_FUNCTION)
6133 1.1 mrg return false;
6134 1.1 mrg
6135 1.1 mrg if (size && size->expr_type != EXPR_CONSTANT)
6136 1.1 mrg return false;
6137 1.1 mrg
6138 1.1 mrg /* Calculate the size of the source. */
6139 1.1 mrg if (!gfc_target_expr_size (source, source_size))
6140 1.1 mrg return false;
6141 1.1 mrg
6142 1.1 mrg /* Determine the size of the element. */
6143 1.1 mrg if (!gfc_element_size (mold, &result_elt_size))
6144 1.1 mrg return false;
6145 1.1 mrg
6146 1.1 mrg /* If the storage size of SOURCE is greater than zero and MOLD is an array,
6147 1.1 mrg * a scalar with the type and type parameters of MOLD shall not have a
6148 1.1 mrg * storage size equal to zero.
6149 1.1 mrg * If MOLD is a scalar and SIZE is absent, the result is a scalar.
6150 1.1 mrg * If MOLD is an array and SIZE is absent, the result is an array and of
6151 1.1 mrg * rank one. Its size is as small as possible such that its physical
6152 1.1 mrg * representation is not shorter than that of SOURCE.
6153 1.1 mrg * If SIZE is present, the result is an array of rank one and size SIZE.
6154 1.1 mrg */
6155 1.1 mrg if (result_elt_size == 0 && *source_size > 0
6156 1.1 mrg && (mold->expr_type == EXPR_ARRAY || mold->rank))
6157 1.1 mrg {
6158 1.1 mrg gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L is an "
6159 1.1 mrg "array and shall not have storage size 0 when %<SOURCE%> "
6160 1.1 mrg "argument has size greater than 0", &mold->where);
6161 1.1 mrg return false;
6162 1.1 mrg }
6163 1.1 mrg
6164 1.1 mrg if (result_elt_size == 0 && *source_size == 0 && !size)
6165 1.1 mrg {
6166 1.1 mrg *result_size = 0;
6167 1.1 mrg if (result_length_p)
6168 1.1 mrg *result_length_p = 0;
6169 1.1 mrg return true;
6170 1.1 mrg }
6171 1.1 mrg
6172 1.1 mrg if ((result_elt_size > 0 && (mold->expr_type == EXPR_ARRAY || mold->rank))
6173 1.1 mrg || size)
6174 1.1 mrg {
6175 1.1 mrg int result_length;
6176 1.1 mrg
6177 1.1 mrg if (size)
6178 1.1 mrg result_length = (size_t)mpz_get_ui (size->value.integer);
6179 1.1 mrg else
6180 1.1 mrg {
6181 1.1 mrg result_length = *source_size / result_elt_size;
6182 1.1 mrg if (result_length * result_elt_size < *source_size)
6183 1.1 mrg result_length += 1;
6184 1.1 mrg }
6185 1.1 mrg
6186 1.1 mrg *result_size = result_length * result_elt_size;
6187 1.1 mrg if (result_length_p)
6188 1.1 mrg *result_length_p = result_length;
6189 1.1 mrg }
6190 1.1 mrg else
6191 1.1 mrg *result_size = result_elt_size;
6192 1.1 mrg
6193 1.1 mrg return true;
6194 1.1 mrg }
6195 1.1 mrg
6196 1.1 mrg
6197 1.1 mrg bool
6198 1.1 mrg gfc_check_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
6199 1.1 mrg {
6200 1.1 mrg size_t source_size;
6201 1.1 mrg size_t result_size;
6202 1.1 mrg
6203 1.1 mrg if (gfc_invalid_null_arg (source))
6204 1.1 mrg return false;
6205 1.1 mrg
6206 1.1 mrg /* SOURCE shall be a scalar or array of any type. */
6207 1.1 mrg if (source->ts.type == BT_PROCEDURE
6208 1.1 mrg && source->symtree->n.sym->attr.subroutine == 1)
6209 1.1 mrg {
6210 1.1 mrg gfc_error ("%<SOURCE%> argument of %<TRANSFER%> intrinsic at %L "
6211 1.1 mrg "must not be a %s", &source->where,
6212 1.1 mrg gfc_basic_typename (source->ts.type));
6213 1.1 mrg return false;
6214 1.1 mrg }
6215 1.1 mrg
6216 1.1 mrg if (source->ts.type == BT_BOZ && illegal_boz_arg (source))
6217 1.1 mrg return false;
6218 1.1 mrg
6219 1.1 mrg if (mold->ts.type == BT_BOZ && illegal_boz_arg (mold))
6220 1.1 mrg return false;
6221 1.1 mrg
6222 1.1 mrg if (gfc_invalid_null_arg (mold))
6223 1.1 mrg return false;
6224 1.1 mrg
6225 1.1 mrg /* MOLD shall be a scalar or array of any type. */
6226 1.1 mrg if (mold->ts.type == BT_PROCEDURE
6227 1.1 mrg && mold->symtree->n.sym->attr.subroutine == 1)
6228 1.1 mrg {
6229 1.1 mrg gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L "
6230 1.1 mrg "must not be a %s", &mold->where,
6231 1.1 mrg gfc_basic_typename (mold->ts.type));
6232 1.1 mrg return false;
6233 1.1 mrg }
6234 1.1 mrg
6235 1.1 mrg if (mold->ts.type == BT_HOLLERITH)
6236 1.1 mrg {
6237 1.1 mrg gfc_error ("%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be"
6238 1.1 mrg " %s", &mold->where, gfc_basic_typename (BT_HOLLERITH));
6239 1.1 mrg return false;
6240 1.1 mrg }
6241 1.1 mrg
6242 1.1 mrg /* SIZE (optional) shall be an integer scalar. The corresponding actual
6243 1.1 mrg argument shall not be an optional dummy argument. */
6244 1.1 mrg if (size != NULL)
6245 1.1 mrg {
6246 1.1 mrg if (!type_check (size, 2, BT_INTEGER))
6247 1.1 mrg {
6248 1.1 mrg if (size->ts.type == BT_BOZ)
6249 1.1 mrg reset_boz (size);
6250 1.1 mrg return false;
6251 1.1 mrg }
6252 1.1 mrg
6253 1.1 mrg if (!scalar_check (size, 2))
6254 1.1 mrg return false;
6255 1.1 mrg
6256 1.1 mrg if (!nonoptional_check (size, 2))
6257 1.1 mrg return false;
6258 1.1 mrg }
6259 1.1 mrg
6260 1.1 mrg if (!warn_surprising)
6261 1.1 mrg return true;
6262 1.1 mrg
6263 1.1 mrg /* If we can't calculate the sizes, we cannot check any more.
6264 1.1 mrg Return true for that case. */
6265 1.1 mrg
6266 1.1 mrg if (!gfc_calculate_transfer_sizes (source, mold, size, &source_size,
6267 1.1 mrg &result_size, NULL))
6268 1.1 mrg return true;
6269 1.1 mrg
6270 1.1 mrg if (source_size < result_size)
6271 1.1 mrg gfc_warning (OPT_Wsurprising,
6272 1.1 mrg "Intrinsic TRANSFER at %L has partly undefined result: "
6273 1.1 mrg "source size %ld < result size %ld", &source->where,
6274 1.1 mrg (long) source_size, (long) result_size);
6275 1.1 mrg
6276 1.1 mrg return true;
6277 1.1 mrg }
6278 1.1 mrg
6279 1.1 mrg
6280 1.1 mrg bool
6281 1.1 mrg gfc_check_transpose (gfc_expr *matrix)
6282 1.1 mrg {
6283 1.1 mrg if (!rank_check (matrix, 0, 2))
6284 1.1 mrg return false;
6285 1.1 mrg
6286 1.1 mrg return true;
6287 1.1 mrg }
6288 1.1 mrg
6289 1.1 mrg
6290 1.1 mrg bool
6291 1.1 mrg gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
6292 1.1 mrg {
6293 1.1 mrg if (!array_check (array, 0))
6294 1.1 mrg return false;
6295 1.1 mrg
6296 1.1 mrg if (!dim_check (dim, 1, false))
6297 1.1 mrg return false;
6298 1.1 mrg
6299 1.1 mrg if (!dim_rank_check (dim, array, 0))
6300 1.1 mrg return false;
6301 1.1 mrg
6302 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
6303 1.1 mrg return false;
6304 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
6305 1.1 mrg "with KIND argument at %L",
6306 1.1 mrg gfc_current_intrinsic, &kind->where))
6307 1.1 mrg return false;
6308 1.1 mrg
6309 1.1 mrg return true;
6310 1.1 mrg }
6311 1.1 mrg
6312 1.1 mrg
6313 1.1 mrg bool
6314 1.1 mrg gfc_check_ucobound (gfc_expr *coarray, gfc_expr *dim, gfc_expr *kind)
6315 1.1 mrg {
6316 1.1 mrg if (flag_coarray == GFC_FCOARRAY_NONE)
6317 1.1 mrg {
6318 1.1 mrg gfc_fatal_error ("Coarrays disabled at %C, use %<-fcoarray=%> to enable");
6319 1.1 mrg return false;
6320 1.1 mrg }
6321 1.1 mrg
6322 1.1 mrg if (!coarray_check (coarray, 0))
6323 1.1 mrg return false;
6324 1.1 mrg
6325 1.1 mrg if (dim != NULL)
6326 1.1 mrg {
6327 1.1 mrg if (!dim_check (dim, 1, false))
6328 1.1 mrg return false;
6329 1.1 mrg
6330 1.1 mrg if (!dim_corank_check (dim, coarray))
6331 1.1 mrg return false;
6332 1.1 mrg }
6333 1.1 mrg
6334 1.1 mrg if (!kind_check (kind, 2, BT_INTEGER))
6335 1.1 mrg return false;
6336 1.1 mrg
6337 1.1 mrg return true;
6338 1.1 mrg }
6339 1.1 mrg
6340 1.1 mrg
6341 1.1 mrg bool
6342 1.1 mrg gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
6343 1.1 mrg {
6344 1.1 mrg mpz_t vector_size;
6345 1.1 mrg
6346 1.1 mrg if (!rank_check (vector, 0, 1))
6347 1.1 mrg return false;
6348 1.1 mrg
6349 1.1 mrg if (!array_check (mask, 1))
6350 1.1 mrg return false;
6351 1.1 mrg
6352 1.1 mrg if (!type_check (mask, 1, BT_LOGICAL))
6353 1.1 mrg return false;
6354 1.1 mrg
6355 1.1 mrg if (!same_type_check (vector, 0, field, 2))
6356 1.1 mrg return false;
6357 1.1 mrg
6358 1.1 mrg gfc_simplify_expr (mask, 0);
6359 1.1 mrg
6360 1.1 mrg if (mask->expr_type == EXPR_ARRAY
6361 1.1 mrg && gfc_array_size (vector, &vector_size))
6362 1.1 mrg {
6363 1.1 mrg int mask_true_count = 0;
6364 1.1 mrg gfc_constructor *mask_ctor;
6365 1.1 mrg mask_ctor = gfc_constructor_first (mask->value.constructor);
6366 1.1 mrg while (mask_ctor)
6367 1.1 mrg {
6368 1.1 mrg if (mask_ctor->expr->expr_type != EXPR_CONSTANT)
6369 1.1 mrg {
6370 1.1 mrg mask_true_count = 0;
6371 1.1 mrg break;
6372 1.1 mrg }
6373 1.1 mrg
6374 1.1 mrg if (mask_ctor->expr->value.logical)
6375 1.1 mrg mask_true_count++;
6376 1.1 mrg
6377 1.1 mrg mask_ctor = gfc_constructor_next (mask_ctor);
6378 1.1 mrg }
6379 1.1 mrg
6380 1.1 mrg if (mpz_get_si (vector_size) < mask_true_count)
6381 1.1 mrg {
6382 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must "
6383 1.1 mrg "provide at least as many elements as there "
6384 1.1 mrg "are .TRUE. values in %qs (%ld/%d)",
6385 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
6386 1.1 mrg &vector->where, gfc_current_intrinsic_arg[1]->name,
6387 1.1 mrg mpz_get_si (vector_size), mask_true_count);
6388 1.1 mrg return false;
6389 1.1 mrg }
6390 1.1 mrg
6391 1.1 mrg mpz_clear (vector_size);
6392 1.1 mrg }
6393 1.1 mrg
6394 1.1 mrg if (mask->rank != field->rank && field->rank != 0)
6395 1.1 mrg {
6396 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must have "
6397 1.1 mrg "the same rank as %qs or be a scalar",
6398 1.1 mrg gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
6399 1.1 mrg &field->where, gfc_current_intrinsic_arg[1]->name);
6400 1.1 mrg return false;
6401 1.1 mrg }
6402 1.1 mrg
6403 1.1 mrg if (mask->rank == field->rank)
6404 1.1 mrg {
6405 1.1 mrg int i;
6406 1.1 mrg for (i = 0; i < field->rank; i++)
6407 1.1 mrg if (! identical_dimen_shape (mask, i, field, i))
6408 1.1 mrg {
6409 1.1 mrg gfc_error ("%qs and %qs arguments of %qs intrinsic at %L "
6410 1.1 mrg "must have identical shape.",
6411 1.1 mrg gfc_current_intrinsic_arg[2]->name,
6412 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6413 1.1 mrg &field->where);
6414 1.1 mrg }
6415 1.1 mrg }
6416 1.1 mrg
6417 1.1 mrg return true;
6418 1.1 mrg }
6419 1.1 mrg
6420 1.1 mrg
6421 1.1 mrg bool
6422 1.1 mrg gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind)
6423 1.1 mrg {
6424 1.1 mrg if (!type_check (x, 0, BT_CHARACTER))
6425 1.1 mrg return false;
6426 1.1 mrg
6427 1.1 mrg if (!same_type_check (x, 0, y, 1))
6428 1.1 mrg return false;
6429 1.1 mrg
6430 1.1 mrg if (z != NULL && !type_check (z, 2, BT_LOGICAL))
6431 1.1 mrg return false;
6432 1.1 mrg
6433 1.1 mrg if (!kind_check (kind, 3, BT_INTEGER))
6434 1.1 mrg return false;
6435 1.1 mrg if (kind && !gfc_notify_std (GFC_STD_F2003, "%qs intrinsic "
6436 1.1 mrg "with KIND argument at %L",
6437 1.1 mrg gfc_current_intrinsic, &kind->where))
6438 1.1 mrg return false;
6439 1.1 mrg
6440 1.1 mrg return true;
6441 1.1 mrg }
6442 1.1 mrg
6443 1.1 mrg
6444 1.1 mrg bool
6445 1.1 mrg gfc_check_trim (gfc_expr *x)
6446 1.1 mrg {
6447 1.1 mrg if (!type_check (x, 0, BT_CHARACTER))
6448 1.1 mrg return false;
6449 1.1 mrg
6450 1.1 mrg if (gfc_invalid_null_arg (x))
6451 1.1 mrg return false;
6452 1.1 mrg
6453 1.1 mrg if (!scalar_check (x, 0))
6454 1.1 mrg return false;
6455 1.1 mrg
6456 1.1 mrg return true;
6457 1.1 mrg }
6458 1.1 mrg
6459 1.1 mrg
6460 1.1 mrg bool
6461 1.1 mrg gfc_check_ttynam (gfc_expr *unit)
6462 1.1 mrg {
6463 1.1 mrg if (!scalar_check (unit, 0))
6464 1.1 mrg return false;
6465 1.1 mrg
6466 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
6467 1.1 mrg return false;
6468 1.1 mrg
6469 1.1 mrg return true;
6470 1.1 mrg }
6471 1.1 mrg
6472 1.1 mrg
6473 1.1 mrg /************* Check functions for intrinsic subroutines *************/
6474 1.1 mrg
6475 1.1 mrg bool
6476 1.1 mrg gfc_check_cpu_time (gfc_expr *time)
6477 1.1 mrg {
6478 1.1 mrg if (!scalar_check (time, 0))
6479 1.1 mrg return false;
6480 1.1 mrg
6481 1.1 mrg if (!type_check (time, 0, BT_REAL))
6482 1.1 mrg return false;
6483 1.1 mrg
6484 1.1 mrg if (!variable_check (time, 0, false))
6485 1.1 mrg return false;
6486 1.1 mrg
6487 1.1 mrg return true;
6488 1.1 mrg }
6489 1.1 mrg
6490 1.1 mrg
6491 1.1 mrg bool
6492 1.1 mrg gfc_check_date_and_time (gfc_expr *date, gfc_expr *time,
6493 1.1 mrg gfc_expr *zone, gfc_expr *values)
6494 1.1 mrg {
6495 1.1 mrg if (date != NULL)
6496 1.1 mrg {
6497 1.1 mrg if (!type_check (date, 0, BT_CHARACTER))
6498 1.1 mrg return false;
6499 1.1 mrg if (!kind_value_check (date, 0, gfc_default_character_kind))
6500 1.1 mrg return false;
6501 1.1 mrg if (!scalar_check (date, 0))
6502 1.1 mrg return false;
6503 1.1 mrg if (!variable_check (date, 0, false))
6504 1.1 mrg return false;
6505 1.1 mrg }
6506 1.1 mrg
6507 1.1 mrg if (time != NULL)
6508 1.1 mrg {
6509 1.1 mrg if (!type_check (time, 1, BT_CHARACTER))
6510 1.1 mrg return false;
6511 1.1 mrg if (!kind_value_check (time, 1, gfc_default_character_kind))
6512 1.1 mrg return false;
6513 1.1 mrg if (!scalar_check (time, 1))
6514 1.1 mrg return false;
6515 1.1 mrg if (!variable_check (time, 1, false))
6516 1.1 mrg return false;
6517 1.1 mrg }
6518 1.1 mrg
6519 1.1 mrg if (zone != NULL)
6520 1.1 mrg {
6521 1.1 mrg if (!type_check (zone, 2, BT_CHARACTER))
6522 1.1 mrg return false;
6523 1.1 mrg if (!kind_value_check (zone, 2, gfc_default_character_kind))
6524 1.1 mrg return false;
6525 1.1 mrg if (!scalar_check (zone, 2))
6526 1.1 mrg return false;
6527 1.1 mrg if (!variable_check (zone, 2, false))
6528 1.1 mrg return false;
6529 1.1 mrg }
6530 1.1 mrg
6531 1.1 mrg if (values != NULL)
6532 1.1 mrg {
6533 1.1 mrg if (!type_check (values, 3, BT_INTEGER))
6534 1.1 mrg return false;
6535 1.1 mrg if (!array_check (values, 3))
6536 1.1 mrg return false;
6537 1.1 mrg if (!rank_check (values, 3, 1))
6538 1.1 mrg return false;
6539 1.1 mrg if (!variable_check (values, 3, false))
6540 1.1 mrg return false;
6541 1.1 mrg }
6542 1.1 mrg
6543 1.1 mrg return true;
6544 1.1 mrg }
6545 1.1 mrg
6546 1.1 mrg
6547 1.1 mrg bool
6548 1.1 mrg gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len,
6549 1.1 mrg gfc_expr *to, gfc_expr *topos)
6550 1.1 mrg {
6551 1.1 mrg if (!type_check (from, 0, BT_INTEGER))
6552 1.1 mrg return false;
6553 1.1 mrg
6554 1.1 mrg if (!type_check (frompos, 1, BT_INTEGER))
6555 1.1 mrg return false;
6556 1.1 mrg
6557 1.1 mrg if (!type_check (len, 2, BT_INTEGER))
6558 1.1 mrg return false;
6559 1.1 mrg
6560 1.1 mrg if (!same_type_check (from, 0, to, 3))
6561 1.1 mrg return false;
6562 1.1 mrg
6563 1.1 mrg if (!variable_check (to, 3, false))
6564 1.1 mrg return false;
6565 1.1 mrg
6566 1.1 mrg if (!type_check (topos, 4, BT_INTEGER))
6567 1.1 mrg return false;
6568 1.1 mrg
6569 1.1 mrg if (!nonnegative_check ("frompos", frompos))
6570 1.1 mrg return false;
6571 1.1 mrg
6572 1.1 mrg if (!nonnegative_check ("topos", topos))
6573 1.1 mrg return false;
6574 1.1 mrg
6575 1.1 mrg if (!nonnegative_check ("len", len))
6576 1.1 mrg return false;
6577 1.1 mrg
6578 1.1 mrg if (!less_than_bitsize2 ("from", from, "frompos", frompos, "len", len))
6579 1.1 mrg return false;
6580 1.1 mrg
6581 1.1 mrg if (!less_than_bitsize2 ("to", to, "topos", topos, "len", len))
6582 1.1 mrg return false;
6583 1.1 mrg
6584 1.1 mrg return true;
6585 1.1 mrg }
6586 1.1 mrg
6587 1.1 mrg
6588 1.1 mrg /* Check the arguments for RANDOM_INIT. */
6589 1.1 mrg
6590 1.1 mrg bool
6591 1.1 mrg gfc_check_random_init (gfc_expr *repeatable, gfc_expr *image_distinct)
6592 1.1 mrg {
6593 1.1 mrg if (!type_check (repeatable, 0, BT_LOGICAL))
6594 1.1 mrg return false;
6595 1.1 mrg
6596 1.1 mrg if (!scalar_check (repeatable, 0))
6597 1.1 mrg return false;
6598 1.1 mrg
6599 1.1 mrg if (!type_check (image_distinct, 1, BT_LOGICAL))
6600 1.1 mrg return false;
6601 1.1 mrg
6602 1.1 mrg if (!scalar_check (image_distinct, 1))
6603 1.1 mrg return false;
6604 1.1 mrg
6605 1.1 mrg return true;
6606 1.1 mrg }
6607 1.1 mrg
6608 1.1 mrg
6609 1.1 mrg bool
6610 1.1 mrg gfc_check_random_number (gfc_expr *harvest)
6611 1.1 mrg {
6612 1.1 mrg if (!type_check (harvest, 0, BT_REAL))
6613 1.1 mrg return false;
6614 1.1 mrg
6615 1.1 mrg if (!variable_check (harvest, 0, false))
6616 1.1 mrg return false;
6617 1.1 mrg
6618 1.1 mrg return true;
6619 1.1 mrg }
6620 1.1 mrg
6621 1.1 mrg
6622 1.1 mrg bool
6623 1.1 mrg gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get)
6624 1.1 mrg {
6625 1.1 mrg unsigned int nargs = 0, seed_size;
6626 1.1 mrg locus *where = NULL;
6627 1.1 mrg mpz_t put_size, get_size;
6628 1.1 mrg
6629 1.1 mrg /* Keep the number of bytes in sync with master_state in
6630 1.1 mrg libgfortran/intrinsics/random.c. */
6631 1.1 mrg seed_size = 32 / gfc_default_integer_kind;
6632 1.1 mrg
6633 1.1 mrg if (size != NULL)
6634 1.1 mrg {
6635 1.1 mrg if (size->expr_type != EXPR_VARIABLE
6636 1.1 mrg || !size->symtree->n.sym->attr.optional)
6637 1.1 mrg nargs++;
6638 1.1 mrg
6639 1.1 mrg if (!scalar_check (size, 0))
6640 1.1 mrg return false;
6641 1.1 mrg
6642 1.1 mrg if (!type_check (size, 0, BT_INTEGER))
6643 1.1 mrg return false;
6644 1.1 mrg
6645 1.1 mrg if (!variable_check (size, 0, false))
6646 1.1 mrg return false;
6647 1.1 mrg
6648 1.1 mrg if (!kind_value_check (size, 0, gfc_default_integer_kind))
6649 1.1 mrg return false;
6650 1.1 mrg }
6651 1.1 mrg
6652 1.1 mrg if (put != NULL)
6653 1.1 mrg {
6654 1.1 mrg if (put->expr_type != EXPR_VARIABLE
6655 1.1 mrg || !put->symtree->n.sym->attr.optional)
6656 1.1 mrg {
6657 1.1 mrg nargs++;
6658 1.1 mrg where = &put->where;
6659 1.1 mrg }
6660 1.1 mrg
6661 1.1 mrg if (!array_check (put, 1))
6662 1.1 mrg return false;
6663 1.1 mrg
6664 1.1 mrg if (!rank_check (put, 1, 1))
6665 1.1 mrg return false;
6666 1.1 mrg
6667 1.1 mrg if (!type_check (put, 1, BT_INTEGER))
6668 1.1 mrg return false;
6669 1.1 mrg
6670 1.1 mrg if (!kind_value_check (put, 1, gfc_default_integer_kind))
6671 1.1 mrg return false;
6672 1.1 mrg
6673 1.1 mrg if (gfc_array_size (put, &put_size)
6674 1.1 mrg && mpz_get_ui (put_size) < seed_size)
6675 1.1 mrg gfc_error ("Size of %qs argument of %qs intrinsic at %L "
6676 1.1 mrg "too small (%i/%i)",
6677 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
6678 1.1 mrg &put->where, (int) mpz_get_ui (put_size), seed_size);
6679 1.1 mrg }
6680 1.1 mrg
6681 1.1 mrg if (get != NULL)
6682 1.1 mrg {
6683 1.1 mrg if (get->expr_type != EXPR_VARIABLE
6684 1.1 mrg || !get->symtree->n.sym->attr.optional)
6685 1.1 mrg {
6686 1.1 mrg nargs++;
6687 1.1 mrg where = &get->where;
6688 1.1 mrg }
6689 1.1 mrg
6690 1.1 mrg if (!array_check (get, 2))
6691 1.1 mrg return false;
6692 1.1 mrg
6693 1.1 mrg if (!rank_check (get, 2, 1))
6694 1.1 mrg return false;
6695 1.1 mrg
6696 1.1 mrg if (!type_check (get, 2, BT_INTEGER))
6697 1.1 mrg return false;
6698 1.1 mrg
6699 1.1 mrg if (!variable_check (get, 2, false))
6700 1.1 mrg return false;
6701 1.1 mrg
6702 1.1 mrg if (!kind_value_check (get, 2, gfc_default_integer_kind))
6703 1.1 mrg return false;
6704 1.1 mrg
6705 1.1 mrg if (gfc_array_size (get, &get_size)
6706 1.1 mrg && mpz_get_ui (get_size) < seed_size)
6707 1.1 mrg gfc_error ("Size of %qs argument of %qs intrinsic at %L "
6708 1.1 mrg "too small (%i/%i)",
6709 1.1 mrg gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
6710 1.1 mrg &get->where, (int) mpz_get_ui (get_size), seed_size);
6711 1.1 mrg }
6712 1.1 mrg
6713 1.1 mrg /* RANDOM_SEED may not have more than one non-optional argument. */
6714 1.1 mrg if (nargs > 1)
6715 1.1 mrg gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where);
6716 1.1 mrg
6717 1.1 mrg return true;
6718 1.1 mrg }
6719 1.1 mrg
6720 1.1 mrg bool
6721 1.1 mrg gfc_check_fe_runtime_error (gfc_actual_arglist *a)
6722 1.1 mrg {
6723 1.1 mrg gfc_expr *e;
6724 1.1 mrg size_t len, i;
6725 1.1 mrg int num_percent, nargs;
6726 1.1 mrg
6727 1.1 mrg e = a->expr;
6728 1.1 mrg if (e->expr_type != EXPR_CONSTANT)
6729 1.1 mrg return true;
6730 1.1 mrg
6731 1.1 mrg len = e->value.character.length;
6732 1.1 mrg if (e->value.character.string[len-1] != '\0')
6733 1.1 mrg gfc_internal_error ("fe_runtime_error string must be null terminated");
6734 1.1 mrg
6735 1.1 mrg num_percent = 0;
6736 1.1 mrg for (i=0; i<len-1; i++)
6737 1.1 mrg if (e->value.character.string[i] == '%')
6738 1.1 mrg num_percent ++;
6739 1.1 mrg
6740 1.1 mrg nargs = 0;
6741 1.1 mrg for (; a; a = a->next)
6742 1.1 mrg nargs ++;
6743 1.1 mrg
6744 1.1 mrg if (nargs -1 != num_percent)
6745 1.1 mrg gfc_internal_error ("fe_runtime_error: Wrong number of arguments (%d instead of %d)",
6746 1.1 mrg nargs, num_percent++);
6747 1.1 mrg
6748 1.1 mrg return true;
6749 1.1 mrg }
6750 1.1 mrg
6751 1.1 mrg bool
6752 1.1 mrg gfc_check_second_sub (gfc_expr *time)
6753 1.1 mrg {
6754 1.1 mrg if (!scalar_check (time, 0))
6755 1.1 mrg return false;
6756 1.1 mrg
6757 1.1 mrg if (!type_check (time, 0, BT_REAL))
6758 1.1 mrg return false;
6759 1.1 mrg
6760 1.1 mrg if (!kind_value_check (time, 0, 4))
6761 1.1 mrg return false;
6762 1.1 mrg
6763 1.1 mrg return true;
6764 1.1 mrg }
6765 1.1 mrg
6766 1.1 mrg
6767 1.1 mrg /* COUNT and COUNT_MAX of SYSTEM_CLOCK are scalar, default-kind integer
6768 1.1 mrg variables in Fortran 95. In Fortran 2003 and later, they can be of any
6769 1.1 mrg kind, and COUNT_RATE can be of type real. Note, count, count_rate, and
6770 1.1 mrg count_max are all optional arguments */
6771 1.1 mrg
6772 1.1 mrg bool
6773 1.1 mrg gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate,
6774 1.1 mrg gfc_expr *count_max)
6775 1.1 mrg {
6776 1.1 mrg if (count != NULL)
6777 1.1 mrg {
6778 1.1 mrg if (!scalar_check (count, 0))
6779 1.1 mrg return false;
6780 1.1 mrg
6781 1.1 mrg if (!type_check (count, 0, BT_INTEGER))
6782 1.1 mrg return false;
6783 1.1 mrg
6784 1.1 mrg if (count->ts.kind != gfc_default_integer_kind
6785 1.1 mrg && !gfc_notify_std (GFC_STD_F2003, "COUNT argument to "
6786 1.1 mrg "SYSTEM_CLOCK at %L has non-default kind",
6787 1.1 mrg &count->where))
6788 1.1 mrg return false;
6789 1.1 mrg
6790 1.1 mrg if (!variable_check (count, 0, false))
6791 1.1 mrg return false;
6792 1.1 mrg }
6793 1.1 mrg
6794 1.1 mrg if (count_rate != NULL)
6795 1.1 mrg {
6796 1.1 mrg if (!scalar_check (count_rate, 1))
6797 1.1 mrg return false;
6798 1.1 mrg
6799 1.1 mrg if (!variable_check (count_rate, 1, false))
6800 1.1 mrg return false;
6801 1.1 mrg
6802 1.1 mrg if (count_rate->ts.type == BT_REAL)
6803 1.1 mrg {
6804 1.1 mrg if (!gfc_notify_std (GFC_STD_F2003, "Real COUNT_RATE argument to "
6805 1.1 mrg "SYSTEM_CLOCK at %L", &count_rate->where))
6806 1.1 mrg return false;
6807 1.1 mrg }
6808 1.1 mrg else
6809 1.1 mrg {
6810 1.1 mrg if (!type_check (count_rate, 1, BT_INTEGER))
6811 1.1 mrg return false;
6812 1.1 mrg
6813 1.1 mrg if (count_rate->ts.kind != gfc_default_integer_kind
6814 1.1 mrg && !gfc_notify_std (GFC_STD_F2003, "COUNT_RATE argument to "
6815 1.1 mrg "SYSTEM_CLOCK at %L has non-default kind",
6816 1.1 mrg &count_rate->where))
6817 1.1 mrg return false;
6818 1.1 mrg }
6819 1.1 mrg
6820 1.1 mrg }
6821 1.1 mrg
6822 1.1 mrg if (count_max != NULL)
6823 1.1 mrg {
6824 1.1 mrg if (!scalar_check (count_max, 2))
6825 1.1 mrg return false;
6826 1.1 mrg
6827 1.1 mrg if (!type_check (count_max, 2, BT_INTEGER))
6828 1.1 mrg return false;
6829 1.1 mrg
6830 1.1 mrg if (count_max->ts.kind != gfc_default_integer_kind
6831 1.1 mrg && !gfc_notify_std (GFC_STD_F2003, "COUNT_MAX argument to "
6832 1.1 mrg "SYSTEM_CLOCK at %L has non-default kind",
6833 1.1 mrg &count_max->where))
6834 1.1 mrg return false;
6835 1.1 mrg
6836 1.1 mrg if (!variable_check (count_max, 2, false))
6837 1.1 mrg return false;
6838 1.1 mrg }
6839 1.1 mrg
6840 1.1 mrg return true;
6841 1.1 mrg }
6842 1.1 mrg
6843 1.1 mrg
6844 1.1 mrg bool
6845 1.1 mrg gfc_check_irand (gfc_expr *x)
6846 1.1 mrg {
6847 1.1 mrg if (x == NULL)
6848 1.1 mrg return true;
6849 1.1 mrg
6850 1.1 mrg if (!scalar_check (x, 0))
6851 1.1 mrg return false;
6852 1.1 mrg
6853 1.1 mrg if (!type_check (x, 0, BT_INTEGER))
6854 1.1 mrg return false;
6855 1.1 mrg
6856 1.1 mrg if (!kind_value_check (x, 0, 4))
6857 1.1 mrg return false;
6858 1.1 mrg
6859 1.1 mrg return true;
6860 1.1 mrg }
6861 1.1 mrg
6862 1.1 mrg
6863 1.1 mrg bool
6864 1.1 mrg gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status)
6865 1.1 mrg {
6866 1.1 mrg if (!scalar_check (seconds, 0))
6867 1.1 mrg return false;
6868 1.1 mrg if (!type_check (seconds, 0, BT_INTEGER))
6869 1.1 mrg return false;
6870 1.1 mrg
6871 1.1 mrg if (!int_or_proc_check (handler, 1))
6872 1.1 mrg return false;
6873 1.1 mrg if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
6874 1.1 mrg return false;
6875 1.1 mrg
6876 1.1 mrg if (status == NULL)
6877 1.1 mrg return true;
6878 1.1 mrg
6879 1.1 mrg if (!scalar_check (status, 2))
6880 1.1 mrg return false;
6881 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
6882 1.1 mrg return false;
6883 1.1 mrg if (!kind_value_check (status, 2, gfc_default_integer_kind))
6884 1.1 mrg return false;
6885 1.1 mrg
6886 1.1 mrg return true;
6887 1.1 mrg }
6888 1.1 mrg
6889 1.1 mrg
6890 1.1 mrg bool
6891 1.1 mrg gfc_check_rand (gfc_expr *x)
6892 1.1 mrg {
6893 1.1 mrg if (x == NULL)
6894 1.1 mrg return true;
6895 1.1 mrg
6896 1.1 mrg if (!scalar_check (x, 0))
6897 1.1 mrg return false;
6898 1.1 mrg
6899 1.1 mrg if (!type_check (x, 0, BT_INTEGER))
6900 1.1 mrg return false;
6901 1.1 mrg
6902 1.1 mrg if (!kind_value_check (x, 0, 4))
6903 1.1 mrg return false;
6904 1.1 mrg
6905 1.1 mrg return true;
6906 1.1 mrg }
6907 1.1 mrg
6908 1.1 mrg
6909 1.1 mrg bool
6910 1.1 mrg gfc_check_srand (gfc_expr *x)
6911 1.1 mrg {
6912 1.1 mrg if (!scalar_check (x, 0))
6913 1.1 mrg return false;
6914 1.1 mrg
6915 1.1 mrg if (!type_check (x, 0, BT_INTEGER))
6916 1.1 mrg return false;
6917 1.1 mrg
6918 1.1 mrg if (!kind_value_check (x, 0, 4))
6919 1.1 mrg return false;
6920 1.1 mrg
6921 1.1 mrg return true;
6922 1.1 mrg }
6923 1.1 mrg
6924 1.1 mrg
6925 1.1 mrg bool
6926 1.1 mrg gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result)
6927 1.1 mrg {
6928 1.1 mrg if (!scalar_check (time, 0))
6929 1.1 mrg return false;
6930 1.1 mrg if (!type_check (time, 0, BT_INTEGER))
6931 1.1 mrg return false;
6932 1.1 mrg
6933 1.1 mrg if (!type_check (result, 1, BT_CHARACTER))
6934 1.1 mrg return false;
6935 1.1 mrg if (!kind_value_check (result, 1, gfc_default_character_kind))
6936 1.1 mrg return false;
6937 1.1 mrg
6938 1.1 mrg return true;
6939 1.1 mrg }
6940 1.1 mrg
6941 1.1 mrg
6942 1.1 mrg bool
6943 1.1 mrg gfc_check_dtime_etime (gfc_expr *x)
6944 1.1 mrg {
6945 1.1 mrg if (!array_check (x, 0))
6946 1.1 mrg return false;
6947 1.1 mrg
6948 1.1 mrg if (!rank_check (x, 0, 1))
6949 1.1 mrg return false;
6950 1.1 mrg
6951 1.1 mrg if (!variable_check (x, 0, false))
6952 1.1 mrg return false;
6953 1.1 mrg
6954 1.1 mrg if (!type_check (x, 0, BT_REAL))
6955 1.1 mrg return false;
6956 1.1 mrg
6957 1.1 mrg if (!kind_value_check (x, 0, 4))
6958 1.1 mrg return false;
6959 1.1 mrg
6960 1.1 mrg return true;
6961 1.1 mrg }
6962 1.1 mrg
6963 1.1 mrg
6964 1.1 mrg bool
6965 1.1 mrg gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time)
6966 1.1 mrg {
6967 1.1 mrg if (!array_check (values, 0))
6968 1.1 mrg return false;
6969 1.1 mrg
6970 1.1 mrg if (!rank_check (values, 0, 1))
6971 1.1 mrg return false;
6972 1.1 mrg
6973 1.1 mrg if (!variable_check (values, 0, false))
6974 1.1 mrg return false;
6975 1.1 mrg
6976 1.1 mrg if (!type_check (values, 0, BT_REAL))
6977 1.1 mrg return false;
6978 1.1 mrg
6979 1.1 mrg if (!kind_value_check (values, 0, 4))
6980 1.1 mrg return false;
6981 1.1 mrg
6982 1.1 mrg if (!scalar_check (time, 1))
6983 1.1 mrg return false;
6984 1.1 mrg
6985 1.1 mrg if (!type_check (time, 1, BT_REAL))
6986 1.1 mrg return false;
6987 1.1 mrg
6988 1.1 mrg if (!kind_value_check (time, 1, 4))
6989 1.1 mrg return false;
6990 1.1 mrg
6991 1.1 mrg return true;
6992 1.1 mrg }
6993 1.1 mrg
6994 1.1 mrg
6995 1.1 mrg bool
6996 1.1 mrg gfc_check_fdate_sub (gfc_expr *date)
6997 1.1 mrg {
6998 1.1 mrg if (!type_check (date, 0, BT_CHARACTER))
6999 1.1 mrg return false;
7000 1.1 mrg if (!kind_value_check (date, 0, gfc_default_character_kind))
7001 1.1 mrg return false;
7002 1.1 mrg
7003 1.1 mrg return true;
7004 1.1 mrg }
7005 1.1 mrg
7006 1.1 mrg
7007 1.1 mrg bool
7008 1.1 mrg gfc_check_gerror (gfc_expr *msg)
7009 1.1 mrg {
7010 1.1 mrg if (!type_check (msg, 0, BT_CHARACTER))
7011 1.1 mrg return false;
7012 1.1 mrg if (!kind_value_check (msg, 0, gfc_default_character_kind))
7013 1.1 mrg return false;
7014 1.1 mrg
7015 1.1 mrg return true;
7016 1.1 mrg }
7017 1.1 mrg
7018 1.1 mrg
7019 1.1 mrg bool
7020 1.1 mrg gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status)
7021 1.1 mrg {
7022 1.1 mrg if (!type_check (cwd, 0, BT_CHARACTER))
7023 1.1 mrg return false;
7024 1.1 mrg if (!kind_value_check (cwd, 0, gfc_default_character_kind))
7025 1.1 mrg return false;
7026 1.1 mrg
7027 1.1 mrg if (status == NULL)
7028 1.1 mrg return true;
7029 1.1 mrg
7030 1.1 mrg if (!scalar_check (status, 1))
7031 1.1 mrg return false;
7032 1.1 mrg
7033 1.1 mrg if (!type_check (status, 1, BT_INTEGER))
7034 1.1 mrg return false;
7035 1.1 mrg
7036 1.1 mrg return true;
7037 1.1 mrg }
7038 1.1 mrg
7039 1.1 mrg
7040 1.1 mrg bool
7041 1.1 mrg gfc_check_getarg (gfc_expr *pos, gfc_expr *value)
7042 1.1 mrg {
7043 1.1 mrg if (!type_check (pos, 0, BT_INTEGER))
7044 1.1 mrg return false;
7045 1.1 mrg
7046 1.1 mrg if (pos->ts.kind > gfc_default_integer_kind)
7047 1.1 mrg {
7048 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be of a kind "
7049 1.1 mrg "not wider than the default kind (%d)",
7050 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
7051 1.1 mrg &pos->where, gfc_default_integer_kind);
7052 1.1 mrg return false;
7053 1.1 mrg }
7054 1.1 mrg
7055 1.1 mrg if (!type_check (value, 1, BT_CHARACTER))
7056 1.1 mrg return false;
7057 1.1 mrg if (!kind_value_check (value, 1, gfc_default_character_kind))
7058 1.1 mrg return false;
7059 1.1 mrg
7060 1.1 mrg return true;
7061 1.1 mrg }
7062 1.1 mrg
7063 1.1 mrg
7064 1.1 mrg bool
7065 1.1 mrg gfc_check_getlog (gfc_expr *msg)
7066 1.1 mrg {
7067 1.1 mrg if (!type_check (msg, 0, BT_CHARACTER))
7068 1.1 mrg return false;
7069 1.1 mrg if (!kind_value_check (msg, 0, gfc_default_character_kind))
7070 1.1 mrg return false;
7071 1.1 mrg
7072 1.1 mrg return true;
7073 1.1 mrg }
7074 1.1 mrg
7075 1.1 mrg
7076 1.1 mrg bool
7077 1.1 mrg gfc_check_exit (gfc_expr *status)
7078 1.1 mrg {
7079 1.1 mrg if (status == NULL)
7080 1.1 mrg return true;
7081 1.1 mrg
7082 1.1 mrg if (!type_check (status, 0, BT_INTEGER))
7083 1.1 mrg return false;
7084 1.1 mrg
7085 1.1 mrg if (!scalar_check (status, 0))
7086 1.1 mrg return false;
7087 1.1 mrg
7088 1.1 mrg return true;
7089 1.1 mrg }
7090 1.1 mrg
7091 1.1 mrg
7092 1.1 mrg bool
7093 1.1 mrg gfc_check_flush (gfc_expr *unit)
7094 1.1 mrg {
7095 1.1 mrg if (unit == NULL)
7096 1.1 mrg return true;
7097 1.1 mrg
7098 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
7099 1.1 mrg return false;
7100 1.1 mrg
7101 1.1 mrg if (!scalar_check (unit, 0))
7102 1.1 mrg return false;
7103 1.1 mrg
7104 1.1 mrg return true;
7105 1.1 mrg }
7106 1.1 mrg
7107 1.1 mrg
7108 1.1 mrg bool
7109 1.1 mrg gfc_check_free (gfc_expr *i)
7110 1.1 mrg {
7111 1.1 mrg if (!type_check (i, 0, BT_INTEGER))
7112 1.1 mrg return false;
7113 1.1 mrg
7114 1.1 mrg if (!scalar_check (i, 0))
7115 1.1 mrg return false;
7116 1.1 mrg
7117 1.1 mrg return true;
7118 1.1 mrg }
7119 1.1 mrg
7120 1.1 mrg
7121 1.1 mrg bool
7122 1.1 mrg gfc_check_hostnm (gfc_expr *name)
7123 1.1 mrg {
7124 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
7125 1.1 mrg return false;
7126 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
7127 1.1 mrg return false;
7128 1.1 mrg
7129 1.1 mrg return true;
7130 1.1 mrg }
7131 1.1 mrg
7132 1.1 mrg
7133 1.1 mrg bool
7134 1.1 mrg gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status)
7135 1.1 mrg {
7136 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
7137 1.1 mrg return false;
7138 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
7139 1.1 mrg return false;
7140 1.1 mrg
7141 1.1 mrg if (status == NULL)
7142 1.1 mrg return true;
7143 1.1 mrg
7144 1.1 mrg if (!scalar_check (status, 1))
7145 1.1 mrg return false;
7146 1.1 mrg
7147 1.1 mrg if (!type_check (status, 1, BT_INTEGER))
7148 1.1 mrg return false;
7149 1.1 mrg
7150 1.1 mrg return true;
7151 1.1 mrg }
7152 1.1 mrg
7153 1.1 mrg
7154 1.1 mrg bool
7155 1.1 mrg gfc_check_itime_idate (gfc_expr *values)
7156 1.1 mrg {
7157 1.1 mrg if (!array_check (values, 0))
7158 1.1 mrg return false;
7159 1.1 mrg
7160 1.1 mrg if (!rank_check (values, 0, 1))
7161 1.1 mrg return false;
7162 1.1 mrg
7163 1.1 mrg if (!variable_check (values, 0, false))
7164 1.1 mrg return false;
7165 1.1 mrg
7166 1.1 mrg if (!type_check (values, 0, BT_INTEGER))
7167 1.1 mrg return false;
7168 1.1 mrg
7169 1.1 mrg if (!kind_value_check (values, 0, gfc_default_integer_kind))
7170 1.1 mrg return false;
7171 1.1 mrg
7172 1.1 mrg return true;
7173 1.1 mrg }
7174 1.1 mrg
7175 1.1 mrg
7176 1.1 mrg bool
7177 1.1 mrg gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values)
7178 1.1 mrg {
7179 1.1 mrg if (!type_check (time, 0, BT_INTEGER))
7180 1.1 mrg return false;
7181 1.1 mrg
7182 1.1 mrg if (!kind_value_check (time, 0, gfc_default_integer_kind))
7183 1.1 mrg return false;
7184 1.1 mrg
7185 1.1 mrg if (!scalar_check (time, 0))
7186 1.1 mrg return false;
7187 1.1 mrg
7188 1.1 mrg if (!array_check (values, 1))
7189 1.1 mrg return false;
7190 1.1 mrg
7191 1.1 mrg if (!rank_check (values, 1, 1))
7192 1.1 mrg return false;
7193 1.1 mrg
7194 1.1 mrg if (!variable_check (values, 1, false))
7195 1.1 mrg return false;
7196 1.1 mrg
7197 1.1 mrg if (!type_check (values, 1, BT_INTEGER))
7198 1.1 mrg return false;
7199 1.1 mrg
7200 1.1 mrg if (!kind_value_check (values, 1, gfc_default_integer_kind))
7201 1.1 mrg return false;
7202 1.1 mrg
7203 1.1 mrg return true;
7204 1.1 mrg }
7205 1.1 mrg
7206 1.1 mrg
7207 1.1 mrg bool
7208 1.1 mrg gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name)
7209 1.1 mrg {
7210 1.1 mrg if (!scalar_check (unit, 0))
7211 1.1 mrg return false;
7212 1.1 mrg
7213 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
7214 1.1 mrg return false;
7215 1.1 mrg
7216 1.1 mrg if (!type_check (name, 1, BT_CHARACTER))
7217 1.1 mrg return false;
7218 1.1 mrg if (!kind_value_check (name, 1, gfc_default_character_kind))
7219 1.1 mrg return false;
7220 1.1 mrg
7221 1.1 mrg return true;
7222 1.1 mrg }
7223 1.1 mrg
7224 1.1 mrg
7225 1.1 mrg bool
7226 1.1 mrg gfc_check_is_contiguous (gfc_expr *array)
7227 1.1 mrg {
7228 1.1 mrg if (array->expr_type == EXPR_NULL)
7229 1.1 mrg {
7230 1.1 mrg gfc_error ("Actual argument at %L of %qs intrinsic shall be an "
7231 1.1 mrg "associated pointer", &array->where, gfc_current_intrinsic);
7232 1.1 mrg return false;
7233 1.1 mrg }
7234 1.1 mrg
7235 1.1 mrg if (!array_check (array, 0))
7236 1.1 mrg return false;
7237 1.1 mrg
7238 1.1 mrg return true;
7239 1.1 mrg }
7240 1.1 mrg
7241 1.1 mrg
7242 1.1 mrg bool
7243 1.1 mrg gfc_check_isatty (gfc_expr *unit)
7244 1.1 mrg {
7245 1.1 mrg if (unit == NULL)
7246 1.1 mrg return false;
7247 1.1 mrg
7248 1.1 mrg if (!type_check (unit, 0, BT_INTEGER))
7249 1.1 mrg return false;
7250 1.1 mrg
7251 1.1 mrg if (!scalar_check (unit, 0))
7252 1.1 mrg return false;
7253 1.1 mrg
7254 1.1 mrg return true;
7255 1.1 mrg }
7256 1.1 mrg
7257 1.1 mrg
7258 1.1 mrg bool
7259 1.1 mrg gfc_check_isnan (gfc_expr *x)
7260 1.1 mrg {
7261 1.1 mrg if (!type_check (x, 0, BT_REAL))
7262 1.1 mrg return false;
7263 1.1 mrg
7264 1.1 mrg return true;
7265 1.1 mrg }
7266 1.1 mrg
7267 1.1 mrg
7268 1.1 mrg bool
7269 1.1 mrg gfc_check_perror (gfc_expr *string)
7270 1.1 mrg {
7271 1.1 mrg if (!type_check (string, 0, BT_CHARACTER))
7272 1.1 mrg return false;
7273 1.1 mrg if (!kind_value_check (string, 0, gfc_default_character_kind))
7274 1.1 mrg return false;
7275 1.1 mrg
7276 1.1 mrg return true;
7277 1.1 mrg }
7278 1.1 mrg
7279 1.1 mrg
7280 1.1 mrg bool
7281 1.1 mrg gfc_check_umask (gfc_expr *mask)
7282 1.1 mrg {
7283 1.1 mrg if (!type_check (mask, 0, BT_INTEGER))
7284 1.1 mrg return false;
7285 1.1 mrg
7286 1.1 mrg if (!scalar_check (mask, 0))
7287 1.1 mrg return false;
7288 1.1 mrg
7289 1.1 mrg return true;
7290 1.1 mrg }
7291 1.1 mrg
7292 1.1 mrg
7293 1.1 mrg bool
7294 1.1 mrg gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old)
7295 1.1 mrg {
7296 1.1 mrg if (!type_check (mask, 0, BT_INTEGER))
7297 1.1 mrg return false;
7298 1.1 mrg
7299 1.1 mrg if (!scalar_check (mask, 0))
7300 1.1 mrg return false;
7301 1.1 mrg
7302 1.1 mrg if (old == NULL)
7303 1.1 mrg return true;
7304 1.1 mrg
7305 1.1 mrg if (!scalar_check (old, 1))
7306 1.1 mrg return false;
7307 1.1 mrg
7308 1.1 mrg if (!type_check (old, 1, BT_INTEGER))
7309 1.1 mrg return false;
7310 1.1 mrg
7311 1.1 mrg return true;
7312 1.1 mrg }
7313 1.1 mrg
7314 1.1 mrg
7315 1.1 mrg bool
7316 1.1 mrg gfc_check_unlink (gfc_expr *name)
7317 1.1 mrg {
7318 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
7319 1.1 mrg return false;
7320 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
7321 1.1 mrg return false;
7322 1.1 mrg
7323 1.1 mrg return true;
7324 1.1 mrg }
7325 1.1 mrg
7326 1.1 mrg
7327 1.1 mrg bool
7328 1.1 mrg gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status)
7329 1.1 mrg {
7330 1.1 mrg if (!type_check (name, 0, BT_CHARACTER))
7331 1.1 mrg return false;
7332 1.1 mrg if (!kind_value_check (name, 0, gfc_default_character_kind))
7333 1.1 mrg return false;
7334 1.1 mrg
7335 1.1 mrg if (status == NULL)
7336 1.1 mrg return true;
7337 1.1 mrg
7338 1.1 mrg if (!scalar_check (status, 1))
7339 1.1 mrg return false;
7340 1.1 mrg
7341 1.1 mrg if (!type_check (status, 1, BT_INTEGER))
7342 1.1 mrg return false;
7343 1.1 mrg
7344 1.1 mrg return true;
7345 1.1 mrg }
7346 1.1 mrg
7347 1.1 mrg
7348 1.1 mrg bool
7349 1.1 mrg gfc_check_signal (gfc_expr *number, gfc_expr *handler)
7350 1.1 mrg {
7351 1.1 mrg if (!scalar_check (number, 0))
7352 1.1 mrg return false;
7353 1.1 mrg if (!type_check (number, 0, BT_INTEGER))
7354 1.1 mrg return false;
7355 1.1 mrg
7356 1.1 mrg if (!int_or_proc_check (handler, 1))
7357 1.1 mrg return false;
7358 1.1 mrg if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
7359 1.1 mrg return false;
7360 1.1 mrg
7361 1.1 mrg return true;
7362 1.1 mrg }
7363 1.1 mrg
7364 1.1 mrg
7365 1.1 mrg bool
7366 1.1 mrg gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status)
7367 1.1 mrg {
7368 1.1 mrg if (!scalar_check (number, 0))
7369 1.1 mrg return false;
7370 1.1 mrg if (!type_check (number, 0, BT_INTEGER))
7371 1.1 mrg return false;
7372 1.1 mrg
7373 1.1 mrg if (!int_or_proc_check (handler, 1))
7374 1.1 mrg return false;
7375 1.1 mrg if (handler->ts.type == BT_INTEGER && !scalar_check (handler, 1))
7376 1.1 mrg return false;
7377 1.1 mrg
7378 1.1 mrg if (status == NULL)
7379 1.1 mrg return true;
7380 1.1 mrg
7381 1.1 mrg if (!type_check (status, 2, BT_INTEGER))
7382 1.1 mrg return false;
7383 1.1 mrg if (!scalar_check (status, 2))
7384 1.1 mrg return false;
7385 1.1 mrg
7386 1.1 mrg return true;
7387 1.1 mrg }
7388 1.1 mrg
7389 1.1 mrg
7390 1.1 mrg bool
7391 1.1 mrg gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status)
7392 1.1 mrg {
7393 1.1 mrg if (!type_check (cmd, 0, BT_CHARACTER))
7394 1.1 mrg return false;
7395 1.1 mrg if (!kind_value_check (cmd, 0, gfc_default_character_kind))
7396 1.1 mrg return false;
7397 1.1 mrg
7398 1.1 mrg if (!scalar_check (status, 1))
7399 1.1 mrg return false;
7400 1.1 mrg
7401 1.1 mrg if (!type_check (status, 1, BT_INTEGER))
7402 1.1 mrg return false;
7403 1.1 mrg
7404 1.1 mrg if (!kind_value_check (status, 1, gfc_default_integer_kind))
7405 1.1 mrg return false;
7406 1.1 mrg
7407 1.1 mrg return true;
7408 1.1 mrg }
7409 1.1 mrg
7410 1.1 mrg
7411 1.1 mrg /* This is used for the GNU intrinsics AND, OR and XOR. */
7412 1.1 mrg bool
7413 1.1 mrg gfc_check_and (gfc_expr *i, gfc_expr *j)
7414 1.1 mrg {
7415 1.1 mrg if (i->ts.type != BT_INTEGER
7416 1.1 mrg && i->ts.type != BT_LOGICAL
7417 1.1 mrg && i->ts.type != BT_BOZ)
7418 1.1 mrg {
7419 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER, "
7420 1.1 mrg "LOGICAL, or a BOZ literal constant",
7421 1.1 mrg gfc_current_intrinsic_arg[0]->name,
7422 1.1 mrg gfc_current_intrinsic, &i->where);
7423 1.1 mrg return false;
7424 1.1 mrg }
7425 1.1 mrg
7426 1.1 mrg if (j->ts.type != BT_INTEGER
7427 1.1 mrg && j->ts.type != BT_LOGICAL
7428 1.1 mrg && j->ts.type != BT_BOZ)
7429 1.1 mrg {
7430 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER, "
7431 1.1 mrg "LOGICAL, or a BOZ literal constant",
7432 1.1 mrg gfc_current_intrinsic_arg[1]->name,
7433 1.1 mrg gfc_current_intrinsic, &j->where);
7434 1.1 mrg return false;
7435 1.1 mrg }
7436 1.1 mrg
7437 1.1 mrg /* i and j cannot both be BOZ literal constants. */
7438 1.1 mrg if (!boz_args_check (i, j))
7439 1.1 mrg return false;
7440 1.1 mrg
7441 1.1 mrg /* If i is BOZ and j is integer, convert i to type of j. */
7442 1.1 mrg if (i->ts.type == BT_BOZ)
7443 1.1 mrg {
7444 1.1 mrg if (j->ts.type != BT_INTEGER)
7445 1.1 mrg {
7446 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
7447 1.1 mrg gfc_current_intrinsic_arg[1]->name,
7448 1.1 mrg gfc_current_intrinsic, &j->where);
7449 1.1 mrg reset_boz (i);
7450 1.1 mrg return false;
7451 1.1 mrg }
7452 1.1 mrg if (!gfc_boz2int (i, j->ts.kind))
7453 1.1 mrg return false;
7454 1.1 mrg }
7455 1.1 mrg
7456 1.1 mrg /* If j is BOZ and i is integer, convert j to type of i. */
7457 1.1 mrg if (j->ts.type == BT_BOZ)
7458 1.1 mrg {
7459 1.1 mrg if (i->ts.type != BT_INTEGER)
7460 1.1 mrg {
7461 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be INTEGER",
7462 1.1 mrg gfc_current_intrinsic_arg[0]->name,
7463 1.1 mrg gfc_current_intrinsic, &j->where);
7464 1.1 mrg reset_boz (j);
7465 1.1 mrg return false;
7466 1.1 mrg }
7467 1.1 mrg if (!gfc_boz2int (j, i->ts.kind))
7468 1.1 mrg return false;
7469 1.1 mrg }
7470 1.1 mrg
7471 1.1 mrg if (!same_type_check (i, 0, j, 1, false))
7472 1.1 mrg return false;
7473 1.1 mrg
7474 1.1 mrg if (!scalar_check (i, 0))
7475 1.1 mrg return false;
7476 1.1 mrg
7477 1.1 mrg if (!scalar_check (j, 1))
7478 1.1 mrg return false;
7479 1.1 mrg
7480 1.1 mrg return true;
7481 1.1 mrg }
7482 1.1 mrg
7483 1.1 mrg
7484 1.1 mrg bool
7485 1.1 mrg gfc_check_storage_size (gfc_expr *a, gfc_expr *kind)
7486 1.1 mrg {
7487 1.1 mrg
7488 1.1 mrg if (a->expr_type == EXPR_NULL)
7489 1.1 mrg {
7490 1.1 mrg gfc_error ("Intrinsic function NULL at %L cannot be an actual "
7491 1.1 mrg "argument to STORAGE_SIZE, because it returns a "
7492 1.1 mrg "disassociated pointer", &a->where);
7493 1.1 mrg return false;
7494 1.1 mrg }
7495 1.1 mrg
7496 1.1 mrg if (a->ts.type == BT_ASSUMED)
7497 1.1 mrg {
7498 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
7499 1.1 mrg gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
7500 1.1 mrg &a->where);
7501 1.1 mrg return false;
7502 1.1 mrg }
7503 1.1 mrg
7504 1.1 mrg if (a->ts.type == BT_PROCEDURE)
7505 1.1 mrg {
7506 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L shall not be a "
7507 1.1 mrg "procedure", gfc_current_intrinsic_arg[0]->name,
7508 1.1 mrg gfc_current_intrinsic, &a->where);
7509 1.1 mrg return false;
7510 1.1 mrg }
7511 1.1 mrg
7512 1.1 mrg if (a->ts.type == BT_BOZ && illegal_boz_arg (a))
7513 1.1 mrg return false;
7514 1.1 mrg
7515 1.1 mrg if (kind == NULL)
7516 1.1 mrg return true;
7517 1.1 mrg
7518 1.1 mrg if (!type_check (kind, 1, BT_INTEGER))
7519 1.1 mrg return false;
7520 1.1 mrg
7521 1.1 mrg if (!scalar_check (kind, 1))
7522 1.1 mrg return false;
7523 1.1 mrg
7524 1.1 mrg if (kind->expr_type != EXPR_CONSTANT)
7525 1.1 mrg {
7526 1.1 mrg gfc_error ("%qs argument of %qs intrinsic at %L must be a constant",
7527 1.1 mrg gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
7528 1.1 mrg &kind->where);
7529 1.1 mrg return false;
7530 1.1 mrg }
7531 1.1 mrg
7532 1.1 mrg return true;
7533 1.1 mrg }
7534