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