1 /* Primary expression subroutines 2 Copyright (C) 2000-2019 Free Software Foundation, Inc. 3 Contributed by Andy Vaught 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it under 8 the terms of the GNU General Public License as published by the Free 9 Software Foundation; either version 3, or (at your option) any later 10 version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 #include "config.h" 22 #include "system.h" 23 #include "coretypes.h" 24 #include "options.h" 25 #include "gfortran.h" 26 #include "arith.h" 27 #include "match.h" 28 #include "parse.h" 29 #include "constructor.h" 30 31 int matching_actual_arglist = 0; 32 33 /* Matches a kind-parameter expression, which is either a named 34 symbolic constant or a nonnegative integer constant. If 35 successful, sets the kind value to the correct integer. 36 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING 37 symbol like e.g. 'c_int'. */ 38 39 static match 40 match_kind_param (int *kind, int *is_iso_c) 41 { 42 char name[GFC_MAX_SYMBOL_LEN + 1]; 43 gfc_symbol *sym; 44 match m; 45 46 *is_iso_c = 0; 47 48 m = gfc_match_small_literal_int (kind, NULL); 49 if (m != MATCH_NO) 50 return m; 51 52 m = gfc_match_name (name); 53 if (m != MATCH_YES) 54 return m; 55 56 if (gfc_find_symbol (name, NULL, 1, &sym)) 57 return MATCH_ERROR; 58 59 if (sym == NULL) 60 return MATCH_NO; 61 62 *is_iso_c = sym->attr.is_iso_c; 63 64 if (sym->attr.flavor != FL_PARAMETER) 65 return MATCH_NO; 66 67 if (sym->value == NULL) 68 return MATCH_NO; 69 70 if (gfc_extract_int (sym->value, kind)) 71 return MATCH_NO; 72 73 gfc_set_sym_referenced (sym); 74 75 if (*kind < 0) 76 return MATCH_NO; 77 78 return MATCH_YES; 79 } 80 81 82 /* Get a trailing kind-specification for non-character variables. 83 Returns: 84 * the integer kind value or 85 * -1 if an error was generated, 86 * -2 if no kind was found. 87 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING 88 symbol like e.g. 'c_int'. */ 89 90 static int 91 get_kind (int *is_iso_c) 92 { 93 int kind; 94 match m; 95 96 *is_iso_c = 0; 97 98 if (gfc_match_char ('_') != MATCH_YES) 99 return -2; 100 101 m = match_kind_param (&kind, is_iso_c); 102 if (m == MATCH_NO) 103 gfc_error ("Missing kind-parameter at %C"); 104 105 return (m == MATCH_YES) ? kind : -1; 106 } 107 108 109 /* Given a character and a radix, see if the character is a valid 110 digit in that radix. */ 111 112 int 113 gfc_check_digit (char c, int radix) 114 { 115 int r; 116 117 switch (radix) 118 { 119 case 2: 120 r = ('0' <= c && c <= '1'); 121 break; 122 123 case 8: 124 r = ('0' <= c && c <= '7'); 125 break; 126 127 case 10: 128 r = ('0' <= c && c <= '9'); 129 break; 130 131 case 16: 132 r = ISXDIGIT (c); 133 break; 134 135 default: 136 gfc_internal_error ("gfc_check_digit(): bad radix"); 137 } 138 139 return r; 140 } 141 142 143 /* Match the digit string part of an integer if signflag is not set, 144 the signed digit string part if signflag is set. If the buffer 145 is NULL, we just count characters for the resolution pass. Returns 146 the number of characters matched, -1 for no match. */ 147 148 static int 149 match_digits (int signflag, int radix, char *buffer) 150 { 151 locus old_loc; 152 int length; 153 char c; 154 155 length = 0; 156 c = gfc_next_ascii_char (); 157 158 if (signflag && (c == '+' || c == '-')) 159 { 160 if (buffer != NULL) 161 *buffer++ = c; 162 gfc_gobble_whitespace (); 163 c = gfc_next_ascii_char (); 164 length++; 165 } 166 167 if (!gfc_check_digit (c, radix)) 168 return -1; 169 170 length++; 171 if (buffer != NULL) 172 *buffer++ = c; 173 174 for (;;) 175 { 176 old_loc = gfc_current_locus; 177 c = gfc_next_ascii_char (); 178 179 if (!gfc_check_digit (c, radix)) 180 break; 181 182 if (buffer != NULL) 183 *buffer++ = c; 184 length++; 185 } 186 187 gfc_current_locus = old_loc; 188 189 return length; 190 } 191 192 193 /* Match an integer (digit string and optional kind). 194 A sign will be accepted if signflag is set. */ 195 196 static match 197 match_integer_constant (gfc_expr **result, int signflag) 198 { 199 int length, kind, is_iso_c; 200 locus old_loc; 201 char *buffer; 202 gfc_expr *e; 203 204 old_loc = gfc_current_locus; 205 gfc_gobble_whitespace (); 206 207 length = match_digits (signflag, 10, NULL); 208 gfc_current_locus = old_loc; 209 if (length == -1) 210 return MATCH_NO; 211 212 buffer = (char *) alloca (length + 1); 213 memset (buffer, '\0', length + 1); 214 215 gfc_gobble_whitespace (); 216 217 match_digits (signflag, 10, buffer); 218 219 kind = get_kind (&is_iso_c); 220 if (kind == -2) 221 kind = gfc_default_integer_kind; 222 if (kind == -1) 223 return MATCH_ERROR; 224 225 if (kind == 4 && flag_integer4_kind == 8) 226 kind = 8; 227 228 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0) 229 { 230 gfc_error ("Integer kind %d at %C not available", kind); 231 return MATCH_ERROR; 232 } 233 234 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus); 235 e->ts.is_c_interop = is_iso_c; 236 237 if (gfc_range_check (e) != ARITH_OK) 238 { 239 gfc_error ("Integer too big for its kind at %C. This check can be " 240 "disabled with the option %<-fno-range-check%>"); 241 242 gfc_free_expr (e); 243 return MATCH_ERROR; 244 } 245 246 *result = e; 247 return MATCH_YES; 248 } 249 250 251 /* Match a Hollerith constant. */ 252 253 static match 254 match_hollerith_constant (gfc_expr **result) 255 { 256 locus old_loc; 257 gfc_expr *e = NULL; 258 int num, pad; 259 int i; 260 261 old_loc = gfc_current_locus; 262 gfc_gobble_whitespace (); 263 264 if (match_integer_constant (&e, 0) == MATCH_YES 265 && gfc_match_char ('h') == MATCH_YES) 266 { 267 if (!gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant at %C")) 268 goto cleanup; 269 270 if (gfc_extract_int (e, &num, 1)) 271 goto cleanup; 272 if (num == 0) 273 { 274 gfc_error ("Invalid Hollerith constant: %L must contain at least " 275 "one character", &old_loc); 276 goto cleanup; 277 } 278 if (e->ts.kind != gfc_default_integer_kind) 279 { 280 gfc_error ("Invalid Hollerith constant: Integer kind at %L " 281 "should be default", &old_loc); 282 goto cleanup; 283 } 284 else 285 { 286 gfc_free_expr (e); 287 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind, 288 &gfc_current_locus); 289 290 /* Calculate padding needed to fit default integer memory. */ 291 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind); 292 293 e->representation.string = XCNEWVEC (char, num + pad + 1); 294 295 for (i = 0; i < num; i++) 296 { 297 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN); 298 if (! gfc_wide_fits_in_byte (c)) 299 { 300 gfc_error ("Invalid Hollerith constant at %L contains a " 301 "wide character", &old_loc); 302 goto cleanup; 303 } 304 305 e->representation.string[i] = (unsigned char) c; 306 } 307 308 /* Now pad with blanks and end with a null char. */ 309 for (i = 0; i < pad; i++) 310 e->representation.string[num + i] = ' '; 311 312 e->representation.string[num + i] = '\0'; 313 e->representation.length = num + pad; 314 e->ts.u.pad = pad; 315 316 *result = e; 317 return MATCH_YES; 318 } 319 } 320 321 gfc_free_expr (e); 322 gfc_current_locus = old_loc; 323 return MATCH_NO; 324 325 cleanup: 326 gfc_free_expr (e); 327 return MATCH_ERROR; 328 } 329 330 331 /* Match a binary, octal or hexadecimal constant that can be found in 332 a DATA statement. The standard permits b'010...', o'73...', and 333 z'a1...' where b, o, and z can be capital letters. This function 334 also accepts postfixed forms of the constants: '01...'b, '73...'o, 335 and 'a1...'z. An additional extension is the use of x for z. */ 336 337 static match 338 match_boz_constant (gfc_expr **result) 339 { 340 int radix, length, x_hex, kind; 341 locus old_loc, start_loc; 342 char *buffer, post, delim; 343 gfc_expr *e; 344 345 start_loc = old_loc = gfc_current_locus; 346 gfc_gobble_whitespace (); 347 348 x_hex = 0; 349 switch (post = gfc_next_ascii_char ()) 350 { 351 case 'b': 352 radix = 2; 353 post = 0; 354 break; 355 case 'o': 356 radix = 8; 357 post = 0; 358 break; 359 case 'x': 360 x_hex = 1; 361 /* Fall through. */ 362 case 'z': 363 radix = 16; 364 post = 0; 365 break; 366 case '\'': 367 /* Fall through. */ 368 case '\"': 369 delim = post; 370 post = 1; 371 radix = 16; /* Set to accept any valid digit string. */ 372 break; 373 default: 374 goto backup; 375 } 376 377 /* No whitespace allowed here. */ 378 379 if (post == 0) 380 delim = gfc_next_ascii_char (); 381 382 if (delim != '\'' && delim != '\"') 383 goto backup; 384 385 if (x_hex 386 && (!gfc_notify_std(GFC_STD_GNU, "Hexadecimal " 387 "constant at %C uses non-standard syntax"))) 388 return MATCH_ERROR; 389 390 old_loc = gfc_current_locus; 391 392 length = match_digits (0, radix, NULL); 393 if (length == -1) 394 { 395 gfc_error ("Empty set of digits in BOZ constant at %C"); 396 return MATCH_ERROR; 397 } 398 399 if (gfc_next_ascii_char () != delim) 400 { 401 gfc_error ("Illegal character in BOZ constant at %C"); 402 return MATCH_ERROR; 403 } 404 405 if (post == 1) 406 { 407 switch (gfc_next_ascii_char ()) 408 { 409 case 'b': 410 radix = 2; 411 break; 412 case 'o': 413 radix = 8; 414 break; 415 case 'x': 416 /* Fall through. */ 417 case 'z': 418 radix = 16; 419 break; 420 default: 421 goto backup; 422 } 423 424 if (!gfc_notify_std (GFC_STD_GNU, "BOZ constant " 425 "at %C uses non-standard postfix syntax")) 426 return MATCH_ERROR; 427 } 428 429 gfc_current_locus = old_loc; 430 431 buffer = (char *) alloca (length + 1); 432 memset (buffer, '\0', length + 1); 433 434 match_digits (0, radix, buffer); 435 gfc_next_ascii_char (); /* Eat delimiter. */ 436 if (post == 1) 437 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */ 438 439 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find 440 "If a data-stmt-constant is a boz-literal-constant, the corresponding 441 variable shall be of type integer. The boz-literal-constant is treated 442 as if it were an int-literal-constant with a kind-param that specifies 443 the representation method with the largest decimal exponent range 444 supported by the processor." */ 445 446 kind = gfc_max_integer_kind; 447 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus); 448 449 /* Mark as boz variable. */ 450 e->is_boz = 1; 451 452 if (gfc_range_check (e) != ARITH_OK) 453 { 454 gfc_error ("Integer too big for integer kind %i at %C", kind); 455 gfc_free_expr (e); 456 return MATCH_ERROR; 457 } 458 459 if (!gfc_in_match_data () 460 && (!gfc_notify_std(GFC_STD_F2003, "BOZ used outside a DATA " 461 "statement at %C"))) 462 return MATCH_ERROR; 463 464 *result = e; 465 return MATCH_YES; 466 467 backup: 468 gfc_current_locus = start_loc; 469 return MATCH_NO; 470 } 471 472 473 /* Match a real constant of some sort. Allow a signed constant if signflag 474 is nonzero. */ 475 476 static match 477 match_real_constant (gfc_expr **result, int signflag) 478 { 479 int kind, count, seen_dp, seen_digits, is_iso_c, default_exponent; 480 locus old_loc, temp_loc; 481 char *p, *buffer, c, exp_char; 482 gfc_expr *e; 483 bool negate; 484 485 old_loc = gfc_current_locus; 486 gfc_gobble_whitespace (); 487 488 e = NULL; 489 490 default_exponent = 0; 491 count = 0; 492 seen_dp = 0; 493 seen_digits = 0; 494 exp_char = ' '; 495 negate = FALSE; 496 497 c = gfc_next_ascii_char (); 498 if (signflag && (c == '+' || c == '-')) 499 { 500 if (c == '-') 501 negate = TRUE; 502 503 gfc_gobble_whitespace (); 504 c = gfc_next_ascii_char (); 505 } 506 507 /* Scan significand. */ 508 for (;; c = gfc_next_ascii_char (), count++) 509 { 510 if (c == '.') 511 { 512 if (seen_dp) 513 goto done; 514 515 /* Check to see if "." goes with a following operator like 516 ".eq.". */ 517 temp_loc = gfc_current_locus; 518 c = gfc_next_ascii_char (); 519 520 if (c == 'e' || c == 'd' || c == 'q') 521 { 522 c = gfc_next_ascii_char (); 523 if (c == '.') 524 goto done; /* Operator named .e. or .d. */ 525 } 526 527 if (ISALPHA (c)) 528 goto done; /* Distinguish 1.e9 from 1.eq.2 */ 529 530 gfc_current_locus = temp_loc; 531 seen_dp = 1; 532 continue; 533 } 534 535 if (ISDIGIT (c)) 536 { 537 seen_digits = 1; 538 continue; 539 } 540 541 break; 542 } 543 544 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q')) 545 goto done; 546 exp_char = c; 547 548 549 if (c == 'q') 550 { 551 if (!gfc_notify_std (GFC_STD_GNU, "exponent-letter 'q' in " 552 "real-literal-constant at %C")) 553 return MATCH_ERROR; 554 else if (warn_real_q_constant) 555 gfc_warning (OPT_Wreal_q_constant, 556 "Extension: exponent-letter %<q%> in real-literal-constant " 557 "at %C"); 558 } 559 560 /* Scan exponent. */ 561 c = gfc_next_ascii_char (); 562 count++; 563 564 if (c == '+' || c == '-') 565 { /* optional sign */ 566 c = gfc_next_ascii_char (); 567 count++; 568 } 569 570 if (!ISDIGIT (c)) 571 { 572 /* With -fdec, default exponent to 0 instead of complaining. */ 573 if (flag_dec) 574 default_exponent = 1; 575 else 576 { 577 gfc_error ("Missing exponent in real number at %C"); 578 return MATCH_ERROR; 579 } 580 } 581 582 while (ISDIGIT (c)) 583 { 584 c = gfc_next_ascii_char (); 585 count++; 586 } 587 588 done: 589 /* Check that we have a numeric constant. */ 590 if (!seen_digits || (!seen_dp && exp_char == ' ')) 591 { 592 gfc_current_locus = old_loc; 593 return MATCH_NO; 594 } 595 596 /* Convert the number. */ 597 gfc_current_locus = old_loc; 598 gfc_gobble_whitespace (); 599 600 buffer = (char *) alloca (count + default_exponent + 1); 601 memset (buffer, '\0', count + default_exponent + 1); 602 603 p = buffer; 604 c = gfc_next_ascii_char (); 605 if (c == '+' || c == '-') 606 { 607 gfc_gobble_whitespace (); 608 c = gfc_next_ascii_char (); 609 } 610 611 /* Hack for mpfr_set_str(). */ 612 for (;;) 613 { 614 if (c == 'd' || c == 'q') 615 *p = 'e'; 616 else 617 *p = c; 618 p++; 619 if (--count == 0) 620 break; 621 622 c = gfc_next_ascii_char (); 623 } 624 if (default_exponent) 625 *p++ = '0'; 626 627 kind = get_kind (&is_iso_c); 628 if (kind == -1) 629 goto cleanup; 630 631 switch (exp_char) 632 { 633 case 'd': 634 if (kind != -2) 635 { 636 gfc_error ("Real number at %C has a %<d%> exponent and an explicit " 637 "kind"); 638 goto cleanup; 639 } 640 kind = gfc_default_double_kind; 641 642 if (kind == 4) 643 { 644 if (flag_real4_kind == 8) 645 kind = 8; 646 if (flag_real4_kind == 10) 647 kind = 10; 648 if (flag_real4_kind == 16) 649 kind = 16; 650 } 651 652 if (kind == 8) 653 { 654 if (flag_real8_kind == 4) 655 kind = 4; 656 if (flag_real8_kind == 10) 657 kind = 10; 658 if (flag_real8_kind == 16) 659 kind = 16; 660 } 661 break; 662 663 case 'q': 664 if (kind != -2) 665 { 666 gfc_error ("Real number at %C has a %<q%> exponent and an explicit " 667 "kind"); 668 goto cleanup; 669 } 670 671 /* The maximum possible real kind type parameter is 16. First, try 672 that for the kind, then fallback to trying kind=10 (Intel 80 bit) 673 extended precision. If neither value works, just given up. */ 674 kind = 16; 675 if (gfc_validate_kind (BT_REAL, kind, true) < 0) 676 { 677 kind = 10; 678 if (gfc_validate_kind (BT_REAL, kind, true) < 0) 679 { 680 gfc_error ("Invalid exponent-letter %<q%> in " 681 "real-literal-constant at %C"); 682 goto cleanup; 683 } 684 } 685 break; 686 687 default: 688 if (kind == -2) 689 kind = gfc_default_real_kind; 690 691 if (kind == 4) 692 { 693 if (flag_real4_kind == 8) 694 kind = 8; 695 if (flag_real4_kind == 10) 696 kind = 10; 697 if (flag_real4_kind == 16) 698 kind = 16; 699 } 700 701 if (kind == 8) 702 { 703 if (flag_real8_kind == 4) 704 kind = 4; 705 if (flag_real8_kind == 10) 706 kind = 10; 707 if (flag_real8_kind == 16) 708 kind = 16; 709 } 710 711 if (gfc_validate_kind (BT_REAL, kind, true) < 0) 712 { 713 gfc_error ("Invalid real kind %d at %C", kind); 714 goto cleanup; 715 } 716 } 717 718 e = gfc_convert_real (buffer, kind, &gfc_current_locus); 719 if (negate) 720 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE); 721 e->ts.is_c_interop = is_iso_c; 722 723 switch (gfc_range_check (e)) 724 { 725 case ARITH_OK: 726 break; 727 case ARITH_OVERFLOW: 728 gfc_error ("Real constant overflows its kind at %C"); 729 goto cleanup; 730 731 case ARITH_UNDERFLOW: 732 if (warn_underflow) 733 gfc_warning (OPT_Wunderflow, "Real constant underflows its kind at %C"); 734 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE); 735 break; 736 737 default: 738 gfc_internal_error ("gfc_range_check() returned bad value"); 739 } 740 741 /* Warn about trailing digits which suggest the user added too many 742 trailing digits, which may cause the appearance of higher pecision 743 than the kind kan support. 744 745 This is done by replacing the rightmost non-zero digit with zero 746 and comparing with the original value. If these are equal, we 747 assume the user supplied more digits than intended (or forgot to 748 convert to the correct kind). 749 */ 750 751 if (warn_conversion_extra) 752 { 753 mpfr_t r; 754 char *c, *p; 755 bool did_break; 756 757 c = strchr (buffer, 'e'); 758 if (c == NULL) 759 c = buffer + strlen(buffer); 760 761 did_break = false; 762 for (p = c - 1; p >= buffer; p--) 763 { 764 if (*p == '.') 765 continue; 766 767 if (*p != '0') 768 { 769 *p = '0'; 770 did_break = true; 771 break; 772 } 773 } 774 775 if (did_break) 776 { 777 mpfr_init (r); 778 mpfr_set_str (r, buffer, 10, GFC_RND_MODE); 779 if (negate) 780 mpfr_neg (r, r, GFC_RND_MODE); 781 782 mpfr_sub (r, r, e->value.real, GFC_RND_MODE); 783 784 if (mpfr_cmp_ui (r, 0) == 0) 785 gfc_warning (OPT_Wconversion_extra, "Non-significant digits " 786 "in %qs number at %C, maybe incorrect KIND", 787 gfc_typename (&e->ts)); 788 789 mpfr_clear (r); 790 } 791 } 792 793 *result = e; 794 return MATCH_YES; 795 796 cleanup: 797 gfc_free_expr (e); 798 return MATCH_ERROR; 799 } 800 801 802 /* Match a substring reference. */ 803 804 static match 805 match_substring (gfc_charlen *cl, int init, gfc_ref **result, bool deferred) 806 { 807 gfc_expr *start, *end; 808 locus old_loc; 809 gfc_ref *ref; 810 match m; 811 812 start = NULL; 813 end = NULL; 814 815 old_loc = gfc_current_locus; 816 817 m = gfc_match_char ('('); 818 if (m != MATCH_YES) 819 return MATCH_NO; 820 821 if (gfc_match_char (':') != MATCH_YES) 822 { 823 if (init) 824 m = gfc_match_init_expr (&start); 825 else 826 m = gfc_match_expr (&start); 827 828 if (m != MATCH_YES) 829 { 830 m = MATCH_NO; 831 goto cleanup; 832 } 833 834 m = gfc_match_char (':'); 835 if (m != MATCH_YES) 836 goto cleanup; 837 } 838 839 if (gfc_match_char (')') != MATCH_YES) 840 { 841 if (init) 842 m = gfc_match_init_expr (&end); 843 else 844 m = gfc_match_expr (&end); 845 846 if (m == MATCH_NO) 847 goto syntax; 848 if (m == MATCH_ERROR) 849 goto cleanup; 850 851 m = gfc_match_char (')'); 852 if (m == MATCH_NO) 853 goto syntax; 854 } 855 856 /* Optimize away the (:) reference. */ 857 if (start == NULL && end == NULL && !deferred) 858 ref = NULL; 859 else 860 { 861 ref = gfc_get_ref (); 862 863 ref->type = REF_SUBSTRING; 864 if (start == NULL) 865 start = gfc_get_int_expr (gfc_charlen_int_kind, NULL, 1); 866 ref->u.ss.start = start; 867 if (end == NULL && cl) 868 end = gfc_copy_expr (cl->length); 869 ref->u.ss.end = end; 870 ref->u.ss.length = cl; 871 } 872 873 *result = ref; 874 return MATCH_YES; 875 876 syntax: 877 gfc_error ("Syntax error in SUBSTRING specification at %C"); 878 m = MATCH_ERROR; 879 880 cleanup: 881 gfc_free_expr (start); 882 gfc_free_expr (end); 883 884 gfc_current_locus = old_loc; 885 return m; 886 } 887 888 889 /* Reads the next character of a string constant, taking care to 890 return doubled delimiters on the input as a single instance of 891 the delimiter. 892 893 Special return values for "ret" argument are: 894 -1 End of the string, as determined by the delimiter 895 -2 Unterminated string detected 896 897 Backslash codes are also expanded at this time. */ 898 899 static gfc_char_t 900 next_string_char (gfc_char_t delimiter, int *ret) 901 { 902 locus old_locus; 903 gfc_char_t c; 904 905 c = gfc_next_char_literal (INSTRING_WARN); 906 *ret = 0; 907 908 if (c == '\n') 909 { 910 *ret = -2; 911 return 0; 912 } 913 914 if (flag_backslash && c == '\\') 915 { 916 old_locus = gfc_current_locus; 917 918 if (gfc_match_special_char (&c) == MATCH_NO) 919 gfc_current_locus = old_locus; 920 921 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) 922 gfc_warning (0, "Extension: backslash character at %C"); 923 } 924 925 if (c != delimiter) 926 return c; 927 928 old_locus = gfc_current_locus; 929 c = gfc_next_char_literal (NONSTRING); 930 931 if (c == delimiter) 932 return c; 933 gfc_current_locus = old_locus; 934 935 *ret = -1; 936 return 0; 937 } 938 939 940 /* Special case of gfc_match_name() that matches a parameter kind name 941 before a string constant. This takes case of the weird but legal 942 case of: 943 944 kind_____'string' 945 946 where kind____ is a parameter. gfc_match_name() will happily slurp 947 up all the underscores, which leads to problems. If we return 948 MATCH_YES, the parse pointer points to the final underscore, which 949 is not part of the name. We never return MATCH_ERROR-- errors in 950 the name will be detected later. */ 951 952 static match 953 match_charkind_name (char *name) 954 { 955 locus old_loc; 956 char c, peek; 957 int len; 958 959 gfc_gobble_whitespace (); 960 c = gfc_next_ascii_char (); 961 if (!ISALPHA (c)) 962 return MATCH_NO; 963 964 *name++ = c; 965 len = 1; 966 967 for (;;) 968 { 969 old_loc = gfc_current_locus; 970 c = gfc_next_ascii_char (); 971 972 if (c == '_') 973 { 974 peek = gfc_peek_ascii_char (); 975 976 if (peek == '\'' || peek == '\"') 977 { 978 gfc_current_locus = old_loc; 979 *name = '\0'; 980 return MATCH_YES; 981 } 982 } 983 984 if (!ISALNUM (c) 985 && c != '_' 986 && (c != '$' || !flag_dollar_ok)) 987 break; 988 989 *name++ = c; 990 if (++len > GFC_MAX_SYMBOL_LEN) 991 break; 992 } 993 994 return MATCH_NO; 995 } 996 997 998 /* See if the current input matches a character constant. Lots of 999 contortions have to be done to match the kind parameter which comes 1000 before the actual string. The main consideration is that we don't 1001 want to error out too quickly. For example, we don't actually do 1002 any validation of the kinds until we have actually seen a legal 1003 delimiter. Using match_kind_param() generates errors too quickly. */ 1004 1005 static match 1006 match_string_constant (gfc_expr **result) 1007 { 1008 char name[GFC_MAX_SYMBOL_LEN + 1], peek; 1009 size_t length; 1010 int kind,save_warn_ampersand, ret; 1011 locus old_locus, start_locus; 1012 gfc_symbol *sym; 1013 gfc_expr *e; 1014 match m; 1015 gfc_char_t c, delimiter, *p; 1016 1017 old_locus = gfc_current_locus; 1018 1019 gfc_gobble_whitespace (); 1020 1021 c = gfc_next_char (); 1022 if (c == '\'' || c == '"') 1023 { 1024 kind = gfc_default_character_kind; 1025 start_locus = gfc_current_locus; 1026 goto got_delim; 1027 } 1028 1029 if (gfc_wide_is_digit (c)) 1030 { 1031 kind = 0; 1032 1033 while (gfc_wide_is_digit (c)) 1034 { 1035 kind = kind * 10 + c - '0'; 1036 if (kind > 9999999) 1037 goto no_match; 1038 c = gfc_next_char (); 1039 } 1040 1041 } 1042 else 1043 { 1044 gfc_current_locus = old_locus; 1045 1046 m = match_charkind_name (name); 1047 if (m != MATCH_YES) 1048 goto no_match; 1049 1050 if (gfc_find_symbol (name, NULL, 1, &sym) 1051 || sym == NULL 1052 || sym->attr.flavor != FL_PARAMETER) 1053 goto no_match; 1054 1055 kind = -1; 1056 c = gfc_next_char (); 1057 } 1058 1059 if (c == ' ') 1060 { 1061 gfc_gobble_whitespace (); 1062 c = gfc_next_char (); 1063 } 1064 1065 if (c != '_') 1066 goto no_match; 1067 1068 gfc_gobble_whitespace (); 1069 1070 c = gfc_next_char (); 1071 if (c != '\'' && c != '"') 1072 goto no_match; 1073 1074 start_locus = gfc_current_locus; 1075 1076 if (kind == -1) 1077 { 1078 if (gfc_extract_int (sym->value, &kind, 1)) 1079 return MATCH_ERROR; 1080 gfc_set_sym_referenced (sym); 1081 } 1082 1083 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0) 1084 { 1085 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind); 1086 return MATCH_ERROR; 1087 } 1088 1089 got_delim: 1090 /* Scan the string into a block of memory by first figuring out how 1091 long it is, allocating the structure, then re-reading it. This 1092 isn't particularly efficient, but string constants aren't that 1093 common in most code. TODO: Use obstacks? */ 1094 1095 delimiter = c; 1096 length = 0; 1097 1098 for (;;) 1099 { 1100 c = next_string_char (delimiter, &ret); 1101 if (ret == -1) 1102 break; 1103 if (ret == -2) 1104 { 1105 gfc_current_locus = start_locus; 1106 gfc_error ("Unterminated character constant beginning at %C"); 1107 return MATCH_ERROR; 1108 } 1109 1110 length++; 1111 } 1112 1113 /* Peek at the next character to see if it is a b, o, z, or x for the 1114 postfixed BOZ literal constants. */ 1115 peek = gfc_peek_ascii_char (); 1116 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x') 1117 goto no_match; 1118 1119 e = gfc_get_character_expr (kind, &start_locus, NULL, length); 1120 1121 gfc_current_locus = start_locus; 1122 1123 /* We disable the warning for the following loop as the warning has already 1124 been printed in the loop above. */ 1125 save_warn_ampersand = warn_ampersand; 1126 warn_ampersand = false; 1127 1128 p = e->value.character.string; 1129 for (size_t i = 0; i < length; i++) 1130 { 1131 c = next_string_char (delimiter, &ret); 1132 1133 if (!gfc_check_character_range (c, kind)) 1134 { 1135 gfc_free_expr (e); 1136 gfc_error ("Character %qs in string at %C is not representable " 1137 "in character kind %d", gfc_print_wide_char (c), kind); 1138 return MATCH_ERROR; 1139 } 1140 1141 *p++ = c; 1142 } 1143 1144 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */ 1145 warn_ampersand = save_warn_ampersand; 1146 1147 next_string_char (delimiter, &ret); 1148 if (ret != -1) 1149 gfc_internal_error ("match_string_constant(): Delimiter not found"); 1150 1151 if (match_substring (NULL, 0, &e->ref, false) != MATCH_NO) 1152 e->expr_type = EXPR_SUBSTRING; 1153 1154 *result = e; 1155 1156 return MATCH_YES; 1157 1158 no_match: 1159 gfc_current_locus = old_locus; 1160 return MATCH_NO; 1161 } 1162 1163 1164 /* Match a .true. or .false. Returns 1 if a .true. was found, 1165 0 if a .false. was found, and -1 otherwise. */ 1166 static int 1167 match_logical_constant_string (void) 1168 { 1169 locus orig_loc = gfc_current_locus; 1170 1171 gfc_gobble_whitespace (); 1172 if (gfc_next_ascii_char () == '.') 1173 { 1174 char ch = gfc_next_ascii_char (); 1175 if (ch == 'f') 1176 { 1177 if (gfc_next_ascii_char () == 'a' 1178 && gfc_next_ascii_char () == 'l' 1179 && gfc_next_ascii_char () == 's' 1180 && gfc_next_ascii_char () == 'e' 1181 && gfc_next_ascii_char () == '.') 1182 /* Matched ".false.". */ 1183 return 0; 1184 } 1185 else if (ch == 't') 1186 { 1187 if (gfc_next_ascii_char () == 'r' 1188 && gfc_next_ascii_char () == 'u' 1189 && gfc_next_ascii_char () == 'e' 1190 && gfc_next_ascii_char () == '.') 1191 /* Matched ".true.". */ 1192 return 1; 1193 } 1194 } 1195 gfc_current_locus = orig_loc; 1196 return -1; 1197 } 1198 1199 /* Match a .true. or .false. */ 1200 1201 static match 1202 match_logical_constant (gfc_expr **result) 1203 { 1204 gfc_expr *e; 1205 int i, kind, is_iso_c; 1206 1207 i = match_logical_constant_string (); 1208 if (i == -1) 1209 return MATCH_NO; 1210 1211 kind = get_kind (&is_iso_c); 1212 if (kind == -1) 1213 return MATCH_ERROR; 1214 if (kind == -2) 1215 kind = gfc_default_logical_kind; 1216 1217 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0) 1218 { 1219 gfc_error ("Bad kind for logical constant at %C"); 1220 return MATCH_ERROR; 1221 } 1222 1223 e = gfc_get_logical_expr (kind, &gfc_current_locus, i); 1224 e->ts.is_c_interop = is_iso_c; 1225 1226 *result = e; 1227 return MATCH_YES; 1228 } 1229 1230 1231 /* Match a real or imaginary part of a complex constant that is a 1232 symbolic constant. */ 1233 1234 static match 1235 match_sym_complex_part (gfc_expr **result) 1236 { 1237 char name[GFC_MAX_SYMBOL_LEN + 1]; 1238 gfc_symbol *sym; 1239 gfc_expr *e; 1240 match m; 1241 1242 m = gfc_match_name (name); 1243 if (m != MATCH_YES) 1244 return m; 1245 1246 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL) 1247 return MATCH_NO; 1248 1249 if (sym->attr.flavor != FL_PARAMETER) 1250 { 1251 /* Give the matcher for implied do-loops a chance to run. This yields 1252 a much saner error message for "write(*,*) (i, i=1, 6" where the 1253 right parenthesis is missing. */ 1254 char c; 1255 gfc_gobble_whitespace (); 1256 c = gfc_peek_ascii_char (); 1257 if (c == '=' || c == ',') 1258 { 1259 m = MATCH_NO; 1260 } 1261 else 1262 { 1263 gfc_error ("Expected PARAMETER symbol in complex constant at %C"); 1264 m = MATCH_ERROR; 1265 } 1266 return m; 1267 } 1268 1269 if (!sym->value) 1270 goto error; 1271 1272 if (!gfc_numeric_ts (&sym->value->ts)) 1273 { 1274 gfc_error ("Numeric PARAMETER required in complex constant at %C"); 1275 return MATCH_ERROR; 1276 } 1277 1278 if (sym->value->rank != 0) 1279 { 1280 gfc_error ("Scalar PARAMETER required in complex constant at %C"); 1281 return MATCH_ERROR; 1282 } 1283 1284 if (!gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in " 1285 "complex constant at %C")) 1286 return MATCH_ERROR; 1287 1288 switch (sym->value->ts.type) 1289 { 1290 case BT_REAL: 1291 e = gfc_copy_expr (sym->value); 1292 break; 1293 1294 case BT_COMPLEX: 1295 e = gfc_complex2real (sym->value, sym->value->ts.kind); 1296 if (e == NULL) 1297 goto error; 1298 break; 1299 1300 case BT_INTEGER: 1301 e = gfc_int2real (sym->value, gfc_default_real_kind); 1302 if (e == NULL) 1303 goto error; 1304 break; 1305 1306 default: 1307 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type"); 1308 } 1309 1310 *result = e; /* e is a scalar, real, constant expression. */ 1311 return MATCH_YES; 1312 1313 error: 1314 gfc_error ("Error converting PARAMETER constant in complex constant at %C"); 1315 return MATCH_ERROR; 1316 } 1317 1318 1319 /* Match a real or imaginary part of a complex number. */ 1320 1321 static match 1322 match_complex_part (gfc_expr **result) 1323 { 1324 match m; 1325 1326 m = match_sym_complex_part (result); 1327 if (m != MATCH_NO) 1328 return m; 1329 1330 m = match_real_constant (result, 1); 1331 if (m != MATCH_NO) 1332 return m; 1333 1334 return match_integer_constant (result, 1); 1335 } 1336 1337 1338 /* Try to match a complex constant. */ 1339 1340 static match 1341 match_complex_constant (gfc_expr **result) 1342 { 1343 gfc_expr *e, *real, *imag; 1344 gfc_error_buffer old_error; 1345 gfc_typespec target; 1346 locus old_loc; 1347 int kind; 1348 match m; 1349 1350 old_loc = gfc_current_locus; 1351 real = imag = e = NULL; 1352 1353 m = gfc_match_char ('('); 1354 if (m != MATCH_YES) 1355 return m; 1356 1357 gfc_push_error (&old_error); 1358 1359 m = match_complex_part (&real); 1360 if (m == MATCH_NO) 1361 { 1362 gfc_free_error (&old_error); 1363 goto cleanup; 1364 } 1365 1366 if (gfc_match_char (',') == MATCH_NO) 1367 { 1368 /* It is possible that gfc_int2real issued a warning when 1369 converting an integer to real. Throw this away here. */ 1370 1371 gfc_clear_warning (); 1372 gfc_pop_error (&old_error); 1373 m = MATCH_NO; 1374 goto cleanup; 1375 } 1376 1377 /* If m is error, then something was wrong with the real part and we 1378 assume we have a complex constant because we've seen the ','. An 1379 ambiguous case here is the start of an iterator list of some 1380 sort. These sort of lists are matched prior to coming here. */ 1381 1382 if (m == MATCH_ERROR) 1383 { 1384 gfc_free_error (&old_error); 1385 goto cleanup; 1386 } 1387 gfc_pop_error (&old_error); 1388 1389 m = match_complex_part (&imag); 1390 if (m == MATCH_NO) 1391 goto syntax; 1392 if (m == MATCH_ERROR) 1393 goto cleanup; 1394 1395 m = gfc_match_char (')'); 1396 if (m == MATCH_NO) 1397 { 1398 /* Give the matcher for implied do-loops a chance to run. This 1399 yields a much saner error message for (/ (i, 4=i, 6) /). */ 1400 if (gfc_peek_ascii_char () == '=') 1401 { 1402 m = MATCH_ERROR; 1403 goto cleanup; 1404 } 1405 else 1406 goto syntax; 1407 } 1408 1409 if (m == MATCH_ERROR) 1410 goto cleanup; 1411 1412 /* Decide on the kind of this complex number. */ 1413 if (real->ts.type == BT_REAL) 1414 { 1415 if (imag->ts.type == BT_REAL) 1416 kind = gfc_kind_max (real, imag); 1417 else 1418 kind = real->ts.kind; 1419 } 1420 else 1421 { 1422 if (imag->ts.type == BT_REAL) 1423 kind = imag->ts.kind; 1424 else 1425 kind = gfc_default_real_kind; 1426 } 1427 gfc_clear_ts (&target); 1428 target.type = BT_REAL; 1429 target.kind = kind; 1430 1431 if (real->ts.type != BT_REAL || kind != real->ts.kind) 1432 gfc_convert_type (real, &target, 2); 1433 if (imag->ts.type != BT_REAL || kind != imag->ts.kind) 1434 gfc_convert_type (imag, &target, 2); 1435 1436 e = gfc_convert_complex (real, imag, kind); 1437 e->where = gfc_current_locus; 1438 1439 gfc_free_expr (real); 1440 gfc_free_expr (imag); 1441 1442 *result = e; 1443 return MATCH_YES; 1444 1445 syntax: 1446 gfc_error ("Syntax error in COMPLEX constant at %C"); 1447 m = MATCH_ERROR; 1448 1449 cleanup: 1450 gfc_free_expr (e); 1451 gfc_free_expr (real); 1452 gfc_free_expr (imag); 1453 gfc_current_locus = old_loc; 1454 1455 return m; 1456 } 1457 1458 1459 /* Match constants in any of several forms. Returns nonzero for a 1460 match, zero for no match. */ 1461 1462 match 1463 gfc_match_literal_constant (gfc_expr **result, int signflag) 1464 { 1465 match m; 1466 1467 m = match_complex_constant (result); 1468 if (m != MATCH_NO) 1469 return m; 1470 1471 m = match_string_constant (result); 1472 if (m != MATCH_NO) 1473 return m; 1474 1475 m = match_boz_constant (result); 1476 if (m != MATCH_NO) 1477 return m; 1478 1479 m = match_real_constant (result, signflag); 1480 if (m != MATCH_NO) 1481 return m; 1482 1483 m = match_hollerith_constant (result); 1484 if (m != MATCH_NO) 1485 return m; 1486 1487 m = match_integer_constant (result, signflag); 1488 if (m != MATCH_NO) 1489 return m; 1490 1491 m = match_logical_constant (result); 1492 if (m != MATCH_NO) 1493 return m; 1494 1495 return MATCH_NO; 1496 } 1497 1498 1499 /* This checks if a symbol is the return value of an encompassing function. 1500 Function nesting can be maximally two levels deep, but we may have 1501 additional local namespaces like BLOCK etc. */ 1502 1503 bool 1504 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns) 1505 { 1506 if (!sym->attr.function || (sym->result != sym)) 1507 return false; 1508 while (ns) 1509 { 1510 if (ns->proc_name == sym) 1511 return true; 1512 ns = ns->parent; 1513 } 1514 return false; 1515 } 1516 1517 1518 /* Match a single actual argument value. An actual argument is 1519 usually an expression, but can also be a procedure name. If the 1520 argument is a single name, it is not always possible to tell 1521 whether the name is a dummy procedure or not. We treat these cases 1522 by creating an argument that looks like a dummy procedure and 1523 fixing things later during resolution. */ 1524 1525 static match 1526 match_actual_arg (gfc_expr **result) 1527 { 1528 char name[GFC_MAX_SYMBOL_LEN + 1]; 1529 gfc_symtree *symtree; 1530 locus where, w; 1531 gfc_expr *e; 1532 char c; 1533 1534 gfc_gobble_whitespace (); 1535 where = gfc_current_locus; 1536 1537 switch (gfc_match_name (name)) 1538 { 1539 case MATCH_ERROR: 1540 return MATCH_ERROR; 1541 1542 case MATCH_NO: 1543 break; 1544 1545 case MATCH_YES: 1546 w = gfc_current_locus; 1547 gfc_gobble_whitespace (); 1548 c = gfc_next_ascii_char (); 1549 gfc_current_locus = w; 1550 1551 if (c != ',' && c != ')') 1552 break; 1553 1554 if (gfc_find_sym_tree (name, NULL, 1, &symtree)) 1555 break; 1556 /* Handle error elsewhere. */ 1557 1558 /* Eliminate a couple of common cases where we know we don't 1559 have a function argument. */ 1560 if (symtree == NULL) 1561 { 1562 gfc_get_sym_tree (name, NULL, &symtree, false); 1563 gfc_set_sym_referenced (symtree->n.sym); 1564 } 1565 else 1566 { 1567 gfc_symbol *sym; 1568 1569 sym = symtree->n.sym; 1570 gfc_set_sym_referenced (sym); 1571 if (sym->attr.flavor == FL_NAMELIST) 1572 { 1573 gfc_error ("Namelist %qs cannot be an argument at %L", 1574 sym->name, &where); 1575 break; 1576 } 1577 if (sym->attr.flavor != FL_PROCEDURE 1578 && sym->attr.flavor != FL_UNKNOWN) 1579 break; 1580 1581 if (sym->attr.in_common && !sym->attr.proc_pointer) 1582 { 1583 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, 1584 sym->name, &sym->declared_at)) 1585 return MATCH_ERROR; 1586 break; 1587 } 1588 1589 /* If the symbol is a function with itself as the result and 1590 is being defined, then we have a variable. */ 1591 if (sym->attr.function && sym->result == sym) 1592 { 1593 if (gfc_is_function_return_value (sym, gfc_current_ns)) 1594 break; 1595 1596 if (sym->attr.entry 1597 && (sym->ns == gfc_current_ns 1598 || sym->ns == gfc_current_ns->parent)) 1599 { 1600 gfc_entry_list *el = NULL; 1601 1602 for (el = sym->ns->entries; el; el = el->next) 1603 if (sym == el->sym) 1604 break; 1605 1606 if (el) 1607 break; 1608 } 1609 } 1610 } 1611 1612 e = gfc_get_expr (); /* Leave it unknown for now */ 1613 e->symtree = symtree; 1614 e->expr_type = EXPR_VARIABLE; 1615 e->ts.type = BT_PROCEDURE; 1616 e->where = where; 1617 1618 *result = e; 1619 return MATCH_YES; 1620 } 1621 1622 gfc_current_locus = where; 1623 return gfc_match_expr (result); 1624 } 1625 1626 1627 /* Match a keyword argument or type parameter spec list.. */ 1628 1629 static match 1630 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base, bool pdt) 1631 { 1632 char name[GFC_MAX_SYMBOL_LEN + 1]; 1633 gfc_actual_arglist *a; 1634 locus name_locus; 1635 match m; 1636 1637 name_locus = gfc_current_locus; 1638 m = gfc_match_name (name); 1639 1640 if (m != MATCH_YES) 1641 goto cleanup; 1642 if (gfc_match_char ('=') != MATCH_YES) 1643 { 1644 m = MATCH_NO; 1645 goto cleanup; 1646 } 1647 1648 if (pdt) 1649 { 1650 if (gfc_match_char ('*') == MATCH_YES) 1651 { 1652 actual->spec_type = SPEC_ASSUMED; 1653 goto add_name; 1654 } 1655 else if (gfc_match_char (':') == MATCH_YES) 1656 { 1657 actual->spec_type = SPEC_DEFERRED; 1658 goto add_name; 1659 } 1660 else 1661 actual->spec_type = SPEC_EXPLICIT; 1662 } 1663 1664 m = match_actual_arg (&actual->expr); 1665 if (m != MATCH_YES) 1666 goto cleanup; 1667 1668 /* Make sure this name has not appeared yet. */ 1669 add_name: 1670 if (name[0] != '\0') 1671 { 1672 for (a = base; a; a = a->next) 1673 if (a->name != NULL && strcmp (a->name, name) == 0) 1674 { 1675 gfc_error ("Keyword %qs at %C has already appeared in the " 1676 "current argument list", name); 1677 return MATCH_ERROR; 1678 } 1679 } 1680 1681 actual->name = gfc_get_string ("%s", name); 1682 return MATCH_YES; 1683 1684 cleanup: 1685 gfc_current_locus = name_locus; 1686 return m; 1687 } 1688 1689 1690 /* Match an argument list function, such as %VAL. */ 1691 1692 static match 1693 match_arg_list_function (gfc_actual_arglist *result) 1694 { 1695 char name[GFC_MAX_SYMBOL_LEN + 1]; 1696 locus old_locus; 1697 match m; 1698 1699 old_locus = gfc_current_locus; 1700 1701 if (gfc_match_char ('%') != MATCH_YES) 1702 { 1703 m = MATCH_NO; 1704 goto cleanup; 1705 } 1706 1707 m = gfc_match ("%n (", name); 1708 if (m != MATCH_YES) 1709 goto cleanup; 1710 1711 if (name[0] != '\0') 1712 { 1713 switch (name[0]) 1714 { 1715 case 'l': 1716 if (gfc_str_startswith (name, "loc")) 1717 { 1718 result->name = "%LOC"; 1719 break; 1720 } 1721 /* FALLTHRU */ 1722 case 'r': 1723 if (gfc_str_startswith (name, "ref")) 1724 { 1725 result->name = "%REF"; 1726 break; 1727 } 1728 /* FALLTHRU */ 1729 case 'v': 1730 if (gfc_str_startswith (name, "val")) 1731 { 1732 result->name = "%VAL"; 1733 break; 1734 } 1735 /* FALLTHRU */ 1736 default: 1737 m = MATCH_ERROR; 1738 goto cleanup; 1739 } 1740 } 1741 1742 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C")) 1743 { 1744 m = MATCH_ERROR; 1745 goto cleanup; 1746 } 1747 1748 m = match_actual_arg (&result->expr); 1749 if (m != MATCH_YES) 1750 goto cleanup; 1751 1752 if (gfc_match_char (')') != MATCH_YES) 1753 { 1754 m = MATCH_NO; 1755 goto cleanup; 1756 } 1757 1758 return MATCH_YES; 1759 1760 cleanup: 1761 gfc_current_locus = old_locus; 1762 return m; 1763 } 1764 1765 1766 /* Matches an actual argument list of a function or subroutine, from 1767 the opening parenthesis to the closing parenthesis. The argument 1768 list is assumed to allow keyword arguments because we don't know if 1769 the symbol associated with the procedure has an implicit interface 1770 or not. We make sure keywords are unique. If sub_flag is set, 1771 we're matching the argument list of a subroutine. 1772 1773 NOTE: An alternative use for this function is to match type parameter 1774 spec lists, which are so similar to actual argument lists that the 1775 machinery can be reused. This use is flagged by the optional argument 1776 'pdt'. */ 1777 1778 match 1779 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp, bool pdt) 1780 { 1781 gfc_actual_arglist *head, *tail; 1782 int seen_keyword; 1783 gfc_st_label *label; 1784 locus old_loc; 1785 match m; 1786 1787 *argp = tail = NULL; 1788 old_loc = gfc_current_locus; 1789 1790 seen_keyword = 0; 1791 1792 if (gfc_match_char ('(') == MATCH_NO) 1793 return (sub_flag) ? MATCH_YES : MATCH_NO; 1794 1795 if (gfc_match_char (')') == MATCH_YES) 1796 return MATCH_YES; 1797 1798 head = NULL; 1799 1800 matching_actual_arglist++; 1801 1802 for (;;) 1803 { 1804 if (head == NULL) 1805 head = tail = gfc_get_actual_arglist (); 1806 else 1807 { 1808 tail->next = gfc_get_actual_arglist (); 1809 tail = tail->next; 1810 } 1811 1812 if (sub_flag && !pdt && gfc_match_char ('*') == MATCH_YES) 1813 { 1814 m = gfc_match_st_label (&label); 1815 if (m == MATCH_NO) 1816 gfc_error ("Expected alternate return label at %C"); 1817 if (m != MATCH_YES) 1818 goto cleanup; 1819 1820 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument " 1821 "at %C")) 1822 goto cleanup; 1823 1824 tail->label = label; 1825 goto next; 1826 } 1827 1828 if (pdt && !seen_keyword) 1829 { 1830 if (gfc_match_char (':') == MATCH_YES) 1831 { 1832 tail->spec_type = SPEC_DEFERRED; 1833 goto next; 1834 } 1835 else if (gfc_match_char ('*') == MATCH_YES) 1836 { 1837 tail->spec_type = SPEC_ASSUMED; 1838 goto next; 1839 } 1840 else 1841 tail->spec_type = SPEC_EXPLICIT; 1842 1843 m = match_keyword_arg (tail, head, pdt); 1844 if (m == MATCH_YES) 1845 { 1846 seen_keyword = 1; 1847 goto next; 1848 } 1849 if (m == MATCH_ERROR) 1850 goto cleanup; 1851 } 1852 1853 /* After the first keyword argument is seen, the following 1854 arguments must also have keywords. */ 1855 if (seen_keyword) 1856 { 1857 m = match_keyword_arg (tail, head, pdt); 1858 1859 if (m == MATCH_ERROR) 1860 goto cleanup; 1861 if (m == MATCH_NO) 1862 { 1863 gfc_error ("Missing keyword name in actual argument list at %C"); 1864 goto cleanup; 1865 } 1866 1867 } 1868 else 1869 { 1870 /* Try an argument list function, like %VAL. */ 1871 m = match_arg_list_function (tail); 1872 if (m == MATCH_ERROR) 1873 goto cleanup; 1874 1875 /* See if we have the first keyword argument. */ 1876 if (m == MATCH_NO) 1877 { 1878 m = match_keyword_arg (tail, head, false); 1879 if (m == MATCH_YES) 1880 seen_keyword = 1; 1881 if (m == MATCH_ERROR) 1882 goto cleanup; 1883 } 1884 1885 if (m == MATCH_NO) 1886 { 1887 /* Try for a non-keyword argument. */ 1888 m = match_actual_arg (&tail->expr); 1889 if (m == MATCH_ERROR) 1890 goto cleanup; 1891 if (m == MATCH_NO) 1892 goto syntax; 1893 } 1894 } 1895 1896 1897 next: 1898 if (gfc_match_char (')') == MATCH_YES) 1899 break; 1900 if (gfc_match_char (',') != MATCH_YES) 1901 goto syntax; 1902 } 1903 1904 *argp = head; 1905 matching_actual_arglist--; 1906 return MATCH_YES; 1907 1908 syntax: 1909 gfc_error ("Syntax error in argument list at %C"); 1910 1911 cleanup: 1912 gfc_free_actual_arglist (head); 1913 gfc_current_locus = old_loc; 1914 matching_actual_arglist--; 1915 return MATCH_ERROR; 1916 } 1917 1918 1919 /* Used by gfc_match_varspec() to extend the reference list by one 1920 element. */ 1921 1922 static gfc_ref * 1923 extend_ref (gfc_expr *primary, gfc_ref *tail) 1924 { 1925 if (primary->ref == NULL) 1926 primary->ref = tail = gfc_get_ref (); 1927 else 1928 { 1929 if (tail == NULL) 1930 gfc_internal_error ("extend_ref(): Bad tail"); 1931 tail->next = gfc_get_ref (); 1932 tail = tail->next; 1933 } 1934 1935 return tail; 1936 } 1937 1938 1939 /* Used by gfc_match_varspec() to match an inquiry reference. */ 1940 1941 static bool 1942 is_inquiry_ref (const char *name, gfc_ref **ref) 1943 { 1944 inquiry_type type; 1945 1946 if (name == NULL) 1947 return false; 1948 1949 if (ref) *ref = NULL; 1950 1951 if (strcmp (name, "re") == 0) 1952 type = INQUIRY_RE; 1953 else if (strcmp (name, "im") == 0) 1954 type = INQUIRY_IM; 1955 else if (strcmp (name, "kind") == 0) 1956 type = INQUIRY_KIND; 1957 else if (strcmp (name, "len") == 0) 1958 type = INQUIRY_LEN; 1959 else 1960 return false; 1961 1962 if (ref) 1963 { 1964 *ref = gfc_get_ref (); 1965 (*ref)->type = REF_INQUIRY; 1966 (*ref)->u.i = type; 1967 } 1968 1969 return true; 1970 } 1971 1972 1973 /* Match any additional specifications associated with the current 1974 variable like member references or substrings. If equiv_flag is 1975 set we only match stuff that is allowed inside an EQUIVALENCE 1976 statement. sub_flag tells whether we expect a type-bound procedure found 1977 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer 1978 components, 'ppc_arg' determines whether the PPC may be called (with an 1979 argument list), or whether it may just be referred to as a pointer. */ 1980 1981 match 1982 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, 1983 bool ppc_arg) 1984 { 1985 char name[GFC_MAX_SYMBOL_LEN + 1]; 1986 gfc_ref *substring, *tail, *tmp; 1987 gfc_component *component; 1988 gfc_symbol *sym = primary->symtree->n.sym; 1989 gfc_expr *tgt_expr = NULL; 1990 match m; 1991 bool unknown; 1992 bool inquiry; 1993 bool intrinsic; 1994 locus old_loc; 1995 char sep; 1996 1997 tail = NULL; 1998 1999 gfc_gobble_whitespace (); 2000 2001 if (gfc_peek_ascii_char () == '[') 2002 { 2003 if ((sym->ts.type != BT_CLASS && sym->attr.dimension) 2004 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym) 2005 && CLASS_DATA (sym)->attr.dimension)) 2006 { 2007 gfc_error ("Array section designator, e.g. '(:)', is required " 2008 "besides the coarray designator '[...]' at %C"); 2009 return MATCH_ERROR; 2010 } 2011 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension) 2012 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym) 2013 && !CLASS_DATA (sym)->attr.codimension)) 2014 { 2015 gfc_error ("Coarray designator at %C but %qs is not a coarray", 2016 sym->name); 2017 return MATCH_ERROR; 2018 } 2019 } 2020 2021 if (sym->assoc && sym->assoc->target) 2022 tgt_expr = sym->assoc->target; 2023 2024 /* For associate names, we may not yet know whether they are arrays or not. 2025 If the selector expression is unambiguously an array; eg. a full array 2026 or an array section, then the associate name must be an array and we can 2027 fix it now. Otherwise, if parentheses follow and it is not a character 2028 type, we have to assume that it actually is one for now. The final 2029 decision will be made at resolution, of course. */ 2030 if (sym->assoc 2031 && gfc_peek_ascii_char () == '(' 2032 && sym->ts.type != BT_CLASS 2033 && !sym->attr.dimension) 2034 { 2035 gfc_ref *ref = NULL; 2036 2037 if (!sym->assoc->dangling && tgt_expr) 2038 { 2039 if (tgt_expr->expr_type == EXPR_VARIABLE) 2040 gfc_resolve_expr (tgt_expr); 2041 2042 ref = tgt_expr->ref; 2043 for (; ref; ref = ref->next) 2044 if (ref->type == REF_ARRAY 2045 && (ref->u.ar.type == AR_FULL 2046 || ref->u.ar.type == AR_SECTION)) 2047 break; 2048 } 2049 2050 if (ref || (!(sym->assoc->dangling || sym->ts.type == BT_CHARACTER) 2051 && sym->assoc->st 2052 && sym->assoc->st->n.sym 2053 && sym->assoc->st->n.sym->attr.dimension == 0)) 2054 { 2055 sym->attr.dimension = 1; 2056 if (sym->as == NULL 2057 && sym->assoc->st 2058 && sym->assoc->st->n.sym 2059 && sym->assoc->st->n.sym->as) 2060 sym->as = gfc_copy_array_spec (sym->assoc->st->n.sym->as); 2061 } 2062 } 2063 else if (sym->ts.type == BT_CLASS 2064 && tgt_expr 2065 && tgt_expr->expr_type == EXPR_VARIABLE 2066 && sym->ts.u.derived != tgt_expr->ts.u.derived) 2067 { 2068 gfc_resolve_expr (tgt_expr); 2069 if (tgt_expr->rank) 2070 sym->ts.u.derived = tgt_expr->ts.u.derived; 2071 } 2072 2073 if ((equiv_flag && gfc_peek_ascii_char () == '(') 2074 || gfc_peek_ascii_char () == '[' || sym->attr.codimension 2075 || (sym->attr.dimension && sym->ts.type != BT_CLASS 2076 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary) 2077 && !(gfc_matching_procptr_assignment 2078 && sym->attr.flavor == FL_PROCEDURE)) 2079 || (sym->ts.type == BT_CLASS && sym->attr.class_ok 2080 && (CLASS_DATA (sym)->attr.dimension 2081 || CLASS_DATA (sym)->attr.codimension))) 2082 { 2083 gfc_array_spec *as; 2084 2085 tail = extend_ref (primary, tail); 2086 tail->type = REF_ARRAY; 2087 2088 /* In EQUIVALENCE, we don't know yet whether we are seeing 2089 an array, character variable or array of character 2090 variables. We'll leave the decision till resolve time. */ 2091 2092 if (equiv_flag) 2093 as = NULL; 2094 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)) 2095 as = CLASS_DATA (sym)->as; 2096 else 2097 as = sym->as; 2098 2099 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag, 2100 as ? as->corank : 0); 2101 if (m != MATCH_YES) 2102 return m; 2103 2104 gfc_gobble_whitespace (); 2105 if (equiv_flag && gfc_peek_ascii_char () == '(') 2106 { 2107 tail = extend_ref (primary, tail); 2108 tail->type = REF_ARRAY; 2109 2110 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0); 2111 if (m != MATCH_YES) 2112 return m; 2113 } 2114 } 2115 2116 primary->ts = sym->ts; 2117 2118 if (equiv_flag) 2119 return MATCH_YES; 2120 2121 /* With DEC extensions, member separator may be '.' or '%'. */ 2122 sep = gfc_peek_ascii_char (); 2123 m = gfc_match_member_sep (sym); 2124 if (m == MATCH_ERROR) 2125 return MATCH_ERROR; 2126 2127 inquiry = false; 2128 if (m == MATCH_YES && sep == '%' 2129 && primary->ts.type != BT_CLASS 2130 && primary->ts.type != BT_DERIVED) 2131 { 2132 match mm; 2133 old_loc = gfc_current_locus; 2134 mm = gfc_match_name (name); 2135 if (mm == MATCH_YES && is_inquiry_ref (name, &tmp)) 2136 inquiry = true; 2137 gfc_current_locus = old_loc; 2138 } 2139 2140 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES 2141 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) 2142 gfc_set_default_type (sym, 0, sym->ns); 2143 2144 /* See if there is a usable typespec in the "no IMPLICIT type" error. */ 2145 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES) 2146 { 2147 bool permissible; 2148 2149 /* These target expressions can be resolved at any time. */ 2150 permissible = tgt_expr && tgt_expr->symtree && tgt_expr->symtree->n.sym 2151 && (tgt_expr->symtree->n.sym->attr.use_assoc 2152 || tgt_expr->symtree->n.sym->attr.host_assoc 2153 || tgt_expr->symtree->n.sym->attr.if_source 2154 == IFSRC_DECL); 2155 permissible = permissible 2156 || (tgt_expr && tgt_expr->expr_type == EXPR_OP); 2157 2158 if (permissible) 2159 { 2160 gfc_resolve_expr (tgt_expr); 2161 sym->ts = tgt_expr->ts; 2162 } 2163 2164 if (sym->ts.type == BT_UNKNOWN) 2165 { 2166 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name); 2167 return MATCH_ERROR; 2168 } 2169 } 2170 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) 2171 && m == MATCH_YES && !inquiry) 2172 { 2173 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C", 2174 sep, sym->name); 2175 return MATCH_ERROR; 2176 } 2177 2178 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS && !inquiry) 2179 || m != MATCH_YES) 2180 goto check_substring; 2181 2182 if (!inquiry) 2183 sym = sym->ts.u.derived; 2184 else 2185 sym = NULL; 2186 2187 for (;;) 2188 { 2189 bool t; 2190 gfc_symtree *tbp; 2191 2192 m = gfc_match_name (name); 2193 if (m == MATCH_NO) 2194 gfc_error ("Expected structure component name at %C"); 2195 if (m != MATCH_YES) 2196 return MATCH_ERROR; 2197 2198 intrinsic = false; 2199 if (primary->ts.type != BT_CLASS && primary->ts.type != BT_DERIVED) 2200 { 2201 inquiry = is_inquiry_ref (name, &tmp); 2202 if (inquiry) 2203 sym = NULL; 2204 2205 if (sep == '%') 2206 { 2207 if (tmp) 2208 { 2209 if ((tmp->u.i == INQUIRY_RE || tmp->u.i == INQUIRY_IM) 2210 && primary->ts.type != BT_COMPLEX) 2211 { 2212 gfc_error ("The RE or IM part_ref at %C must be " 2213 "applied to a COMPLEX expression"); 2214 return MATCH_ERROR; 2215 } 2216 else if (tmp->u.i == INQUIRY_LEN 2217 && primary->ts.type != BT_CHARACTER) 2218 { 2219 gfc_error ("The LEN part_ref at %C must be applied " 2220 "to a CHARACTER expression"); 2221 return MATCH_ERROR; 2222 } 2223 } 2224 if (primary->ts.type != BT_UNKNOWN) 2225 intrinsic = true; 2226 } 2227 } 2228 else 2229 inquiry = false; 2230 2231 if (sym && sym->f2k_derived) 2232 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus); 2233 else 2234 tbp = NULL; 2235 2236 if (tbp) 2237 { 2238 gfc_symbol* tbp_sym; 2239 2240 if (!t) 2241 return MATCH_ERROR; 2242 2243 gcc_assert (!tail || !tail->next); 2244 2245 if (!(primary->expr_type == EXPR_VARIABLE 2246 || (primary->expr_type == EXPR_STRUCTURE 2247 && primary->symtree && primary->symtree->n.sym 2248 && primary->symtree->n.sym->attr.flavor))) 2249 return MATCH_ERROR; 2250 2251 if (tbp->n.tb->is_generic) 2252 tbp_sym = NULL; 2253 else 2254 tbp_sym = tbp->n.tb->u.specific->n.sym; 2255 2256 primary->expr_type = EXPR_COMPCALL; 2257 primary->value.compcall.tbp = tbp->n.tb; 2258 primary->value.compcall.name = tbp->name; 2259 primary->value.compcall.ignore_pass = 0; 2260 primary->value.compcall.assign = 0; 2261 primary->value.compcall.base_object = NULL; 2262 gcc_assert (primary->symtree->n.sym->attr.referenced); 2263 if (tbp_sym) 2264 primary->ts = tbp_sym->ts; 2265 else 2266 gfc_clear_ts (&primary->ts); 2267 2268 m = gfc_match_actual_arglist (tbp->n.tb->subroutine, 2269 &primary->value.compcall.actual); 2270 if (m == MATCH_ERROR) 2271 return MATCH_ERROR; 2272 if (m == MATCH_NO) 2273 { 2274 if (sub_flag) 2275 primary->value.compcall.actual = NULL; 2276 else 2277 { 2278 gfc_error ("Expected argument list at %C"); 2279 return MATCH_ERROR; 2280 } 2281 } 2282 2283 break; 2284 } 2285 2286 if (!inquiry && !intrinsic) 2287 component = gfc_find_component (sym, name, false, false, &tmp); 2288 else 2289 component = NULL; 2290 2291 /* In some cases, returning MATCH_NO gives a better error message. Most 2292 cases return "Unclassifiable statement at..." */ 2293 if (intrinsic && !inquiry) 2294 return MATCH_NO; 2295 else if (component == NULL && !inquiry) 2296 return MATCH_ERROR; 2297 2298 /* Extend the reference chain determined by gfc_find_component or 2299 is_inquiry_ref. */ 2300 if (primary->ref == NULL) 2301 primary->ref = tmp; 2302 else 2303 { 2304 /* Set by the for loop below for the last component ref. */ 2305 gcc_assert (tail != NULL); 2306 tail->next = tmp; 2307 } 2308 2309 /* The reference chain may be longer than one hop for union 2310 subcomponents; find the new tail. */ 2311 for (tail = tmp; tail->next; tail = tail->next) 2312 ; 2313 2314 if (tmp && tmp->type == REF_INQUIRY) 2315 { 2316 if (!primary->where.lb || !primary->where.nextc) 2317 primary->where = gfc_current_locus; 2318 gfc_simplify_expr (primary, 0); 2319 2320 if (primary->expr_type == EXPR_CONSTANT) 2321 goto check_done; 2322 2323 switch (tmp->u.i) 2324 { 2325 case INQUIRY_RE: 2326 case INQUIRY_IM: 2327 if (!gfc_notify_std (GFC_STD_F2008, "RE or IM part_ref at %C")) 2328 return MATCH_ERROR; 2329 2330 if (primary->ts.type != BT_COMPLEX) 2331 { 2332 gfc_error ("The RE or IM part_ref at %C must be " 2333 "applied to a COMPLEX expression"); 2334 return MATCH_ERROR; 2335 } 2336 primary->ts.type = BT_REAL; 2337 break; 2338 2339 case INQUIRY_LEN: 2340 if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) 2341 return MATCH_ERROR; 2342 2343 if (primary->ts.type != BT_CHARACTER) 2344 { 2345 gfc_error ("The LEN part_ref at %C must be applied " 2346 "to a CHARACTER expression"); 2347 return MATCH_ERROR; 2348 } 2349 primary->ts.u.cl = NULL; 2350 primary->ts.type = BT_INTEGER; 2351 primary->ts.kind = gfc_default_integer_kind; 2352 break; 2353 2354 case INQUIRY_KIND: 2355 if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C")) 2356 return MATCH_ERROR; 2357 2358 if (primary->ts.type == BT_CLASS 2359 || primary->ts.type == BT_DERIVED) 2360 { 2361 gfc_error ("The KIND part_ref at %C must be applied " 2362 "to an expression of intrinsic type"); 2363 return MATCH_ERROR; 2364 } 2365 primary->ts.type = BT_INTEGER; 2366 primary->ts.kind = gfc_default_integer_kind; 2367 break; 2368 2369 default: 2370 gcc_unreachable (); 2371 } 2372 2373 goto check_done; 2374 } 2375 2376 primary->ts = component->ts; 2377 2378 if (component->attr.proc_pointer && ppc_arg) 2379 { 2380 /* Procedure pointer component call: Look for argument list. */ 2381 m = gfc_match_actual_arglist (sub_flag, 2382 &primary->value.compcall.actual); 2383 if (m == MATCH_ERROR) 2384 return MATCH_ERROR; 2385 2386 if (m == MATCH_NO && !gfc_matching_ptr_assignment 2387 && !gfc_matching_procptr_assignment && !matching_actual_arglist) 2388 { 2389 gfc_error ("Procedure pointer component %qs requires an " 2390 "argument list at %C", component->name); 2391 return MATCH_ERROR; 2392 } 2393 2394 if (m == MATCH_YES) 2395 primary->expr_type = EXPR_PPC; 2396 2397 break; 2398 } 2399 2400 if (component->as != NULL && !component->attr.proc_pointer) 2401 { 2402 tail = extend_ref (primary, tail); 2403 tail->type = REF_ARRAY; 2404 2405 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag, 2406 component->as->corank); 2407 if (m != MATCH_YES) 2408 return m; 2409 } 2410 else if (component->ts.type == BT_CLASS && component->attr.class_ok 2411 && CLASS_DATA (component)->as && !component->attr.proc_pointer) 2412 { 2413 tail = extend_ref (primary, tail); 2414 tail->type = REF_ARRAY; 2415 2416 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as, 2417 equiv_flag, 2418 CLASS_DATA (component)->as->corank); 2419 if (m != MATCH_YES) 2420 return m; 2421 } 2422 2423 check_done: 2424 /* In principle, we could have eg. expr%re%kind so we must allow for 2425 this possibility. */ 2426 if (gfc_match_char ('%') == MATCH_YES) 2427 { 2428 if (component && (component->ts.type == BT_DERIVED 2429 || component->ts.type == BT_CLASS)) 2430 sym = component->ts.u.derived; 2431 continue; 2432 } 2433 else if (inquiry) 2434 break; 2435 2436 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS) 2437 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES) 2438 break; 2439 2440 if (component->ts.type == BT_DERIVED || component->ts.type == BT_CLASS) 2441 sym = component->ts.u.derived; 2442 } 2443 2444 check_substring: 2445 unknown = false; 2446 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor)) 2447 { 2448 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER) 2449 { 2450 gfc_set_default_type (sym, 0, sym->ns); 2451 primary->ts = sym->ts; 2452 unknown = true; 2453 } 2454 } 2455 2456 if (primary->ts.type == BT_CHARACTER) 2457 { 2458 bool def = primary->ts.deferred == 1; 2459 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def)) 2460 { 2461 case MATCH_YES: 2462 if (tail == NULL) 2463 primary->ref = substring; 2464 else 2465 tail->next = substring; 2466 2467 if (primary->expr_type == EXPR_CONSTANT) 2468 primary->expr_type = EXPR_SUBSTRING; 2469 2470 if (substring) 2471 primary->ts.u.cl = NULL; 2472 2473 break; 2474 2475 case MATCH_NO: 2476 if (unknown) 2477 { 2478 gfc_clear_ts (&primary->ts); 2479 gfc_clear_ts (&sym->ts); 2480 } 2481 break; 2482 2483 case MATCH_ERROR: 2484 return MATCH_ERROR; 2485 } 2486 } 2487 2488 /* F08:C611. */ 2489 if (primary->ts.type == BT_DERIVED && primary->ref 2490 && primary->ts.u.derived && primary->ts.u.derived->attr.abstract) 2491 { 2492 gfc_error ("Nonpolymorphic reference to abstract type at %C"); 2493 return MATCH_ERROR; 2494 } 2495 2496 /* F08:C727. */ 2497 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary)) 2498 { 2499 gfc_error ("Coindexed procedure-pointer component at %C"); 2500 return MATCH_ERROR; 2501 } 2502 2503 return MATCH_YES; 2504 } 2505 2506 2507 /* Given an expression that is a variable, figure out what the 2508 ultimate variable's type and attribute is, traversing the reference 2509 structures if necessary. 2510 2511 This subroutine is trickier than it looks. We start at the base 2512 symbol and store the attribute. Component references load a 2513 completely new attribute. 2514 2515 A couple of rules come into play. Subobjects of targets are always 2516 targets themselves. If we see a component that goes through a 2517 pointer, then the expression must also be a target, since the 2518 pointer is associated with something (if it isn't core will soon be 2519 dumped). If we see a full part or section of an array, the 2520 expression is also an array. 2521 2522 We can have at most one full array reference. */ 2523 2524 symbol_attribute 2525 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) 2526 { 2527 int dimension, codimension, pointer, allocatable, target; 2528 symbol_attribute attr; 2529 gfc_ref *ref; 2530 gfc_symbol *sym; 2531 gfc_component *comp; 2532 bool has_inquiry_part; 2533 2534 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION) 2535 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable"); 2536 2537 sym = expr->symtree->n.sym; 2538 attr = sym->attr; 2539 2540 if (sym->ts.type == BT_CLASS && sym->attr.class_ok) 2541 { 2542 dimension = CLASS_DATA (sym)->attr.dimension; 2543 codimension = CLASS_DATA (sym)->attr.codimension; 2544 pointer = CLASS_DATA (sym)->attr.class_pointer; 2545 allocatable = CLASS_DATA (sym)->attr.allocatable; 2546 } 2547 else 2548 { 2549 dimension = attr.dimension; 2550 codimension = attr.codimension; 2551 pointer = attr.pointer; 2552 allocatable = attr.allocatable; 2553 } 2554 2555 target = attr.target; 2556 if (pointer || attr.proc_pointer) 2557 target = 1; 2558 2559 if (ts != NULL && expr->ts.type == BT_UNKNOWN) 2560 *ts = sym->ts; 2561 2562 has_inquiry_part = false; 2563 for (ref = expr->ref; ref; ref = ref->next) 2564 if (ref->type == REF_INQUIRY) 2565 { 2566 has_inquiry_part = true; 2567 break; 2568 } 2569 2570 for (ref = expr->ref; ref; ref = ref->next) 2571 switch (ref->type) 2572 { 2573 case REF_ARRAY: 2574 2575 switch (ref->u.ar.type) 2576 { 2577 case AR_FULL: 2578 dimension = 1; 2579 break; 2580 2581 case AR_SECTION: 2582 allocatable = pointer = 0; 2583 dimension = 1; 2584 break; 2585 2586 case AR_ELEMENT: 2587 /* Handle coarrays. */ 2588 if (ref->u.ar.dimen > 0) 2589 allocatable = pointer = 0; 2590 break; 2591 2592 case AR_UNKNOWN: 2593 /* For standard conforming code, AR_UNKNOWN should not happen. 2594 For nonconforming code, gfortran can end up here. Treat it 2595 as a no-op. */ 2596 break; 2597 } 2598 2599 break; 2600 2601 case REF_COMPONENT: 2602 comp = ref->u.c.component; 2603 attr = comp->attr; 2604 if (ts != NULL && !has_inquiry_part) 2605 { 2606 *ts = comp->ts; 2607 /* Don't set the string length if a substring reference 2608 follows. */ 2609 if (ts->type == BT_CHARACTER 2610 && ref->next && ref->next->type == REF_SUBSTRING) 2611 ts->u.cl = NULL; 2612 } 2613 2614 if (comp->ts.type == BT_CLASS) 2615 { 2616 codimension = CLASS_DATA (comp)->attr.codimension; 2617 pointer = CLASS_DATA (comp)->attr.class_pointer; 2618 allocatable = CLASS_DATA (comp)->attr.allocatable; 2619 } 2620 else 2621 { 2622 codimension = comp->attr.codimension; 2623 pointer = comp->attr.pointer; 2624 allocatable = comp->attr.allocatable; 2625 } 2626 if (pointer || attr.proc_pointer) 2627 target = 1; 2628 2629 break; 2630 2631 case REF_INQUIRY: 2632 case REF_SUBSTRING: 2633 allocatable = pointer = 0; 2634 break; 2635 } 2636 2637 attr.dimension = dimension; 2638 attr.codimension = codimension; 2639 attr.pointer = pointer; 2640 attr.allocatable = allocatable; 2641 attr.target = target; 2642 attr.save = sym->attr.save; 2643 2644 return attr; 2645 } 2646 2647 2648 /* Return the attribute from a general expression. */ 2649 2650 symbol_attribute 2651 gfc_expr_attr (gfc_expr *e) 2652 { 2653 symbol_attribute attr; 2654 2655 switch (e->expr_type) 2656 { 2657 case EXPR_VARIABLE: 2658 attr = gfc_variable_attr (e, NULL); 2659 break; 2660 2661 case EXPR_FUNCTION: 2662 gfc_clear_attr (&attr); 2663 2664 if (e->value.function.esym && e->value.function.esym->result) 2665 { 2666 gfc_symbol *sym = e->value.function.esym->result; 2667 attr = sym->attr; 2668 if (sym->ts.type == BT_CLASS) 2669 { 2670 attr.dimension = CLASS_DATA (sym)->attr.dimension; 2671 attr.pointer = CLASS_DATA (sym)->attr.class_pointer; 2672 attr.allocatable = CLASS_DATA (sym)->attr.allocatable; 2673 } 2674 } 2675 else if (e->value.function.isym 2676 && e->value.function.isym->transformational 2677 && e->ts.type == BT_CLASS) 2678 attr = CLASS_DATA (e)->attr; 2679 else 2680 attr = gfc_variable_attr (e, NULL); 2681 2682 /* TODO: NULL() returns pointers. May have to take care of this 2683 here. */ 2684 2685 break; 2686 2687 default: 2688 gfc_clear_attr (&attr); 2689 break; 2690 } 2691 2692 return attr; 2693 } 2694 2695 2696 /* Given an expression, figure out what the ultimate expression 2697 attribute is. This routine is similar to gfc_variable_attr with 2698 parts of gfc_expr_attr, but focuses more on the needs of 2699 coarrays. For coarrays a codimension attribute is kind of 2700 "infectious" being propagated once set and never cleared. 2701 The coarray_comp is only set, when the expression refs a coarray 2702 component. REFS_COMP is set when present to true only, when this EXPR 2703 refs a (non-_data) component. To check whether EXPR refs an allocatable 2704 component in a derived type coarray *refs_comp needs to be set and 2705 coarray_comp has to false. */ 2706 2707 static symbol_attribute 2708 caf_variable_attr (gfc_expr *expr, bool in_allocate, bool *refs_comp) 2709 { 2710 int dimension, codimension, pointer, allocatable, target, coarray_comp; 2711 symbol_attribute attr; 2712 gfc_ref *ref; 2713 gfc_symbol *sym; 2714 gfc_component *comp; 2715 2716 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION) 2717 gfc_internal_error ("gfc_caf_attr(): Expression isn't a variable"); 2718 2719 sym = expr->symtree->n.sym; 2720 gfc_clear_attr (&attr); 2721 2722 if (refs_comp) 2723 *refs_comp = false; 2724 2725 if (sym->ts.type == BT_CLASS && sym->attr.class_ok) 2726 { 2727 dimension = CLASS_DATA (sym)->attr.dimension; 2728 codimension = CLASS_DATA (sym)->attr.codimension; 2729 pointer = CLASS_DATA (sym)->attr.class_pointer; 2730 allocatable = CLASS_DATA (sym)->attr.allocatable; 2731 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp; 2732 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp; 2733 } 2734 else 2735 { 2736 dimension = sym->attr.dimension; 2737 codimension = sym->attr.codimension; 2738 pointer = sym->attr.pointer; 2739 allocatable = sym->attr.allocatable; 2740 attr.alloc_comp = sym->ts.type == BT_DERIVED 2741 ? sym->ts.u.derived->attr.alloc_comp : 0; 2742 attr.pointer_comp = sym->ts.type == BT_DERIVED 2743 ? sym->ts.u.derived->attr.pointer_comp : 0; 2744 } 2745 2746 target = coarray_comp = 0; 2747 if (pointer || attr.proc_pointer) 2748 target = 1; 2749 2750 for (ref = expr->ref; ref; ref = ref->next) 2751 switch (ref->type) 2752 { 2753 case REF_ARRAY: 2754 2755 switch (ref->u.ar.type) 2756 { 2757 case AR_FULL: 2758 case AR_SECTION: 2759 dimension = 1; 2760 break; 2761 2762 case AR_ELEMENT: 2763 /* Handle coarrays. */ 2764 if (ref->u.ar.dimen > 0 && !in_allocate) 2765 allocatable = pointer = 0; 2766 break; 2767 2768 case AR_UNKNOWN: 2769 /* If any of start, end or stride is not integer, there will 2770 already have been an error issued. */ 2771 int errors; 2772 gfc_get_errors (NULL, &errors); 2773 if (errors == 0) 2774 gfc_internal_error ("gfc_caf_attr(): Bad array reference"); 2775 } 2776 2777 break; 2778 2779 case REF_COMPONENT: 2780 comp = ref->u.c.component; 2781 2782 if (comp->ts.type == BT_CLASS) 2783 { 2784 /* Set coarray_comp only, when this component introduces the 2785 coarray. */ 2786 coarray_comp = !codimension && CLASS_DATA (comp)->attr.codimension; 2787 codimension |= CLASS_DATA (comp)->attr.codimension; 2788 pointer = CLASS_DATA (comp)->attr.class_pointer; 2789 allocatable = CLASS_DATA (comp)->attr.allocatable; 2790 } 2791 else 2792 { 2793 /* Set coarray_comp only, when this component introduces the 2794 coarray. */ 2795 coarray_comp = !codimension && comp->attr.codimension; 2796 codimension |= comp->attr.codimension; 2797 pointer = comp->attr.pointer; 2798 allocatable = comp->attr.allocatable; 2799 } 2800 2801 if (refs_comp && strcmp (comp->name, "_data") != 0 2802 && (ref->next == NULL 2803 || (ref->next->type == REF_ARRAY && ref->next->next == NULL))) 2804 *refs_comp = true; 2805 2806 if (pointer || attr.proc_pointer) 2807 target = 1; 2808 2809 break; 2810 2811 case REF_SUBSTRING: 2812 case REF_INQUIRY: 2813 allocatable = pointer = 0; 2814 break; 2815 } 2816 2817 attr.dimension = dimension; 2818 attr.codimension = codimension; 2819 attr.pointer = pointer; 2820 attr.allocatable = allocatable; 2821 attr.target = target; 2822 attr.save = sym->attr.save; 2823 attr.coarray_comp = coarray_comp; 2824 2825 return attr; 2826 } 2827 2828 2829 symbol_attribute 2830 gfc_caf_attr (gfc_expr *e, bool in_allocate, bool *refs_comp) 2831 { 2832 symbol_attribute attr; 2833 2834 switch (e->expr_type) 2835 { 2836 case EXPR_VARIABLE: 2837 attr = caf_variable_attr (e, in_allocate, refs_comp); 2838 break; 2839 2840 case EXPR_FUNCTION: 2841 gfc_clear_attr (&attr); 2842 2843 if (e->value.function.esym && e->value.function.esym->result) 2844 { 2845 gfc_symbol *sym = e->value.function.esym->result; 2846 attr = sym->attr; 2847 if (sym->ts.type == BT_CLASS) 2848 { 2849 attr.dimension = CLASS_DATA (sym)->attr.dimension; 2850 attr.pointer = CLASS_DATA (sym)->attr.class_pointer; 2851 attr.allocatable = CLASS_DATA (sym)->attr.allocatable; 2852 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp; 2853 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived 2854 ->attr.pointer_comp; 2855 } 2856 } 2857 else if (e->symtree) 2858 attr = caf_variable_attr (e, in_allocate, refs_comp); 2859 else 2860 gfc_clear_attr (&attr); 2861 break; 2862 2863 default: 2864 gfc_clear_attr (&attr); 2865 break; 2866 } 2867 2868 return attr; 2869 } 2870 2871 2872 /* Match a structure constructor. The initial symbol has already been 2873 seen. */ 2874 2875 typedef struct gfc_structure_ctor_component 2876 { 2877 char* name; 2878 gfc_expr* val; 2879 locus where; 2880 struct gfc_structure_ctor_component* next; 2881 } 2882 gfc_structure_ctor_component; 2883 2884 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component) 2885 2886 static void 2887 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp) 2888 { 2889 free (comp->name); 2890 gfc_free_expr (comp->val); 2891 free (comp); 2892 } 2893 2894 2895 /* Translate the component list into the actual constructor by sorting it in 2896 the order required; this also checks along the way that each and every 2897 component actually has an initializer and handles default initializers 2898 for components without explicit value given. */ 2899 static bool 2900 build_actual_constructor (gfc_structure_ctor_component **comp_head, 2901 gfc_constructor_base *ctor_head, gfc_symbol *sym) 2902 { 2903 gfc_structure_ctor_component *comp_iter; 2904 gfc_component *comp; 2905 2906 for (comp = sym->components; comp; comp = comp->next) 2907 { 2908 gfc_structure_ctor_component **next_ptr; 2909 gfc_expr *value = NULL; 2910 2911 /* Try to find the initializer for the current component by name. */ 2912 next_ptr = comp_head; 2913 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next) 2914 { 2915 if (!strcmp (comp_iter->name, comp->name)) 2916 break; 2917 next_ptr = &comp_iter->next; 2918 } 2919 2920 /* If an extension, try building the parent derived type by building 2921 a value expression for the parent derived type and calling self. */ 2922 if (!comp_iter && comp == sym->components && sym->attr.extension) 2923 { 2924 value = gfc_get_structure_constructor_expr (comp->ts.type, 2925 comp->ts.kind, 2926 &gfc_current_locus); 2927 value->ts = comp->ts; 2928 2929 if (!build_actual_constructor (comp_head, 2930 &value->value.constructor, 2931 comp->ts.u.derived)) 2932 { 2933 gfc_free_expr (value); 2934 return false; 2935 } 2936 2937 gfc_constructor_append_expr (ctor_head, value, NULL); 2938 continue; 2939 } 2940 2941 /* If it was not found, try the default initializer if there's any; 2942 otherwise, it's an error unless this is a deferred parameter. */ 2943 if (!comp_iter) 2944 { 2945 if (comp->initializer) 2946 { 2947 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor " 2948 "with missing optional arguments at %C")) 2949 return false; 2950 value = gfc_copy_expr (comp->initializer); 2951 } 2952 else if (comp->attr.allocatable 2953 || (comp->ts.type == BT_CLASS 2954 && CLASS_DATA (comp)->attr.allocatable)) 2955 { 2956 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for " 2957 "allocatable component %qs given in the " 2958 "structure constructor at %C", comp->name)) 2959 return false; 2960 } 2961 else if (!comp->attr.artificial) 2962 { 2963 gfc_error ("No initializer for component %qs given in the" 2964 " structure constructor at %C", comp->name); 2965 return false; 2966 } 2967 } 2968 else 2969 value = comp_iter->val; 2970 2971 /* Add the value to the constructor chain built. */ 2972 gfc_constructor_append_expr (ctor_head, value, NULL); 2973 2974 /* Remove the entry from the component list. We don't want the expression 2975 value to be free'd, so set it to NULL. */ 2976 if (comp_iter) 2977 { 2978 *next_ptr = comp_iter->next; 2979 comp_iter->val = NULL; 2980 gfc_free_structure_ctor_component (comp_iter); 2981 } 2982 } 2983 return true; 2984 } 2985 2986 2987 bool 2988 gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr, 2989 gfc_actual_arglist **arglist, 2990 bool parent) 2991 { 2992 gfc_actual_arglist *actual; 2993 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter; 2994 gfc_constructor_base ctor_head = NULL; 2995 gfc_component *comp; /* Is set NULL when named component is first seen */ 2996 const char* last_name = NULL; 2997 locus old_locus; 2998 gfc_expr *expr; 2999 3000 expr = parent ? *cexpr : e; 3001 old_locus = gfc_current_locus; 3002 if (parent) 3003 ; /* gfc_current_locus = *arglist->expr ? ->where;*/ 3004 else 3005 gfc_current_locus = expr->where; 3006 3007 comp_tail = comp_head = NULL; 3008 3009 if (!parent && sym->attr.abstract) 3010 { 3011 gfc_error ("Cannot construct ABSTRACT type %qs at %L", 3012 sym->name, &expr->where); 3013 goto cleanup; 3014 } 3015 3016 comp = sym->components; 3017 actual = parent ? *arglist : expr->value.function.actual; 3018 for ( ; actual; ) 3019 { 3020 gfc_component *this_comp = NULL; 3021 3022 if (!comp_head) 3023 comp_tail = comp_head = gfc_get_structure_ctor_component (); 3024 else 3025 { 3026 comp_tail->next = gfc_get_structure_ctor_component (); 3027 comp_tail = comp_tail->next; 3028 } 3029 if (actual->name) 3030 { 3031 if (!gfc_notify_std (GFC_STD_F2003, "Structure" 3032 " constructor with named arguments at %C")) 3033 goto cleanup; 3034 3035 comp_tail->name = xstrdup (actual->name); 3036 last_name = comp_tail->name; 3037 comp = NULL; 3038 } 3039 else 3040 { 3041 /* Components without name are not allowed after the first named 3042 component initializer! */ 3043 if (!comp || comp->attr.artificial) 3044 { 3045 if (last_name) 3046 gfc_error ("Component initializer without name after component" 3047 " named %s at %L", last_name, 3048 actual->expr ? &actual->expr->where 3049 : &gfc_current_locus); 3050 else 3051 gfc_error ("Too many components in structure constructor at " 3052 "%L", actual->expr ? &actual->expr->where 3053 : &gfc_current_locus); 3054 goto cleanup; 3055 } 3056 3057 comp_tail->name = xstrdup (comp->name); 3058 } 3059 3060 /* Find the current component in the structure definition and check 3061 its access is not private. */ 3062 if (comp) 3063 this_comp = gfc_find_component (sym, comp->name, false, false, NULL); 3064 else 3065 { 3066 this_comp = gfc_find_component (sym, (const char *)comp_tail->name, 3067 false, false, NULL); 3068 comp = NULL; /* Reset needed! */ 3069 } 3070 3071 /* Here we can check if a component name is given which does not 3072 correspond to any component of the defined structure. */ 3073 if (!this_comp) 3074 goto cleanup; 3075 3076 /* For a constant string constructor, make sure the length is 3077 correct; truncate of fill with blanks if needed. */ 3078 if (this_comp->ts.type == BT_CHARACTER && !this_comp->attr.allocatable 3079 && this_comp->ts.u.cl && this_comp->ts.u.cl->length 3080 && this_comp->ts.u.cl->length->expr_type == EXPR_CONSTANT 3081 && actual->expr->ts.type == BT_CHARACTER 3082 && actual->expr->expr_type == EXPR_CONSTANT) 3083 { 3084 ptrdiff_t c, e; 3085 c = gfc_mpz_get_hwi (this_comp->ts.u.cl->length->value.integer); 3086 e = actual->expr->value.character.length; 3087 3088 if (c != e) 3089 { 3090 ptrdiff_t i, to; 3091 gfc_char_t *dest; 3092 dest = gfc_get_wide_string (c + 1); 3093 3094 to = e < c ? e : c; 3095 for (i = 0; i < to; i++) 3096 dest[i] = actual->expr->value.character.string[i]; 3097 3098 for (i = e; i < c; i++) 3099 dest[i] = ' '; 3100 3101 dest[c] = '\0'; 3102 free (actual->expr->value.character.string); 3103 3104 actual->expr->value.character.length = c; 3105 actual->expr->value.character.string = dest; 3106 3107 if (warn_line_truncation && c < e) 3108 gfc_warning_now (OPT_Wcharacter_truncation, 3109 "CHARACTER expression will be truncated " 3110 "in constructor (%ld/%ld) at %L", (long int) c, 3111 (long int) e, &actual->expr->where); 3112 } 3113 } 3114 3115 comp_tail->val = actual->expr; 3116 if (actual->expr != NULL) 3117 comp_tail->where = actual->expr->where; 3118 actual->expr = NULL; 3119 3120 /* Check if this component is already given a value. */ 3121 for (comp_iter = comp_head; comp_iter != comp_tail; 3122 comp_iter = comp_iter->next) 3123 { 3124 gcc_assert (comp_iter); 3125 if (!strcmp (comp_iter->name, comp_tail->name)) 3126 { 3127 gfc_error ("Component %qs is initialized twice in the structure" 3128 " constructor at %L", comp_tail->name, 3129 comp_tail->val ? &comp_tail->where 3130 : &gfc_current_locus); 3131 goto cleanup; 3132 } 3133 } 3134 3135 /* F2008, R457/C725, for PURE C1283. */ 3136 if (this_comp->attr.pointer && comp_tail->val 3137 && gfc_is_coindexed (comp_tail->val)) 3138 { 3139 gfc_error ("Coindexed expression to pointer component %qs in " 3140 "structure constructor at %L", comp_tail->name, 3141 &comp_tail->where); 3142 goto cleanup; 3143 } 3144 3145 /* If not explicitly a parent constructor, gather up the components 3146 and build one. */ 3147 if (comp && comp == sym->components 3148 && sym->attr.extension 3149 && comp_tail->val 3150 && (!gfc_bt_struct (comp_tail->val->ts.type) 3151 || 3152 comp_tail->val->ts.u.derived != this_comp->ts.u.derived)) 3153 { 3154 bool m; 3155 gfc_actual_arglist *arg_null = NULL; 3156 3157 actual->expr = comp_tail->val; 3158 comp_tail->val = NULL; 3159 3160 m = gfc_convert_to_structure_constructor (NULL, 3161 comp->ts.u.derived, &comp_tail->val, 3162 comp->ts.u.derived->attr.zero_comp 3163 ? &arg_null : &actual, true); 3164 if (!m) 3165 goto cleanup; 3166 3167 if (comp->ts.u.derived->attr.zero_comp) 3168 { 3169 comp = comp->next; 3170 continue; 3171 } 3172 } 3173 3174 if (comp) 3175 comp = comp->next; 3176 if (parent && !comp) 3177 break; 3178 3179 if (actual) 3180 actual = actual->next; 3181 } 3182 3183 if (!build_actual_constructor (&comp_head, &ctor_head, sym)) 3184 goto cleanup; 3185 3186 /* No component should be left, as this should have caused an error in the 3187 loop constructing the component-list (name that does not correspond to any 3188 component in the structure definition). */ 3189 if (comp_head && sym->attr.extension) 3190 { 3191 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next) 3192 { 3193 gfc_error ("component %qs at %L has already been set by a " 3194 "parent derived type constructor", comp_iter->name, 3195 &comp_iter->where); 3196 } 3197 goto cleanup; 3198 } 3199 else 3200 gcc_assert (!comp_head); 3201 3202 if (parent) 3203 { 3204 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus); 3205 expr->ts.u.derived = sym; 3206 expr->value.constructor = ctor_head; 3207 *cexpr = expr; 3208 } 3209 else 3210 { 3211 expr->ts.u.derived = sym; 3212 expr->ts.kind = 0; 3213 expr->ts.type = BT_DERIVED; 3214 expr->value.constructor = ctor_head; 3215 expr->expr_type = EXPR_STRUCTURE; 3216 } 3217 3218 gfc_current_locus = old_locus; 3219 if (parent) 3220 *arglist = actual; 3221 return true; 3222 3223 cleanup: 3224 gfc_current_locus = old_locus; 3225 3226 for (comp_iter = comp_head; comp_iter; ) 3227 { 3228 gfc_structure_ctor_component *next = comp_iter->next; 3229 gfc_free_structure_ctor_component (comp_iter); 3230 comp_iter = next; 3231 } 3232 gfc_constructor_free (ctor_head); 3233 3234 return false; 3235 } 3236 3237 3238 match 3239 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result) 3240 { 3241 match m; 3242 gfc_expr *e; 3243 gfc_symtree *symtree; 3244 3245 gfc_get_ha_sym_tree (sym->name, &symtree); 3246 3247 e = gfc_get_expr (); 3248 e->symtree = symtree; 3249 e->expr_type = EXPR_FUNCTION; 3250 e->where = gfc_current_locus; 3251 3252 gcc_assert (gfc_fl_struct (sym->attr.flavor) 3253 && symtree->n.sym->attr.flavor == FL_PROCEDURE); 3254 e->value.function.esym = sym; 3255 e->symtree->n.sym->attr.generic = 1; 3256 3257 m = gfc_match_actual_arglist (0, &e->value.function.actual); 3258 if (m != MATCH_YES) 3259 { 3260 gfc_free_expr (e); 3261 return m; 3262 } 3263 3264 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false)) 3265 { 3266 gfc_free_expr (e); 3267 return MATCH_ERROR; 3268 } 3269 3270 /* If a structure constructor is in a DATA statement, then each entity 3271 in the structure constructor must be a constant. Try to reduce the 3272 expression here. */ 3273 if (gfc_in_match_data ()) 3274 gfc_reduce_init_expr (e); 3275 3276 *result = e; 3277 return MATCH_YES; 3278 } 3279 3280 3281 /* If the symbol is an implicit do loop index and implicitly typed, 3282 it should not be host associated. Provide a symtree from the 3283 current namespace. */ 3284 static match 3285 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym) 3286 { 3287 if ((*sym)->attr.flavor == FL_VARIABLE 3288 && (*sym)->ns != gfc_current_ns 3289 && (*sym)->attr.implied_index 3290 && (*sym)->attr.implicit_type 3291 && !(*sym)->attr.use_assoc) 3292 { 3293 int i; 3294 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false); 3295 if (i) 3296 return MATCH_ERROR; 3297 *sym = (*st)->n.sym; 3298 } 3299 return MATCH_YES; 3300 } 3301 3302 3303 /* Procedure pointer as function result: Replace the function symbol by the 3304 auto-generated hidden result variable named "ppr@". */ 3305 3306 static bool 3307 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st) 3308 { 3309 /* Check for procedure pointer result variable. */ 3310 if ((*sym)->attr.function && !(*sym)->attr.external 3311 && (*sym)->result && (*sym)->result != *sym 3312 && (*sym)->result->attr.proc_pointer 3313 && (*sym) == gfc_current_ns->proc_name 3314 && (*sym) == (*sym)->result->ns->proc_name 3315 && strcmp ("ppr@", (*sym)->result->name) == 0) 3316 { 3317 /* Automatic replacement with "hidden" result variable. */ 3318 (*sym)->result->attr.referenced = (*sym)->attr.referenced; 3319 *sym = (*sym)->result; 3320 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name); 3321 return true; 3322 } 3323 return false; 3324 } 3325 3326 3327 /* Matches a variable name followed by anything that might follow it-- 3328 array reference, argument list of a function, etc. */ 3329 3330 match 3331 gfc_match_rvalue (gfc_expr **result) 3332 { 3333 gfc_actual_arglist *actual_arglist; 3334 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1]; 3335 gfc_state_data *st; 3336 gfc_symbol *sym; 3337 gfc_symtree *symtree; 3338 locus where, old_loc; 3339 gfc_expr *e; 3340 match m, m2; 3341 int i; 3342 gfc_typespec *ts; 3343 bool implicit_char; 3344 gfc_ref *ref; 3345 3346 m = gfc_match ("%%loc"); 3347 if (m == MATCH_YES) 3348 { 3349 if (!gfc_notify_std (GFC_STD_LEGACY, "%%LOC() as an rvalue at %C")) 3350 return MATCH_ERROR; 3351 strncpy (name, "loc", 4); 3352 } 3353 3354 else 3355 { 3356 m = gfc_match_name (name); 3357 if (m != MATCH_YES) 3358 return m; 3359 } 3360 3361 /* Check if the symbol exists. */ 3362 if (gfc_find_sym_tree (name, NULL, 1, &symtree)) 3363 return MATCH_ERROR; 3364 3365 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT 3366 type. For derived types we create a generic symbol which links to the 3367 derived type symbol; STRUCTUREs are simpler and must not conflict with 3368 variables. */ 3369 if (!symtree) 3370 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree)) 3371 return MATCH_ERROR; 3372 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT) 3373 { 3374 if (gfc_find_state (COMP_INTERFACE) 3375 && !gfc_current_ns->has_import_set) 3376 i = gfc_get_sym_tree (name, NULL, &symtree, false); 3377 else 3378 i = gfc_get_ha_sym_tree (name, &symtree); 3379 if (i) 3380 return MATCH_ERROR; 3381 } 3382 3383 3384 sym = symtree->n.sym; 3385 e = NULL; 3386 where = gfc_current_locus; 3387 3388 replace_hidden_procptr_result (&sym, &symtree); 3389 3390 /* If this is an implicit do loop index and implicitly typed, 3391 it should not be host associated. */ 3392 m = check_for_implicit_index (&symtree, &sym); 3393 if (m != MATCH_YES) 3394 return m; 3395 3396 gfc_set_sym_referenced (sym); 3397 sym->attr.implied_index = 0; 3398 3399 if (sym->attr.function && sym->result == sym) 3400 { 3401 /* See if this is a directly recursive function call. */ 3402 gfc_gobble_whitespace (); 3403 if (sym->attr.recursive 3404 && gfc_peek_ascii_char () == '(' 3405 && gfc_current_ns->proc_name == sym 3406 && !sym->attr.dimension) 3407 { 3408 gfc_error ("%qs at %C is the name of a recursive function " 3409 "and so refers to the result variable. Use an " 3410 "explicit RESULT variable for direct recursion " 3411 "(12.5.2.1)", sym->name); 3412 return MATCH_ERROR; 3413 } 3414 3415 if (gfc_is_function_return_value (sym, gfc_current_ns)) 3416 goto variable; 3417 3418 if (sym->attr.entry 3419 && (sym->ns == gfc_current_ns 3420 || sym->ns == gfc_current_ns->parent)) 3421 { 3422 gfc_entry_list *el = NULL; 3423 3424 for (el = sym->ns->entries; el; el = el->next) 3425 if (sym == el->sym) 3426 goto variable; 3427 } 3428 } 3429 3430 if (gfc_matching_procptr_assignment) 3431 goto procptr0; 3432 3433 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic) 3434 goto function0; 3435 3436 if (sym->attr.generic) 3437 goto generic_function; 3438 3439 switch (sym->attr.flavor) 3440 { 3441 case FL_VARIABLE: 3442 variable: 3443 e = gfc_get_expr (); 3444 3445 e->expr_type = EXPR_VARIABLE; 3446 e->symtree = symtree; 3447 3448 m = gfc_match_varspec (e, 0, false, true); 3449 break; 3450 3451 case FL_PARAMETER: 3452 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will 3453 end up here. Unfortunately, sym->value->expr_type is set to 3454 EXPR_CONSTANT, and so the if () branch would be followed without 3455 the !sym->as check. */ 3456 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as) 3457 e = gfc_copy_expr (sym->value); 3458 else 3459 { 3460 e = gfc_get_expr (); 3461 e->expr_type = EXPR_VARIABLE; 3462 } 3463 3464 e->symtree = symtree; 3465 m = gfc_match_varspec (e, 0, false, true); 3466 3467 if (sym->ts.is_c_interop || sym->ts.is_iso_c) 3468 break; 3469 3470 /* Variable array references to derived type parameters cause 3471 all sorts of headaches in simplification. Treating such 3472 expressions as variable works just fine for all array 3473 references. */ 3474 if (sym->value && sym->ts.type == BT_DERIVED && e->ref) 3475 { 3476 for (ref = e->ref; ref; ref = ref->next) 3477 if (ref->type == REF_ARRAY) 3478 break; 3479 3480 if (ref == NULL || ref->u.ar.type == AR_FULL) 3481 break; 3482 3483 ref = e->ref; 3484 e->ref = NULL; 3485 gfc_free_expr (e); 3486 e = gfc_get_expr (); 3487 e->expr_type = EXPR_VARIABLE; 3488 e->symtree = symtree; 3489 e->ref = ref; 3490 } 3491 3492 break; 3493 3494 case FL_STRUCT: 3495 case FL_DERIVED: 3496 sym = gfc_use_derived (sym); 3497 if (sym == NULL) 3498 m = MATCH_ERROR; 3499 else 3500 goto generic_function; 3501 break; 3502 3503 /* If we're here, then the name is known to be the name of a 3504 procedure, yet it is not sure to be the name of a function. */ 3505 case FL_PROCEDURE: 3506 3507 /* Procedure Pointer Assignments. */ 3508 procptr0: 3509 if (gfc_matching_procptr_assignment) 3510 { 3511 gfc_gobble_whitespace (); 3512 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(') 3513 /* Parse functions returning a procptr. */ 3514 goto function0; 3515 3516 e = gfc_get_expr (); 3517 e->expr_type = EXPR_VARIABLE; 3518 e->symtree = symtree; 3519 m = gfc_match_varspec (e, 0, false, true); 3520 if (!e->ref && sym->attr.flavor == FL_UNKNOWN 3521 && sym->ts.type == BT_UNKNOWN 3522 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL)) 3523 { 3524 m = MATCH_ERROR; 3525 break; 3526 } 3527 break; 3528 } 3529 3530 if (sym->attr.subroutine) 3531 { 3532 gfc_error ("Unexpected use of subroutine name %qs at %C", 3533 sym->name); 3534 m = MATCH_ERROR; 3535 break; 3536 } 3537 3538 /* At this point, the name has to be a non-statement function. 3539 If the name is the same as the current function being 3540 compiled, then we have a variable reference (to the function 3541 result) if the name is non-recursive. */ 3542 3543 st = gfc_enclosing_unit (NULL); 3544 3545 if (st != NULL 3546 && st->state == COMP_FUNCTION 3547 && st->sym == sym 3548 && !sym->attr.recursive) 3549 { 3550 e = gfc_get_expr (); 3551 e->symtree = symtree; 3552 e->expr_type = EXPR_VARIABLE; 3553 3554 m = gfc_match_varspec (e, 0, false, true); 3555 break; 3556 } 3557 3558 /* Match a function reference. */ 3559 function0: 3560 m = gfc_match_actual_arglist (0, &actual_arglist); 3561 if (m == MATCH_NO) 3562 { 3563 if (sym->attr.proc == PROC_ST_FUNCTION) 3564 gfc_error ("Statement function %qs requires argument list at %C", 3565 sym->name); 3566 else 3567 gfc_error ("Function %qs requires an argument list at %C", 3568 sym->name); 3569 3570 m = MATCH_ERROR; 3571 break; 3572 } 3573 3574 if (m != MATCH_YES) 3575 { 3576 m = MATCH_ERROR; 3577 break; 3578 } 3579 3580 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */ 3581 sym = symtree->n.sym; 3582 3583 replace_hidden_procptr_result (&sym, &symtree); 3584 3585 e = gfc_get_expr (); 3586 e->symtree = symtree; 3587 e->expr_type = EXPR_FUNCTION; 3588 e->value.function.actual = actual_arglist; 3589 e->where = gfc_current_locus; 3590 3591 if (sym->ts.type == BT_CLASS && sym->attr.class_ok 3592 && CLASS_DATA (sym)->as) 3593 e->rank = CLASS_DATA (sym)->as->rank; 3594 else if (sym->as != NULL) 3595 e->rank = sym->as->rank; 3596 3597 if (!sym->attr.function 3598 && !gfc_add_function (&sym->attr, sym->name, NULL)) 3599 { 3600 m = MATCH_ERROR; 3601 break; 3602 } 3603 3604 /* Check here for the existence of at least one argument for the 3605 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The 3606 argument(s) given will be checked in gfc_iso_c_func_interface, 3607 during resolution of the function call. */ 3608 if (sym->attr.is_iso_c == 1 3609 && (sym->from_intmod == INTMOD_ISO_C_BINDING 3610 && (sym->intmod_sym_id == ISOCBINDING_LOC 3611 || sym->intmod_sym_id == ISOCBINDING_FUNLOC 3612 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED))) 3613 { 3614 /* make sure we were given a param */ 3615 if (actual_arglist == NULL) 3616 { 3617 gfc_error ("Missing argument to %qs at %C", sym->name); 3618 m = MATCH_ERROR; 3619 break; 3620 } 3621 } 3622 3623 if (sym->result == NULL) 3624 sym->result = sym; 3625 3626 gfc_gobble_whitespace (); 3627 /* F08:C612. */ 3628 if (gfc_peek_ascii_char() == '%') 3629 { 3630 gfc_error ("The leftmost part-ref in a data-ref cannot be a " 3631 "function reference at %C"); 3632 m = MATCH_ERROR; 3633 } 3634 3635 m = MATCH_YES; 3636 break; 3637 3638 case FL_UNKNOWN: 3639 3640 /* Special case for derived type variables that get their types 3641 via an IMPLICIT statement. This can't wait for the 3642 resolution phase. */ 3643 3644 old_loc = gfc_current_locus; 3645 if (gfc_match_member_sep (sym) == MATCH_YES 3646 && sym->ts.type == BT_UNKNOWN 3647 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) 3648 gfc_set_default_type (sym, 0, sym->ns); 3649 gfc_current_locus = old_loc; 3650 3651 /* If the symbol has a (co)dimension attribute, the expression is a 3652 variable. */ 3653 3654 if (sym->attr.dimension || sym->attr.codimension) 3655 { 3656 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL)) 3657 { 3658 m = MATCH_ERROR; 3659 break; 3660 } 3661 3662 e = gfc_get_expr (); 3663 e->symtree = symtree; 3664 e->expr_type = EXPR_VARIABLE; 3665 m = gfc_match_varspec (e, 0, false, true); 3666 break; 3667 } 3668 3669 if (sym->ts.type == BT_CLASS && sym->attr.class_ok 3670 && (CLASS_DATA (sym)->attr.dimension 3671 || CLASS_DATA (sym)->attr.codimension)) 3672 { 3673 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL)) 3674 { 3675 m = MATCH_ERROR; 3676 break; 3677 } 3678 3679 e = gfc_get_expr (); 3680 e->symtree = symtree; 3681 e->expr_type = EXPR_VARIABLE; 3682 m = gfc_match_varspec (e, 0, false, true); 3683 break; 3684 } 3685 3686 /* Name is not an array, so we peek to see if a '(' implies a 3687 function call or a substring reference. Otherwise the 3688 variable is just a scalar. */ 3689 3690 gfc_gobble_whitespace (); 3691 if (gfc_peek_ascii_char () != '(') 3692 { 3693 /* Assume a scalar variable */ 3694 e = gfc_get_expr (); 3695 e->symtree = symtree; 3696 e->expr_type = EXPR_VARIABLE; 3697 3698 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL)) 3699 { 3700 m = MATCH_ERROR; 3701 break; 3702 } 3703 3704 /*FIXME:??? gfc_match_varspec does set this for us: */ 3705 e->ts = sym->ts; 3706 m = gfc_match_varspec (e, 0, false, true); 3707 break; 3708 } 3709 3710 /* See if this is a function reference with a keyword argument 3711 as first argument. We do this because otherwise a spurious 3712 symbol would end up in the symbol table. */ 3713 3714 old_loc = gfc_current_locus; 3715 m2 = gfc_match (" ( %n =", argname); 3716 gfc_current_locus = old_loc; 3717 3718 e = gfc_get_expr (); 3719 e->symtree = symtree; 3720 3721 if (m2 != MATCH_YES) 3722 { 3723 /* Try to figure out whether we're dealing with a character type. 3724 We're peeking ahead here, because we don't want to call 3725 match_substring if we're dealing with an implicitly typed 3726 non-character variable. */ 3727 implicit_char = false; 3728 if (sym->ts.type == BT_UNKNOWN) 3729 { 3730 ts = gfc_get_default_type (sym->name, NULL); 3731 if (ts->type == BT_CHARACTER) 3732 implicit_char = true; 3733 } 3734 3735 /* See if this could possibly be a substring reference of a name 3736 that we're not sure is a variable yet. */ 3737 3738 if ((implicit_char || sym->ts.type == BT_CHARACTER) 3739 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES) 3740 { 3741 3742 e->expr_type = EXPR_VARIABLE; 3743 3744 if (sym->attr.flavor != FL_VARIABLE 3745 && !gfc_add_flavor (&sym->attr, FL_VARIABLE, 3746 sym->name, NULL)) 3747 { 3748 m = MATCH_ERROR; 3749 break; 3750 } 3751 3752 if (sym->ts.type == BT_UNKNOWN 3753 && !gfc_set_default_type (sym, 1, NULL)) 3754 { 3755 m = MATCH_ERROR; 3756 break; 3757 } 3758 3759 e->ts = sym->ts; 3760 if (e->ref) 3761 e->ts.u.cl = NULL; 3762 m = MATCH_YES; 3763 break; 3764 } 3765 } 3766 3767 /* Give up, assume we have a function. */ 3768 3769 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */ 3770 sym = symtree->n.sym; 3771 e->expr_type = EXPR_FUNCTION; 3772 3773 if (!sym->attr.function 3774 && !gfc_add_function (&sym->attr, sym->name, NULL)) 3775 { 3776 m = MATCH_ERROR; 3777 break; 3778 } 3779 3780 sym->result = sym; 3781 3782 m = gfc_match_actual_arglist (0, &e->value.function.actual); 3783 if (m == MATCH_NO) 3784 gfc_error ("Missing argument list in function %qs at %C", sym->name); 3785 3786 if (m != MATCH_YES) 3787 { 3788 m = MATCH_ERROR; 3789 break; 3790 } 3791 3792 /* If our new function returns a character, array or structure 3793 type, it might have subsequent references. */ 3794 3795 m = gfc_match_varspec (e, 0, false, true); 3796 if (m == MATCH_NO) 3797 m = MATCH_YES; 3798 3799 break; 3800 3801 generic_function: 3802 /* Look for symbol first; if not found, look for STRUCTURE type symbol 3803 specially. Creates a generic symbol for derived types. */ 3804 gfc_find_sym_tree (name, NULL, 1, &symtree); 3805 if (!symtree) 3806 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree); 3807 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT) 3808 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */ 3809 3810 e = gfc_get_expr (); 3811 e->symtree = symtree; 3812 e->expr_type = EXPR_FUNCTION; 3813 3814 if (gfc_fl_struct (sym->attr.flavor)) 3815 { 3816 e->value.function.esym = sym; 3817 e->symtree->n.sym->attr.generic = 1; 3818 } 3819 3820 m = gfc_match_actual_arglist (0, &e->value.function.actual); 3821 break; 3822 3823 case FL_NAMELIST: 3824 m = MATCH_ERROR; 3825 break; 3826 3827 default: 3828 gfc_error ("Symbol at %C is not appropriate for an expression"); 3829 return MATCH_ERROR; 3830 } 3831 3832 if (m == MATCH_YES) 3833 { 3834 e->where = where; 3835 *result = e; 3836 } 3837 else 3838 gfc_free_expr (e); 3839 3840 return m; 3841 } 3842 3843 3844 /* Match a variable, i.e. something that can be assigned to. This 3845 starts as a symbol, can be a structure component or an array 3846 reference. It can be a function if the function doesn't have a 3847 separate RESULT variable. If the symbol has not been previously 3848 seen, we assume it is a variable. 3849 3850 This function is called by two interface functions: 3851 gfc_match_variable, which has host_flag = 1, and 3852 gfc_match_equiv_variable, with host_flag = 0, to restrict the 3853 match of the symbol to the local scope. */ 3854 3855 static match 3856 match_variable (gfc_expr **result, int equiv_flag, int host_flag) 3857 { 3858 gfc_symbol *sym, *dt_sym; 3859 gfc_symtree *st; 3860 gfc_expr *expr; 3861 locus where, old_loc; 3862 match m; 3863 3864 /* Since nothing has any business being an lvalue in a module 3865 specification block, an interface block or a contains section, 3866 we force the changed_symbols mechanism to work by setting 3867 host_flag to 0. This prevents valid symbols that have the name 3868 of keywords, such as 'end', being turned into variables by 3869 failed matching to assignments for, e.g., END INTERFACE. */ 3870 if (gfc_current_state () == COMP_MODULE 3871 || gfc_current_state () == COMP_SUBMODULE 3872 || gfc_current_state () == COMP_INTERFACE 3873 || gfc_current_state () == COMP_CONTAINS) 3874 host_flag = 0; 3875 3876 where = gfc_current_locus; 3877 m = gfc_match_sym_tree (&st, host_flag); 3878 if (m != MATCH_YES) 3879 return m; 3880 3881 sym = st->n.sym; 3882 3883 /* If this is an implicit do loop index and implicitly typed, 3884 it should not be host associated. */ 3885 m = check_for_implicit_index (&st, &sym); 3886 if (m != MATCH_YES) 3887 return m; 3888 3889 sym->attr.implied_index = 0; 3890 3891 gfc_set_sym_referenced (sym); 3892 3893 /* STRUCTUREs may share names with variables, but derived types may not. */ 3894 if (sym->attr.flavor == FL_PROCEDURE && sym->generic 3895 && (dt_sym = gfc_find_dt_in_generic (sym))) 3896 { 3897 if (dt_sym->attr.flavor == FL_DERIVED) 3898 gfc_error ("Derived type %qs cannot be used as a variable at %C", 3899 sym->name); 3900 return MATCH_ERROR; 3901 } 3902 3903 switch (sym->attr.flavor) 3904 { 3905 case FL_VARIABLE: 3906 /* Everything is alright. */ 3907 break; 3908 3909 case FL_UNKNOWN: 3910 { 3911 sym_flavor flavor = FL_UNKNOWN; 3912 3913 gfc_gobble_whitespace (); 3914 3915 if (sym->attr.external || sym->attr.procedure 3916 || sym->attr.function || sym->attr.subroutine) 3917 flavor = FL_PROCEDURE; 3918 3919 /* If it is not a procedure, is not typed and is host associated, 3920 we cannot give it a flavor yet. */ 3921 else if (sym->ns == gfc_current_ns->parent 3922 && sym->ts.type == BT_UNKNOWN) 3923 break; 3924 3925 /* These are definitive indicators that this is a variable. */ 3926 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN 3927 || sym->attr.pointer || sym->as != NULL) 3928 flavor = FL_VARIABLE; 3929 3930 if (flavor != FL_UNKNOWN 3931 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL)) 3932 return MATCH_ERROR; 3933 } 3934 break; 3935 3936 case FL_PARAMETER: 3937 if (equiv_flag) 3938 { 3939 gfc_error ("Named constant at %C in an EQUIVALENCE"); 3940 return MATCH_ERROR; 3941 } 3942 /* Otherwise this is checked for and an error given in the 3943 variable definition context checks. */ 3944 break; 3945 3946 case FL_PROCEDURE: 3947 /* Check for a nonrecursive function result variable. */ 3948 if (sym->attr.function 3949 && !sym->attr.external 3950 && sym->result == sym 3951 && (gfc_is_function_return_value (sym, gfc_current_ns) 3952 || (sym->attr.entry 3953 && sym->ns == gfc_current_ns) 3954 || (sym->attr.entry 3955 && sym->ns == gfc_current_ns->parent))) 3956 { 3957 /* If a function result is a derived type, then the derived 3958 type may still have to be resolved. */ 3959 3960 if (sym->ts.type == BT_DERIVED 3961 && gfc_use_derived (sym->ts.u.derived) == NULL) 3962 return MATCH_ERROR; 3963 break; 3964 } 3965 3966 if (sym->attr.proc_pointer 3967 || replace_hidden_procptr_result (&sym, &st)) 3968 break; 3969 3970 /* Fall through to error */ 3971 gcc_fallthrough (); 3972 3973 default: 3974 gfc_error ("%qs at %C is not a variable", sym->name); 3975 return MATCH_ERROR; 3976 } 3977 3978 /* Special case for derived type variables that get their types 3979 via an IMPLICIT statement. This can't wait for the 3980 resolution phase. */ 3981 3982 { 3983 gfc_namespace * implicit_ns; 3984 3985 if (gfc_current_ns->proc_name == sym) 3986 implicit_ns = gfc_current_ns; 3987 else 3988 implicit_ns = sym->ns; 3989 3990 old_loc = gfc_current_locus; 3991 if (gfc_match_member_sep (sym) == MATCH_YES 3992 && sym->ts.type == BT_UNKNOWN 3993 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED) 3994 gfc_set_default_type (sym, 0, implicit_ns); 3995 gfc_current_locus = old_loc; 3996 } 3997 3998 expr = gfc_get_expr (); 3999 4000 expr->expr_type = EXPR_VARIABLE; 4001 expr->symtree = st; 4002 expr->ts = sym->ts; 4003 expr->where = where; 4004 4005 /* Now see if we have to do more. */ 4006 m = gfc_match_varspec (expr, equiv_flag, false, false); 4007 if (m != MATCH_YES) 4008 { 4009 gfc_free_expr (expr); 4010 return m; 4011 } 4012 4013 *result = expr; 4014 return MATCH_YES; 4015 } 4016 4017 4018 match 4019 gfc_match_variable (gfc_expr **result, int equiv_flag) 4020 { 4021 return match_variable (result, equiv_flag, 1); 4022 } 4023 4024 4025 match 4026 gfc_match_equiv_variable (gfc_expr **result) 4027 { 4028 return match_variable (result, 1, 0); 4029 } 4030 4031