2017-09-26 Thomas Koenig <tkoenig@gcc.gnu.org>
[official-gcc.git] / gcc / fortran / primary.c
blob8537d9305d5b20fbd8f329427f99dd990eb87a4d
1 /* Primary expression subroutines
2 Copyright (C) 2000-2017 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GCC.
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.
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.
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/>. */
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"
31 int matching_actual_arglist = 0;
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'. */
39 static match
40 match_kind_param (int *kind, int *is_iso_c)
42 char name[GFC_MAX_SYMBOL_LEN + 1];
43 gfc_symbol *sym;
44 match m;
46 *is_iso_c = 0;
48 m = gfc_match_small_literal_int (kind, NULL);
49 if (m != MATCH_NO)
50 return m;
52 m = gfc_match_name (name);
53 if (m != MATCH_YES)
54 return m;
56 if (gfc_find_symbol (name, NULL, 1, &sym))
57 return MATCH_ERROR;
59 if (sym == NULL)
60 return MATCH_NO;
62 *is_iso_c = sym->attr.is_iso_c;
64 if (sym->attr.flavor != FL_PARAMETER)
65 return MATCH_NO;
67 if (sym->value == NULL)
68 return MATCH_NO;
70 if (gfc_extract_int (sym->value, kind))
71 return MATCH_NO;
73 gfc_set_sym_referenced (sym);
75 if (*kind < 0)
76 return MATCH_NO;
78 return MATCH_YES;
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'. */
90 static int
91 get_kind (int *is_iso_c)
93 int kind;
94 match m;
96 *is_iso_c = 0;
98 if (gfc_match_char ('_') != MATCH_YES)
99 return -2;
101 m = match_kind_param (&kind, is_iso_c);
102 if (m == MATCH_NO)
103 gfc_error ("Missing kind-parameter at %C");
105 return (m == MATCH_YES) ? kind : -1;
109 /* Given a character and a radix, see if the character is a valid
110 digit in that radix. */
113 gfc_check_digit (char c, int radix)
115 int r;
117 switch (radix)
119 case 2:
120 r = ('0' <= c && c <= '1');
121 break;
123 case 8:
124 r = ('0' <= c && c <= '7');
125 break;
127 case 10:
128 r = ('0' <= c && c <= '9');
129 break;
131 case 16:
132 r = ISXDIGIT (c);
133 break;
135 default:
136 gfc_internal_error ("gfc_check_digit(): bad radix");
139 return r;
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. */
148 static int
149 match_digits (int signflag, int radix, char *buffer)
151 locus old_loc;
152 int length;
153 char c;
155 length = 0;
156 c = gfc_next_ascii_char ();
158 if (signflag && (c == '+' || c == '-'))
160 if (buffer != NULL)
161 *buffer++ = c;
162 gfc_gobble_whitespace ();
163 c = gfc_next_ascii_char ();
164 length++;
167 if (!gfc_check_digit (c, radix))
168 return -1;
170 length++;
171 if (buffer != NULL)
172 *buffer++ = c;
174 for (;;)
176 old_loc = gfc_current_locus;
177 c = gfc_next_ascii_char ();
179 if (!gfc_check_digit (c, radix))
180 break;
182 if (buffer != NULL)
183 *buffer++ = c;
184 length++;
187 gfc_current_locus = old_loc;
189 return length;
193 /* Match an integer (digit string and optional kind).
194 A sign will be accepted if signflag is set. */
196 static match
197 match_integer_constant (gfc_expr **result, int signflag)
199 int length, kind, is_iso_c;
200 locus old_loc;
201 char *buffer;
202 gfc_expr *e;
204 old_loc = gfc_current_locus;
205 gfc_gobble_whitespace ();
207 length = match_digits (signflag, 10, NULL);
208 gfc_current_locus = old_loc;
209 if (length == -1)
210 return MATCH_NO;
212 buffer = (char *) alloca (length + 1);
213 memset (buffer, '\0', length + 1);
215 gfc_gobble_whitespace ();
217 match_digits (signflag, 10, buffer);
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;
225 if (kind == 4 && flag_integer4_kind == 8)
226 kind = 8;
228 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
230 gfc_error ("Integer kind %d at %C not available", kind);
231 return MATCH_ERROR;
234 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
235 e->ts.is_c_interop = is_iso_c;
237 if (gfc_range_check (e) != ARITH_OK)
239 gfc_error ("Integer too big for its kind at %C. This check can be "
240 "disabled with the option -fno-range-check");
242 gfc_free_expr (e);
243 return MATCH_ERROR;
246 *result = e;
247 return MATCH_YES;
251 /* Match a Hollerith constant. */
253 static match
254 match_hollerith_constant (gfc_expr **result)
256 locus old_loc;
257 gfc_expr *e = NULL;
258 int num, pad;
259 int i;
261 old_loc = gfc_current_locus;
262 gfc_gobble_whitespace ();
264 if (match_integer_constant (&e, 0) == MATCH_YES
265 && gfc_match_char ('h') == MATCH_YES)
267 if (!gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant at %C"))
268 goto cleanup;
270 if (gfc_extract_int (e, &num, 1))
271 goto cleanup;
272 if (num == 0)
274 gfc_error ("Invalid Hollerith constant: %L must contain at least "
275 "one character", &old_loc);
276 goto cleanup;
278 if (e->ts.kind != gfc_default_integer_kind)
280 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
281 "should be default", &old_loc);
282 goto cleanup;
284 else
286 gfc_free_expr (e);
287 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
288 &gfc_current_locus);
290 /* Calculate padding needed to fit default integer memory. */
291 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
293 e->representation.string = XCNEWVEC (char, num + pad + 1);
295 for (i = 0; i < num; i++)
297 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
298 if (! gfc_wide_fits_in_byte (c))
300 gfc_error ("Invalid Hollerith constant at %L contains a "
301 "wide character", &old_loc);
302 goto cleanup;
305 e->representation.string[i] = (unsigned char) c;
308 /* Now pad with blanks and end with a null char. */
309 for (i = 0; i < pad; i++)
310 e->representation.string[num + i] = ' ';
312 e->representation.string[num + i] = '\0';
313 e->representation.length = num + pad;
314 e->ts.u.pad = pad;
316 *result = e;
317 return MATCH_YES;
321 gfc_free_expr (e);
322 gfc_current_locus = old_loc;
323 return MATCH_NO;
325 cleanup:
326 gfc_free_expr (e);
327 return MATCH_ERROR;
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. */
337 static match
338 match_boz_constant (gfc_expr **result)
340 int radix, length, x_hex, kind;
341 locus old_loc, start_loc;
342 char *buffer, post, delim;
343 gfc_expr *e;
345 start_loc = old_loc = gfc_current_locus;
346 gfc_gobble_whitespace ();
348 x_hex = 0;
349 switch (post = gfc_next_ascii_char ())
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;
377 /* No whitespace allowed here. */
379 if (post == 0)
380 delim = gfc_next_ascii_char ();
382 if (delim != '\'' && delim != '\"')
383 goto backup;
385 if (x_hex
386 && (!gfc_notify_std(GFC_STD_GNU, "Hexadecimal "
387 "constant at %C uses non-standard syntax")))
388 return MATCH_ERROR;
390 old_loc = gfc_current_locus;
392 length = match_digits (0, radix, NULL);
393 if (length == -1)
395 gfc_error ("Empty set of digits in BOZ constant at %C");
396 return MATCH_ERROR;
399 if (gfc_next_ascii_char () != delim)
401 gfc_error ("Illegal character in BOZ constant at %C");
402 return MATCH_ERROR;
405 if (post == 1)
407 switch (gfc_next_ascii_char ())
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;
424 if (!gfc_notify_std (GFC_STD_GNU, "BOZ constant "
425 "at %C uses non-standard postfix syntax"))
426 return MATCH_ERROR;
429 gfc_current_locus = old_loc;
431 buffer = (char *) alloca (length + 1);
432 memset (buffer, '\0', length + 1);
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. */
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." */
446 kind = gfc_max_integer_kind;
447 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
449 /* Mark as boz variable. */
450 e->is_boz = 1;
452 if (gfc_range_check (e) != ARITH_OK)
454 gfc_error ("Integer too big for integer kind %i at %C", kind);
455 gfc_free_expr (e);
456 return MATCH_ERROR;
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;
464 *result = e;
465 return MATCH_YES;
467 backup:
468 gfc_current_locus = start_loc;
469 return MATCH_NO;
473 /* Match a real constant of some sort. Allow a signed constant if signflag
474 is nonzero. */
476 static match
477 match_real_constant (gfc_expr **result, int signflag)
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;
485 old_loc = gfc_current_locus;
486 gfc_gobble_whitespace ();
488 e = NULL;
490 default_exponent = 0;
491 count = 0;
492 seen_dp = 0;
493 seen_digits = 0;
494 exp_char = ' ';
495 negate = FALSE;
497 c = gfc_next_ascii_char ();
498 if (signflag && (c == '+' || c == '-'))
500 if (c == '-')
501 negate = TRUE;
503 gfc_gobble_whitespace ();
504 c = gfc_next_ascii_char ();
507 /* Scan significand. */
508 for (;; c = gfc_next_ascii_char (), count++)
510 if (c == '.')
512 if (seen_dp)
513 goto done;
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 ();
520 if (c == 'e' || c == 'd' || c == 'q')
522 c = gfc_next_ascii_char ();
523 if (c == '.')
524 goto done; /* Operator named .e. or .d. */
527 if (ISALPHA (c))
528 goto done; /* Distinguish 1.e9 from 1.eq.2 */
530 gfc_current_locus = temp_loc;
531 seen_dp = 1;
532 continue;
535 if (ISDIGIT (c))
537 seen_digits = 1;
538 continue;
541 break;
544 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
545 goto done;
546 exp_char = c;
549 if (c == 'q')
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");
560 /* Scan exponent. */
561 c = gfc_next_ascii_char ();
562 count++;
564 if (c == '+' || c == '-')
565 { /* optional sign */
566 c = gfc_next_ascii_char ();
567 count++;
570 if (!ISDIGIT (c))
572 /* With -fdec, default exponent to 0 instead of complaining. */
573 if (flag_dec)
574 default_exponent = 1;
575 else
577 gfc_error ("Missing exponent in real number at %C");
578 return MATCH_ERROR;
582 while (ISDIGIT (c))
584 c = gfc_next_ascii_char ();
585 count++;
588 done:
589 /* Check that we have a numeric constant. */
590 if (!seen_digits || (!seen_dp && exp_char == ' '))
592 gfc_current_locus = old_loc;
593 return MATCH_NO;
596 /* Convert the number. */
597 gfc_current_locus = old_loc;
598 gfc_gobble_whitespace ();
600 buffer = (char *) alloca (count + default_exponent + 1);
601 memset (buffer, '\0', count + default_exponent + 1);
603 p = buffer;
604 c = gfc_next_ascii_char ();
605 if (c == '+' || c == '-')
607 gfc_gobble_whitespace ();
608 c = gfc_next_ascii_char ();
611 /* Hack for mpfr_set_str(). */
612 for (;;)
614 if (c == 'd' || c == 'q')
615 *p = 'e';
616 else
617 *p = c;
618 p++;
619 if (--count == 0)
620 break;
622 c = gfc_next_ascii_char ();
624 if (default_exponent)
625 *p++ = '0';
627 kind = get_kind (&is_iso_c);
628 if (kind == -1)
629 goto cleanup;
631 switch (exp_char)
633 case 'd':
634 if (kind != -2)
636 gfc_error ("Real number at %C has a %<d%> exponent and an explicit "
637 "kind");
638 goto cleanup;
640 kind = gfc_default_double_kind;
642 if (kind == 4)
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;
652 if (kind == 8)
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;
661 break;
663 case 'q':
664 if (kind != -2)
666 gfc_error ("Real number at %C has a %<q%> exponent and an explicit "
667 "kind");
668 goto cleanup;
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)
677 kind = 10;
678 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
680 gfc_error ("Invalid exponent-letter %<q%> in "
681 "real-literal-constant at %C");
682 goto cleanup;
685 break;
687 default:
688 if (kind == -2)
689 kind = gfc_default_real_kind;
691 if (kind == 4)
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;
701 if (kind == 8)
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;
711 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
713 gfc_error ("Invalid real kind %d at %C", kind);
714 goto cleanup;
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;
723 switch (gfc_range_check (e))
725 case ARITH_OK:
726 break;
727 case ARITH_OVERFLOW:
728 gfc_error ("Real constant overflows its kind at %C");
729 goto cleanup;
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;
737 default:
738 gfc_internal_error ("gfc_range_check() returned bad value");
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.
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).
751 if (warn_conversion_extra)
753 mpfr_t r;
754 char *c, *p;
755 bool did_break;
757 c = strchr (buffer, 'e');
758 if (c == NULL)
759 c = buffer + strlen(buffer);
761 did_break = false;
762 for (p = c - 1; p >= buffer; p--)
764 if (*p == '.')
765 continue;
767 if (*p != '0')
769 *p = '0';
770 did_break = true;
771 break;
775 if (did_break)
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);
782 mpfr_sub (r, r, e->value.real, GFC_RND_MODE);
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));
789 mpfr_clear (r);
793 *result = e;
794 return MATCH_YES;
796 cleanup:
797 gfc_free_expr (e);
798 return MATCH_ERROR;
802 /* Match a substring reference. */
804 static match
805 match_substring (gfc_charlen *cl, int init, gfc_ref **result, bool deferred)
807 gfc_expr *start, *end;
808 locus old_loc;
809 gfc_ref *ref;
810 match m;
812 start = NULL;
813 end = NULL;
815 old_loc = gfc_current_locus;
817 m = gfc_match_char ('(');
818 if (m != MATCH_YES)
819 return MATCH_NO;
821 if (gfc_match_char (':') != MATCH_YES)
823 if (init)
824 m = gfc_match_init_expr (&start);
825 else
826 m = gfc_match_expr (&start);
828 if (m != MATCH_YES)
830 m = MATCH_NO;
831 goto cleanup;
834 m = gfc_match_char (':');
835 if (m != MATCH_YES)
836 goto cleanup;
839 if (gfc_match_char (')') != MATCH_YES)
841 if (init)
842 m = gfc_match_init_expr (&end);
843 else
844 m = gfc_match_expr (&end);
846 if (m == MATCH_NO)
847 goto syntax;
848 if (m == MATCH_ERROR)
849 goto cleanup;
851 m = gfc_match_char (')');
852 if (m == MATCH_NO)
853 goto syntax;
856 /* Optimize away the (:) reference. */
857 if (start == NULL && end == NULL && !deferred)
858 ref = NULL;
859 else
861 ref = gfc_get_ref ();
863 ref->type = REF_SUBSTRING;
864 if (start == NULL)
865 start = gfc_get_int_expr (gfc_default_integer_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;
873 *result = ref;
874 return MATCH_YES;
876 syntax:
877 gfc_error ("Syntax error in SUBSTRING specification at %C");
878 m = MATCH_ERROR;
880 cleanup:
881 gfc_free_expr (start);
882 gfc_free_expr (end);
884 gfc_current_locus = old_loc;
885 return m;
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.
893 Special return values for "ret" argument are:
894 -1 End of the string, as determined by the delimiter
895 -2 Unterminated string detected
897 Backslash codes are also expanded at this time. */
899 static gfc_char_t
900 next_string_char (gfc_char_t delimiter, int *ret)
902 locus old_locus;
903 gfc_char_t c;
905 c = gfc_next_char_literal (INSTRING_WARN);
906 *ret = 0;
908 if (c == '\n')
910 *ret = -2;
911 return 0;
914 if (flag_backslash && c == '\\')
916 old_locus = gfc_current_locus;
918 if (gfc_match_special_char (&c) == MATCH_NO)
919 gfc_current_locus = old_locus;
921 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
922 gfc_warning (0, "Extension: backslash character at %C");
925 if (c != delimiter)
926 return c;
928 old_locus = gfc_current_locus;
929 c = gfc_next_char_literal (NONSTRING);
931 if (c == delimiter)
932 return c;
933 gfc_current_locus = old_locus;
935 *ret = -1;
936 return 0;
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:
944 kind_____'string'
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. */
952 static match
953 match_charkind_name (char *name)
955 locus old_loc;
956 char c, peek;
957 int len;
959 gfc_gobble_whitespace ();
960 c = gfc_next_ascii_char ();
961 if (!ISALPHA (c))
962 return MATCH_NO;
964 *name++ = c;
965 len = 1;
967 for (;;)
969 old_loc = gfc_current_locus;
970 c = gfc_next_ascii_char ();
972 if (c == '_')
974 peek = gfc_peek_ascii_char ();
976 if (peek == '\'' || peek == '\"')
978 gfc_current_locus = old_loc;
979 *name = '\0';
980 return MATCH_YES;
984 if (!ISALNUM (c)
985 && c != '_'
986 && (c != '$' || !flag_dollar_ok))
987 break;
989 *name++ = c;
990 if (++len > GFC_MAX_SYMBOL_LEN)
991 break;
994 return MATCH_NO;
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. */
1005 static match
1006 match_string_constant (gfc_expr **result)
1008 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
1009 int i, kind, length, save_warn_ampersand, ret;
1010 locus old_locus, start_locus;
1011 gfc_symbol *sym;
1012 gfc_expr *e;
1013 match m;
1014 gfc_char_t c, delimiter, *p;
1016 old_locus = gfc_current_locus;
1018 gfc_gobble_whitespace ();
1020 c = gfc_next_char ();
1021 if (c == '\'' || c == '"')
1023 kind = gfc_default_character_kind;
1024 start_locus = gfc_current_locus;
1025 goto got_delim;
1028 if (gfc_wide_is_digit (c))
1030 kind = 0;
1032 while (gfc_wide_is_digit (c))
1034 kind = kind * 10 + c - '0';
1035 if (kind > 9999999)
1036 goto no_match;
1037 c = gfc_next_char ();
1041 else
1043 gfc_current_locus = old_locus;
1045 m = match_charkind_name (name);
1046 if (m != MATCH_YES)
1047 goto no_match;
1049 if (gfc_find_symbol (name, NULL, 1, &sym)
1050 || sym == NULL
1051 || sym->attr.flavor != FL_PARAMETER)
1052 goto no_match;
1054 kind = -1;
1055 c = gfc_next_char ();
1058 if (c == ' ')
1060 gfc_gobble_whitespace ();
1061 c = gfc_next_char ();
1064 if (c != '_')
1065 goto no_match;
1067 gfc_gobble_whitespace ();
1069 c = gfc_next_char ();
1070 if (c != '\'' && c != '"')
1071 goto no_match;
1073 start_locus = gfc_current_locus;
1075 if (kind == -1)
1077 if (gfc_extract_int (sym->value, &kind, 1))
1078 return MATCH_ERROR;
1079 gfc_set_sym_referenced (sym);
1082 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1084 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1085 return MATCH_ERROR;
1088 got_delim:
1089 /* Scan the string into a block of memory by first figuring out how
1090 long it is, allocating the structure, then re-reading it. This
1091 isn't particularly efficient, but string constants aren't that
1092 common in most code. TODO: Use obstacks? */
1094 delimiter = c;
1095 length = 0;
1097 for (;;)
1099 c = next_string_char (delimiter, &ret);
1100 if (ret == -1)
1101 break;
1102 if (ret == -2)
1104 gfc_current_locus = start_locus;
1105 gfc_error ("Unterminated character constant beginning at %C");
1106 return MATCH_ERROR;
1109 length++;
1112 /* Peek at the next character to see if it is a b, o, z, or x for the
1113 postfixed BOZ literal constants. */
1114 peek = gfc_peek_ascii_char ();
1115 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1116 goto no_match;
1118 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1120 gfc_current_locus = start_locus;
1122 /* We disable the warning for the following loop as the warning has already
1123 been printed in the loop above. */
1124 save_warn_ampersand = warn_ampersand;
1125 warn_ampersand = false;
1127 p = e->value.character.string;
1128 for (i = 0; i < length; i++)
1130 c = next_string_char (delimiter, &ret);
1132 if (!gfc_check_character_range (c, kind))
1134 gfc_free_expr (e);
1135 gfc_error ("Character %qs in string at %C is not representable "
1136 "in character kind %d", gfc_print_wide_char (c), kind);
1137 return MATCH_ERROR;
1140 *p++ = c;
1143 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1144 warn_ampersand = save_warn_ampersand;
1146 next_string_char (delimiter, &ret);
1147 if (ret != -1)
1148 gfc_internal_error ("match_string_constant(): Delimiter not found");
1150 if (match_substring (NULL, 0, &e->ref, false) != MATCH_NO)
1151 e->expr_type = EXPR_SUBSTRING;
1153 *result = e;
1155 return MATCH_YES;
1157 no_match:
1158 gfc_current_locus = old_locus;
1159 return MATCH_NO;
1163 /* Match a .true. or .false. Returns 1 if a .true. was found,
1164 0 if a .false. was found, and -1 otherwise. */
1165 static int
1166 match_logical_constant_string (void)
1168 locus orig_loc = gfc_current_locus;
1170 gfc_gobble_whitespace ();
1171 if (gfc_next_ascii_char () == '.')
1173 char ch = gfc_next_ascii_char ();
1174 if (ch == 'f')
1176 if (gfc_next_ascii_char () == 'a'
1177 && gfc_next_ascii_char () == 'l'
1178 && gfc_next_ascii_char () == 's'
1179 && gfc_next_ascii_char () == 'e'
1180 && gfc_next_ascii_char () == '.')
1181 /* Matched ".false.". */
1182 return 0;
1184 else if (ch == 't')
1186 if (gfc_next_ascii_char () == 'r'
1187 && gfc_next_ascii_char () == 'u'
1188 && gfc_next_ascii_char () == 'e'
1189 && gfc_next_ascii_char () == '.')
1190 /* Matched ".true.". */
1191 return 1;
1194 gfc_current_locus = orig_loc;
1195 return -1;
1198 /* Match a .true. or .false. */
1200 static match
1201 match_logical_constant (gfc_expr **result)
1203 gfc_expr *e;
1204 int i, kind, is_iso_c;
1206 i = match_logical_constant_string ();
1207 if (i == -1)
1208 return MATCH_NO;
1210 kind = get_kind (&is_iso_c);
1211 if (kind == -1)
1212 return MATCH_ERROR;
1213 if (kind == -2)
1214 kind = gfc_default_logical_kind;
1216 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1218 gfc_error ("Bad kind for logical constant at %C");
1219 return MATCH_ERROR;
1222 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1223 e->ts.is_c_interop = is_iso_c;
1225 *result = e;
1226 return MATCH_YES;
1230 /* Match a real or imaginary part of a complex constant that is a
1231 symbolic constant. */
1233 static match
1234 match_sym_complex_part (gfc_expr **result)
1236 char name[GFC_MAX_SYMBOL_LEN + 1];
1237 gfc_symbol *sym;
1238 gfc_expr *e;
1239 match m;
1241 m = gfc_match_name (name);
1242 if (m != MATCH_YES)
1243 return m;
1245 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1246 return MATCH_NO;
1248 if (sym->attr.flavor != FL_PARAMETER)
1250 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1251 return MATCH_ERROR;
1254 if (!sym->value)
1255 goto error;
1257 if (!gfc_numeric_ts (&sym->value->ts))
1259 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1260 return MATCH_ERROR;
1263 if (sym->value->rank != 0)
1265 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1266 return MATCH_ERROR;
1269 if (!gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1270 "complex constant at %C"))
1271 return MATCH_ERROR;
1273 switch (sym->value->ts.type)
1275 case BT_REAL:
1276 e = gfc_copy_expr (sym->value);
1277 break;
1279 case BT_COMPLEX:
1280 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1281 if (e == NULL)
1282 goto error;
1283 break;
1285 case BT_INTEGER:
1286 e = gfc_int2real (sym->value, gfc_default_real_kind);
1287 if (e == NULL)
1288 goto error;
1289 break;
1291 default:
1292 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1295 *result = e; /* e is a scalar, real, constant expression. */
1296 return MATCH_YES;
1298 error:
1299 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1300 return MATCH_ERROR;
1304 /* Match a real or imaginary part of a complex number. */
1306 static match
1307 match_complex_part (gfc_expr **result)
1309 match m;
1311 m = match_sym_complex_part (result);
1312 if (m != MATCH_NO)
1313 return m;
1315 m = match_real_constant (result, 1);
1316 if (m != MATCH_NO)
1317 return m;
1319 return match_integer_constant (result, 1);
1323 /* Try to match a complex constant. */
1325 static match
1326 match_complex_constant (gfc_expr **result)
1328 gfc_expr *e, *real, *imag;
1329 gfc_error_buffer old_error;
1330 gfc_typespec target;
1331 locus old_loc;
1332 int kind;
1333 match m;
1335 old_loc = gfc_current_locus;
1336 real = imag = e = NULL;
1338 m = gfc_match_char ('(');
1339 if (m != MATCH_YES)
1340 return m;
1342 gfc_push_error (&old_error);
1344 m = match_complex_part (&real);
1345 if (m == MATCH_NO)
1347 gfc_free_error (&old_error);
1348 goto cleanup;
1351 if (gfc_match_char (',') == MATCH_NO)
1353 /* It is possible that gfc_int2real issued a warning when
1354 converting an integer to real. Throw this away here. */
1356 gfc_clear_warning ();
1357 gfc_pop_error (&old_error);
1358 m = MATCH_NO;
1359 goto cleanup;
1362 /* If m is error, then something was wrong with the real part and we
1363 assume we have a complex constant because we've seen the ','. An
1364 ambiguous case here is the start of an iterator list of some
1365 sort. These sort of lists are matched prior to coming here. */
1367 if (m == MATCH_ERROR)
1369 gfc_free_error (&old_error);
1370 goto cleanup;
1372 gfc_pop_error (&old_error);
1374 m = match_complex_part (&imag);
1375 if (m == MATCH_NO)
1376 goto syntax;
1377 if (m == MATCH_ERROR)
1378 goto cleanup;
1380 m = gfc_match_char (')');
1381 if (m == MATCH_NO)
1383 /* Give the matcher for implied do-loops a chance to run. This
1384 yields a much saner error message for (/ (i, 4=i, 6) /). */
1385 if (gfc_peek_ascii_char () == '=')
1387 m = MATCH_ERROR;
1388 goto cleanup;
1390 else
1391 goto syntax;
1394 if (m == MATCH_ERROR)
1395 goto cleanup;
1397 /* Decide on the kind of this complex number. */
1398 if (real->ts.type == BT_REAL)
1400 if (imag->ts.type == BT_REAL)
1401 kind = gfc_kind_max (real, imag);
1402 else
1403 kind = real->ts.kind;
1405 else
1407 if (imag->ts.type == BT_REAL)
1408 kind = imag->ts.kind;
1409 else
1410 kind = gfc_default_real_kind;
1412 gfc_clear_ts (&target);
1413 target.type = BT_REAL;
1414 target.kind = kind;
1416 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1417 gfc_convert_type (real, &target, 2);
1418 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1419 gfc_convert_type (imag, &target, 2);
1421 e = gfc_convert_complex (real, imag, kind);
1422 e->where = gfc_current_locus;
1424 gfc_free_expr (real);
1425 gfc_free_expr (imag);
1427 *result = e;
1428 return MATCH_YES;
1430 syntax:
1431 gfc_error ("Syntax error in COMPLEX constant at %C");
1432 m = MATCH_ERROR;
1434 cleanup:
1435 gfc_free_expr (e);
1436 gfc_free_expr (real);
1437 gfc_free_expr (imag);
1438 gfc_current_locus = old_loc;
1440 return m;
1444 /* Match constants in any of several forms. Returns nonzero for a
1445 match, zero for no match. */
1447 match
1448 gfc_match_literal_constant (gfc_expr **result, int signflag)
1450 match m;
1452 m = match_complex_constant (result);
1453 if (m != MATCH_NO)
1454 return m;
1456 m = match_string_constant (result);
1457 if (m != MATCH_NO)
1458 return m;
1460 m = match_boz_constant (result);
1461 if (m != MATCH_NO)
1462 return m;
1464 m = match_real_constant (result, signflag);
1465 if (m != MATCH_NO)
1466 return m;
1468 m = match_hollerith_constant (result);
1469 if (m != MATCH_NO)
1470 return m;
1472 m = match_integer_constant (result, signflag);
1473 if (m != MATCH_NO)
1474 return m;
1476 m = match_logical_constant (result);
1477 if (m != MATCH_NO)
1478 return m;
1480 return MATCH_NO;
1484 /* This checks if a symbol is the return value of an encompassing function.
1485 Function nesting can be maximally two levels deep, but we may have
1486 additional local namespaces like BLOCK etc. */
1488 bool
1489 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1491 if (!sym->attr.function || (sym->result != sym))
1492 return false;
1493 while (ns)
1495 if (ns->proc_name == sym)
1496 return true;
1497 ns = ns->parent;
1499 return false;
1503 /* Match a single actual argument value. An actual argument is
1504 usually an expression, but can also be a procedure name. If the
1505 argument is a single name, it is not always possible to tell
1506 whether the name is a dummy procedure or not. We treat these cases
1507 by creating an argument that looks like a dummy procedure and
1508 fixing things later during resolution. */
1510 static match
1511 match_actual_arg (gfc_expr **result)
1513 char name[GFC_MAX_SYMBOL_LEN + 1];
1514 gfc_symtree *symtree;
1515 locus where, w;
1516 gfc_expr *e;
1517 char c;
1519 gfc_gobble_whitespace ();
1520 where = gfc_current_locus;
1522 switch (gfc_match_name (name))
1524 case MATCH_ERROR:
1525 return MATCH_ERROR;
1527 case MATCH_NO:
1528 break;
1530 case MATCH_YES:
1531 w = gfc_current_locus;
1532 gfc_gobble_whitespace ();
1533 c = gfc_next_ascii_char ();
1534 gfc_current_locus = w;
1536 if (c != ',' && c != ')')
1537 break;
1539 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1540 break;
1541 /* Handle error elsewhere. */
1543 /* Eliminate a couple of common cases where we know we don't
1544 have a function argument. */
1545 if (symtree == NULL)
1547 gfc_get_sym_tree (name, NULL, &symtree, false);
1548 gfc_set_sym_referenced (symtree->n.sym);
1550 else
1552 gfc_symbol *sym;
1554 sym = symtree->n.sym;
1555 gfc_set_sym_referenced (sym);
1556 if (sym->attr.flavor == FL_NAMELIST)
1558 gfc_error ("Namelist %qs can not be an argument at %L",
1559 sym->name, &where);
1560 break;
1562 if (sym->attr.flavor != FL_PROCEDURE
1563 && sym->attr.flavor != FL_UNKNOWN)
1564 break;
1566 if (sym->attr.in_common && !sym->attr.proc_pointer)
1568 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE,
1569 sym->name, &sym->declared_at))
1570 return MATCH_ERROR;
1571 break;
1574 /* If the symbol is a function with itself as the result and
1575 is being defined, then we have a variable. */
1576 if (sym->attr.function && sym->result == sym)
1578 if (gfc_is_function_return_value (sym, gfc_current_ns))
1579 break;
1581 if (sym->attr.entry
1582 && (sym->ns == gfc_current_ns
1583 || sym->ns == gfc_current_ns->parent))
1585 gfc_entry_list *el = NULL;
1587 for (el = sym->ns->entries; el; el = el->next)
1588 if (sym == el->sym)
1589 break;
1591 if (el)
1592 break;
1597 e = gfc_get_expr (); /* Leave it unknown for now */
1598 e->symtree = symtree;
1599 e->expr_type = EXPR_VARIABLE;
1600 e->ts.type = BT_PROCEDURE;
1601 e->where = where;
1603 *result = e;
1604 return MATCH_YES;
1607 gfc_current_locus = where;
1608 return gfc_match_expr (result);
1612 /* Match a keyword argument or type parameter spec list.. */
1614 static match
1615 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base, bool pdt)
1617 char name[GFC_MAX_SYMBOL_LEN + 1];
1618 gfc_actual_arglist *a;
1619 locus name_locus;
1620 match m;
1622 name_locus = gfc_current_locus;
1623 m = gfc_match_name (name);
1625 if (m != MATCH_YES)
1626 goto cleanup;
1627 if (gfc_match_char ('=') != MATCH_YES)
1629 m = MATCH_NO;
1630 goto cleanup;
1633 if (pdt)
1635 if (gfc_match_char ('*') == MATCH_YES)
1637 actual->spec_type = SPEC_ASSUMED;
1638 goto add_name;
1640 else if (gfc_match_char (':') == MATCH_YES)
1642 actual->spec_type = SPEC_DEFERRED;
1643 goto add_name;
1645 else
1646 actual->spec_type = SPEC_EXPLICIT;
1649 m = match_actual_arg (&actual->expr);
1650 if (m != MATCH_YES)
1651 goto cleanup;
1653 /* Make sure this name has not appeared yet. */
1654 add_name:
1655 if (name[0] != '\0')
1657 for (a = base; a; a = a->next)
1658 if (a->name != NULL && strcmp (a->name, name) == 0)
1660 gfc_error ("Keyword %qs at %C has already appeared in the "
1661 "current argument list", name);
1662 return MATCH_ERROR;
1666 actual->name = gfc_get_string ("%s", name);
1667 return MATCH_YES;
1669 cleanup:
1670 gfc_current_locus = name_locus;
1671 return m;
1675 /* Match an argument list function, such as %VAL. */
1677 static match
1678 match_arg_list_function (gfc_actual_arglist *result)
1680 char name[GFC_MAX_SYMBOL_LEN + 1];
1681 locus old_locus;
1682 match m;
1684 old_locus = gfc_current_locus;
1686 if (gfc_match_char ('%') != MATCH_YES)
1688 m = MATCH_NO;
1689 goto cleanup;
1692 m = gfc_match ("%n (", name);
1693 if (m != MATCH_YES)
1694 goto cleanup;
1696 if (name[0] != '\0')
1698 switch (name[0])
1700 case 'l':
1701 if (strncmp (name, "loc", 3) == 0)
1703 result->name = "%LOC";
1704 break;
1706 /* FALLTHRU */
1707 case 'r':
1708 if (strncmp (name, "ref", 3) == 0)
1710 result->name = "%REF";
1711 break;
1713 /* FALLTHRU */
1714 case 'v':
1715 if (strncmp (name, "val", 3) == 0)
1717 result->name = "%VAL";
1718 break;
1720 /* FALLTHRU */
1721 default:
1722 m = MATCH_ERROR;
1723 goto cleanup;
1727 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C"))
1729 m = MATCH_ERROR;
1730 goto cleanup;
1733 m = match_actual_arg (&result->expr);
1734 if (m != MATCH_YES)
1735 goto cleanup;
1737 if (gfc_match_char (')') != MATCH_YES)
1739 m = MATCH_NO;
1740 goto cleanup;
1743 return MATCH_YES;
1745 cleanup:
1746 gfc_current_locus = old_locus;
1747 return m;
1751 /* Matches an actual argument list of a function or subroutine, from
1752 the opening parenthesis to the closing parenthesis. The argument
1753 list is assumed to allow keyword arguments because we don't know if
1754 the symbol associated with the procedure has an implicit interface
1755 or not. We make sure keywords are unique. If sub_flag is set,
1756 we're matching the argument list of a subroutine.
1758 NOTE: An alternative use for this function is to match type parameter
1759 spec lists, which are so similar to actual argument lists that the
1760 machinery can be reused. This use is flagged by the optional argument
1761 'pdt'. */
1763 match
1764 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp, bool pdt)
1766 gfc_actual_arglist *head, *tail;
1767 int seen_keyword;
1768 gfc_st_label *label;
1769 locus old_loc;
1770 match m;
1772 *argp = tail = NULL;
1773 old_loc = gfc_current_locus;
1775 seen_keyword = 0;
1777 if (gfc_match_char ('(') == MATCH_NO)
1778 return (sub_flag) ? MATCH_YES : MATCH_NO;
1780 if (gfc_match_char (')') == MATCH_YES)
1781 return MATCH_YES;
1783 head = NULL;
1785 matching_actual_arglist++;
1787 for (;;)
1789 if (head == NULL)
1790 head = tail = gfc_get_actual_arglist ();
1791 else
1793 tail->next = gfc_get_actual_arglist ();
1794 tail = tail->next;
1797 if (sub_flag && !pdt && gfc_match_char ('*') == MATCH_YES)
1799 m = gfc_match_st_label (&label);
1800 if (m == MATCH_NO)
1801 gfc_error ("Expected alternate return label at %C");
1802 if (m != MATCH_YES)
1803 goto cleanup;
1805 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1806 "at %C"))
1807 goto cleanup;
1809 tail->label = label;
1810 goto next;
1813 if (pdt && !seen_keyword)
1815 if (gfc_match_char (':') == MATCH_YES)
1817 tail->spec_type = SPEC_DEFERRED;
1818 goto next;
1820 else if (gfc_match_char ('*') == MATCH_YES)
1822 tail->spec_type = SPEC_ASSUMED;
1823 goto next;
1825 else
1826 tail->spec_type = SPEC_EXPLICIT;
1828 m = match_keyword_arg (tail, head, pdt);
1829 if (m == MATCH_YES)
1831 seen_keyword = 1;
1832 goto next;
1834 if (m == MATCH_ERROR)
1835 goto cleanup;
1838 /* After the first keyword argument is seen, the following
1839 arguments must also have keywords. */
1840 if (seen_keyword)
1842 m = match_keyword_arg (tail, head, pdt);
1844 if (m == MATCH_ERROR)
1845 goto cleanup;
1846 if (m == MATCH_NO)
1848 gfc_error ("Missing keyword name in actual argument list at %C");
1849 goto cleanup;
1853 else
1855 /* Try an argument list function, like %VAL. */
1856 m = match_arg_list_function (tail);
1857 if (m == MATCH_ERROR)
1858 goto cleanup;
1860 /* See if we have the first keyword argument. */
1861 if (m == MATCH_NO)
1863 m = match_keyword_arg (tail, head, false);
1864 if (m == MATCH_YES)
1865 seen_keyword = 1;
1866 if (m == MATCH_ERROR)
1867 goto cleanup;
1870 if (m == MATCH_NO)
1872 /* Try for a non-keyword argument. */
1873 m = match_actual_arg (&tail->expr);
1874 if (m == MATCH_ERROR)
1875 goto cleanup;
1876 if (m == MATCH_NO)
1877 goto syntax;
1882 next:
1883 if (gfc_match_char (')') == MATCH_YES)
1884 break;
1885 if (gfc_match_char (',') != MATCH_YES)
1886 goto syntax;
1889 *argp = head;
1890 matching_actual_arglist--;
1891 return MATCH_YES;
1893 syntax:
1894 gfc_error ("Syntax error in argument list at %C");
1896 cleanup:
1897 gfc_free_actual_arglist (head);
1898 gfc_current_locus = old_loc;
1899 matching_actual_arglist--;
1900 return MATCH_ERROR;
1904 /* Used by gfc_match_varspec() to extend the reference list by one
1905 element. */
1907 static gfc_ref *
1908 extend_ref (gfc_expr *primary, gfc_ref *tail)
1910 if (primary->ref == NULL)
1911 primary->ref = tail = gfc_get_ref ();
1912 else
1914 if (tail == NULL)
1915 gfc_internal_error ("extend_ref(): Bad tail");
1916 tail->next = gfc_get_ref ();
1917 tail = tail->next;
1920 return tail;
1924 /* Match any additional specifications associated with the current
1925 variable like member references or substrings. If equiv_flag is
1926 set we only match stuff that is allowed inside an EQUIVALENCE
1927 statement. sub_flag tells whether we expect a type-bound procedure found
1928 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1929 components, 'ppc_arg' determines whether the PPC may be called (with an
1930 argument list), or whether it may just be referred to as a pointer. */
1932 match
1933 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1934 bool ppc_arg)
1936 char name[GFC_MAX_SYMBOL_LEN + 1];
1937 gfc_ref *substring, *tail, *tmp;
1938 gfc_component *component;
1939 gfc_symbol *sym = primary->symtree->n.sym;
1940 gfc_expr *tgt_expr = NULL;
1941 match m;
1942 bool unknown;
1943 char sep;
1945 tail = NULL;
1947 gfc_gobble_whitespace ();
1949 if (gfc_peek_ascii_char () == '[')
1951 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1952 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1953 && CLASS_DATA (sym)->attr.dimension))
1955 gfc_error ("Array section designator, e.g. '(:)', is required "
1956 "besides the coarray designator '[...]' at %C");
1957 return MATCH_ERROR;
1959 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1960 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1961 && !CLASS_DATA (sym)->attr.codimension))
1963 gfc_error ("Coarray designator at %C but %qs is not a coarray",
1964 sym->name);
1965 return MATCH_ERROR;
1969 if (sym->assoc && sym->assoc->target)
1970 tgt_expr = sym->assoc->target;
1972 /* For associate names, we may not yet know whether they are arrays or not.
1973 If the selector expression is unambiguously an array; eg. a full array
1974 or an array section, then the associate name must be an array and we can
1975 fix it now. Otherwise, if parentheses follow and it is not a character
1976 type, we have to assume that it actually is one for now. The final
1977 decision will be made at resolution, of course. */
1978 if (sym->assoc
1979 && gfc_peek_ascii_char () == '('
1980 && sym->ts.type != BT_CLASS
1981 && !sym->attr.dimension)
1983 gfc_ref *ref = NULL;
1985 if (!sym->assoc->dangling && tgt_expr)
1987 if (tgt_expr->expr_type == EXPR_VARIABLE)
1988 gfc_resolve_expr (tgt_expr);
1990 ref = tgt_expr->ref;
1991 for (; ref; ref = ref->next)
1992 if (ref->type == REF_ARRAY
1993 && (ref->u.ar.type == AR_FULL
1994 || ref->u.ar.type == AR_SECTION))
1995 break;
1998 if (ref || (!(sym->assoc->dangling || sym->ts.type == BT_CHARACTER)
1999 && sym->assoc->st
2000 && sym->assoc->st->n.sym
2001 && sym->assoc->st->n.sym->attr.dimension == 0))
2003 sym->attr.dimension = 1;
2004 if (sym->as == NULL
2005 && sym->assoc->st
2006 && sym->assoc->st->n.sym
2007 && sym->assoc->st->n.sym->as)
2008 sym->as = gfc_copy_array_spec (sym->assoc->st->n.sym->as);
2011 else if (sym->ts.type == BT_CLASS
2012 && tgt_expr
2013 && tgt_expr->expr_type == EXPR_VARIABLE
2014 && sym->ts.u.derived != tgt_expr->ts.u.derived)
2016 gfc_resolve_expr (tgt_expr);
2017 if (tgt_expr->rank)
2018 sym->ts.u.derived = tgt_expr->ts.u.derived;
2021 if ((equiv_flag && gfc_peek_ascii_char () == '(')
2022 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
2023 || (sym->attr.dimension && sym->ts.type != BT_CLASS
2024 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
2025 && !(gfc_matching_procptr_assignment
2026 && sym->attr.flavor == FL_PROCEDURE))
2027 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2028 && (CLASS_DATA (sym)->attr.dimension
2029 || CLASS_DATA (sym)->attr.codimension)))
2031 gfc_array_spec *as;
2033 tail = extend_ref (primary, tail);
2034 tail->type = REF_ARRAY;
2036 /* In EQUIVALENCE, we don't know yet whether we are seeing
2037 an array, character variable or array of character
2038 variables. We'll leave the decision till resolve time. */
2040 if (equiv_flag)
2041 as = NULL;
2042 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
2043 as = CLASS_DATA (sym)->as;
2044 else
2045 as = sym->as;
2047 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
2048 as ? as->corank : 0);
2049 if (m != MATCH_YES)
2050 return m;
2052 gfc_gobble_whitespace ();
2053 if (equiv_flag && gfc_peek_ascii_char () == '(')
2055 tail = extend_ref (primary, tail);
2056 tail->type = REF_ARRAY;
2058 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
2059 if (m != MATCH_YES)
2060 return m;
2064 primary->ts = sym->ts;
2066 if (equiv_flag)
2067 return MATCH_YES;
2069 /* With DEC extensions, member separator may be '.' or '%'. */
2070 sep = gfc_peek_ascii_char ();
2071 m = gfc_match_member_sep (sym);
2072 if (m == MATCH_ERROR)
2073 return MATCH_ERROR;
2075 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES
2076 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2077 gfc_set_default_type (sym, 0, sym->ns);
2079 /* See if there is a usable typespec in the "no IMPLICIT type" error. */
2080 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES)
2082 bool permissible;
2084 /* These target expressions can ge resolved at any time. */
2085 permissible = tgt_expr && tgt_expr->symtree && tgt_expr->symtree->n.sym
2086 && (tgt_expr->symtree->n.sym->attr.use_assoc
2087 || tgt_expr->symtree->n.sym->attr.host_assoc
2088 || tgt_expr->symtree->n.sym->attr.if_source
2089 == IFSRC_DECL);
2090 permissible = permissible
2091 || (tgt_expr && tgt_expr->expr_type == EXPR_OP);
2093 if (permissible)
2095 gfc_resolve_expr (tgt_expr);
2096 sym->ts = tgt_expr->ts;
2099 if (sym->ts.type == BT_UNKNOWN)
2101 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name);
2102 return MATCH_ERROR;
2105 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2106 && m == MATCH_YES)
2108 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C",
2109 sep, sym->name);
2110 return MATCH_ERROR;
2113 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2114 || m != MATCH_YES)
2115 goto check_substring;
2117 sym = sym->ts.u.derived;
2119 for (;;)
2121 bool t;
2122 gfc_symtree *tbp;
2124 m = gfc_match_name (name);
2125 if (m == MATCH_NO)
2126 gfc_error ("Expected structure component name at %C");
2127 if (m != MATCH_YES)
2128 return MATCH_ERROR;
2130 if (sym && sym->f2k_derived)
2131 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
2132 else
2133 tbp = NULL;
2135 if (tbp)
2137 gfc_symbol* tbp_sym;
2139 if (!t)
2140 return MATCH_ERROR;
2142 gcc_assert (!tail || !tail->next);
2144 if (!(primary->expr_type == EXPR_VARIABLE
2145 || (primary->expr_type == EXPR_STRUCTURE
2146 && primary->symtree && primary->symtree->n.sym
2147 && primary->symtree->n.sym->attr.flavor)))
2148 return MATCH_ERROR;
2150 if (tbp->n.tb->is_generic)
2151 tbp_sym = NULL;
2152 else
2153 tbp_sym = tbp->n.tb->u.specific->n.sym;
2155 primary->expr_type = EXPR_COMPCALL;
2156 primary->value.compcall.tbp = tbp->n.tb;
2157 primary->value.compcall.name = tbp->name;
2158 primary->value.compcall.ignore_pass = 0;
2159 primary->value.compcall.assign = 0;
2160 primary->value.compcall.base_object = NULL;
2161 gcc_assert (primary->symtree->n.sym->attr.referenced);
2162 if (tbp_sym)
2163 primary->ts = tbp_sym->ts;
2164 else
2165 gfc_clear_ts (&primary->ts);
2167 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
2168 &primary->value.compcall.actual);
2169 if (m == MATCH_ERROR)
2170 return MATCH_ERROR;
2171 if (m == MATCH_NO)
2173 if (sub_flag)
2174 primary->value.compcall.actual = NULL;
2175 else
2177 gfc_error ("Expected argument list at %C");
2178 return MATCH_ERROR;
2182 break;
2185 component = gfc_find_component (sym, name, false, false, &tmp);
2186 if (component == NULL)
2187 return MATCH_ERROR;
2189 /* Extend the reference chain determined by gfc_find_component. */
2190 if (primary->ref == NULL)
2191 primary->ref = tmp;
2192 else
2194 /* Set by the for loop below for the last component ref. */
2195 gcc_assert (tail != NULL);
2196 tail->next = tmp;
2199 /* The reference chain may be longer than one hop for union
2200 subcomponents; find the new tail. */
2201 for (tail = tmp; tail->next; tail = tail->next)
2204 primary->ts = component->ts;
2206 if (component->attr.proc_pointer && ppc_arg)
2208 /* Procedure pointer component call: Look for argument list. */
2209 m = gfc_match_actual_arglist (sub_flag,
2210 &primary->value.compcall.actual);
2211 if (m == MATCH_ERROR)
2212 return MATCH_ERROR;
2214 if (m == MATCH_NO && !gfc_matching_ptr_assignment
2215 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
2217 gfc_error ("Procedure pointer component %qs requires an "
2218 "argument list at %C", component->name);
2219 return MATCH_ERROR;
2222 if (m == MATCH_YES)
2223 primary->expr_type = EXPR_PPC;
2225 break;
2228 if (component->as != NULL && !component->attr.proc_pointer)
2230 tail = extend_ref (primary, tail);
2231 tail->type = REF_ARRAY;
2233 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2234 component->as->corank);
2235 if (m != MATCH_YES)
2236 return m;
2238 else if (component->ts.type == BT_CLASS && component->attr.class_ok
2239 && CLASS_DATA (component)->as && !component->attr.proc_pointer)
2241 tail = extend_ref (primary, tail);
2242 tail->type = REF_ARRAY;
2244 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2245 equiv_flag,
2246 CLASS_DATA (component)->as->corank);
2247 if (m != MATCH_YES)
2248 return m;
2251 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2252 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES)
2253 break;
2255 sym = component->ts.u.derived;
2258 check_substring:
2259 unknown = false;
2260 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor))
2262 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2264 gfc_set_default_type (sym, 0, sym->ns);
2265 primary->ts = sym->ts;
2266 unknown = true;
2270 if (primary->ts.type == BT_CHARACTER)
2272 bool def = primary->ts.deferred == 1;
2273 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def))
2275 case MATCH_YES:
2276 if (tail == NULL)
2277 primary->ref = substring;
2278 else
2279 tail->next = substring;
2281 if (primary->expr_type == EXPR_CONSTANT)
2282 primary->expr_type = EXPR_SUBSTRING;
2284 if (substring)
2285 primary->ts.u.cl = NULL;
2287 break;
2289 case MATCH_NO:
2290 if (unknown)
2292 gfc_clear_ts (&primary->ts);
2293 gfc_clear_ts (&sym->ts);
2295 break;
2297 case MATCH_ERROR:
2298 return MATCH_ERROR;
2302 /* F08:C611. */
2303 if (primary->ts.type == BT_DERIVED && primary->ref
2304 && primary->ts.u.derived && primary->ts.u.derived->attr.abstract)
2306 gfc_error ("Nonpolymorphic reference to abstract type at %C");
2307 return MATCH_ERROR;
2310 /* F08:C727. */
2311 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2313 gfc_error ("Coindexed procedure-pointer component at %C");
2314 return MATCH_ERROR;
2317 return MATCH_YES;
2321 /* Given an expression that is a variable, figure out what the
2322 ultimate variable's type and attribute is, traversing the reference
2323 structures if necessary.
2325 This subroutine is trickier than it looks. We start at the base
2326 symbol and store the attribute. Component references load a
2327 completely new attribute.
2329 A couple of rules come into play. Subobjects of targets are always
2330 targets themselves. If we see a component that goes through a
2331 pointer, then the expression must also be a target, since the
2332 pointer is associated with something (if it isn't core will soon be
2333 dumped). If we see a full part or section of an array, the
2334 expression is also an array.
2336 We can have at most one full array reference. */
2338 symbol_attribute
2339 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2341 int dimension, codimension, pointer, allocatable, target;
2342 symbol_attribute attr;
2343 gfc_ref *ref;
2344 gfc_symbol *sym;
2345 gfc_component *comp;
2347 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2348 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2350 sym = expr->symtree->n.sym;
2351 attr = sym->attr;
2353 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2355 dimension = CLASS_DATA (sym)->attr.dimension;
2356 codimension = CLASS_DATA (sym)->attr.codimension;
2357 pointer = CLASS_DATA (sym)->attr.class_pointer;
2358 allocatable = CLASS_DATA (sym)->attr.allocatable;
2360 else
2362 dimension = attr.dimension;
2363 codimension = attr.codimension;
2364 pointer = attr.pointer;
2365 allocatable = attr.allocatable;
2368 target = attr.target;
2369 if (pointer || attr.proc_pointer)
2370 target = 1;
2372 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2373 *ts = sym->ts;
2375 for (ref = expr->ref; ref; ref = ref->next)
2376 switch (ref->type)
2378 case REF_ARRAY:
2380 switch (ref->u.ar.type)
2382 case AR_FULL:
2383 dimension = 1;
2384 break;
2386 case AR_SECTION:
2387 allocatable = pointer = 0;
2388 dimension = 1;
2389 break;
2391 case AR_ELEMENT:
2392 /* Handle coarrays. */
2393 if (ref->u.ar.dimen > 0)
2394 allocatable = pointer = 0;
2395 break;
2397 case AR_UNKNOWN:
2398 /* If any of start, end or stride is not integer, there will
2399 already have been an error issued. */
2400 int errors;
2401 gfc_get_errors (NULL, &errors);
2402 if (errors == 0)
2403 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2406 break;
2408 case REF_COMPONENT:
2409 comp = ref->u.c.component;
2410 attr = comp->attr;
2411 if (ts != NULL)
2413 *ts = comp->ts;
2414 /* Don't set the string length if a substring reference
2415 follows. */
2416 if (ts->type == BT_CHARACTER
2417 && ref->next && ref->next->type == REF_SUBSTRING)
2418 ts->u.cl = NULL;
2421 if (comp->ts.type == BT_CLASS)
2423 codimension = CLASS_DATA (comp)->attr.codimension;
2424 pointer = CLASS_DATA (comp)->attr.class_pointer;
2425 allocatable = CLASS_DATA (comp)->attr.allocatable;
2427 else
2429 codimension = comp->attr.codimension;
2430 pointer = comp->attr.pointer;
2431 allocatable = comp->attr.allocatable;
2433 if (pointer || attr.proc_pointer)
2434 target = 1;
2436 break;
2438 case REF_SUBSTRING:
2439 allocatable = pointer = 0;
2440 break;
2443 attr.dimension = dimension;
2444 attr.codimension = codimension;
2445 attr.pointer = pointer;
2446 attr.allocatable = allocatable;
2447 attr.target = target;
2448 attr.save = sym->attr.save;
2450 return attr;
2454 /* Return the attribute from a general expression. */
2456 symbol_attribute
2457 gfc_expr_attr (gfc_expr *e)
2459 symbol_attribute attr;
2461 switch (e->expr_type)
2463 case EXPR_VARIABLE:
2464 attr = gfc_variable_attr (e, NULL);
2465 break;
2467 case EXPR_FUNCTION:
2468 gfc_clear_attr (&attr);
2470 if (e->value.function.esym && e->value.function.esym->result)
2472 gfc_symbol *sym = e->value.function.esym->result;
2473 attr = sym->attr;
2474 if (sym->ts.type == BT_CLASS)
2476 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2477 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2478 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2481 else if (e->value.function.isym
2482 && e->value.function.isym->transformational
2483 && e->ts.type == BT_CLASS)
2484 attr = CLASS_DATA (e)->attr;
2485 else
2486 attr = gfc_variable_attr (e, NULL);
2488 /* TODO: NULL() returns pointers. May have to take care of this
2489 here. */
2491 break;
2493 default:
2494 gfc_clear_attr (&attr);
2495 break;
2498 return attr;
2502 /* Given an expression, figure out what the ultimate expression
2503 attribute is. This routine is similar to gfc_variable_attr with
2504 parts of gfc_expr_attr, but focuses more on the needs of
2505 coarrays. For coarrays a codimension attribute is kind of
2506 "infectious" being propagated once set and never cleared.
2507 The coarray_comp is only set, when the expression refs a coarray
2508 component. REFS_COMP is set when present to true only, when this EXPR
2509 refs a (non-_data) component. To check whether EXPR refs an allocatable
2510 component in a derived type coarray *refs_comp needs to be set and
2511 coarray_comp has to false. */
2513 static symbol_attribute
2514 caf_variable_attr (gfc_expr *expr, bool in_allocate, bool *refs_comp)
2516 int dimension, codimension, pointer, allocatable, target, coarray_comp;
2517 symbol_attribute attr;
2518 gfc_ref *ref;
2519 gfc_symbol *sym;
2520 gfc_component *comp;
2522 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2523 gfc_internal_error ("gfc_caf_attr(): Expression isn't a variable");
2525 sym = expr->symtree->n.sym;
2526 gfc_clear_attr (&attr);
2528 if (refs_comp)
2529 *refs_comp = false;
2531 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2533 dimension = CLASS_DATA (sym)->attr.dimension;
2534 codimension = CLASS_DATA (sym)->attr.codimension;
2535 pointer = CLASS_DATA (sym)->attr.class_pointer;
2536 allocatable = CLASS_DATA (sym)->attr.allocatable;
2537 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2538 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp;
2540 else
2542 dimension = sym->attr.dimension;
2543 codimension = sym->attr.codimension;
2544 pointer = sym->attr.pointer;
2545 allocatable = sym->attr.allocatable;
2546 attr.alloc_comp = sym->ts.type == BT_DERIVED
2547 ? sym->ts.u.derived->attr.alloc_comp : 0;
2548 attr.pointer_comp = sym->ts.type == BT_DERIVED
2549 ? sym->ts.u.derived->attr.pointer_comp : 0;
2552 target = coarray_comp = 0;
2553 if (pointer || attr.proc_pointer)
2554 target = 1;
2556 for (ref = expr->ref; ref; ref = ref->next)
2557 switch (ref->type)
2559 case REF_ARRAY:
2561 switch (ref->u.ar.type)
2563 case AR_FULL:
2564 case AR_SECTION:
2565 dimension = 1;
2566 break;
2568 case AR_ELEMENT:
2569 /* Handle coarrays. */
2570 if (ref->u.ar.dimen > 0 && !in_allocate)
2571 allocatable = pointer = 0;
2572 break;
2574 case AR_UNKNOWN:
2575 /* If any of start, end or stride is not integer, there will
2576 already have been an error issued. */
2577 int errors;
2578 gfc_get_errors (NULL, &errors);
2579 if (errors == 0)
2580 gfc_internal_error ("gfc_caf_attr(): Bad array reference");
2583 break;
2585 case REF_COMPONENT:
2586 comp = ref->u.c.component;
2588 if (comp->ts.type == BT_CLASS)
2590 /* Set coarray_comp only, when this component introduces the
2591 coarray. */
2592 coarray_comp = !codimension && CLASS_DATA (comp)->attr.codimension;
2593 codimension |= CLASS_DATA (comp)->attr.codimension;
2594 pointer = CLASS_DATA (comp)->attr.class_pointer;
2595 allocatable = CLASS_DATA (comp)->attr.allocatable;
2597 else
2599 /* Set coarray_comp only, when this component introduces the
2600 coarray. */
2601 coarray_comp = !codimension && comp->attr.codimension;
2602 codimension |= comp->attr.codimension;
2603 pointer = comp->attr.pointer;
2604 allocatable = comp->attr.allocatable;
2607 if (refs_comp && strcmp (comp->name, "_data") != 0
2608 && (ref->next == NULL
2609 || (ref->next->type == REF_ARRAY && ref->next->next == NULL)))
2610 *refs_comp = true;
2612 if (pointer || attr.proc_pointer)
2613 target = 1;
2615 break;
2617 case REF_SUBSTRING:
2618 allocatable = pointer = 0;
2619 break;
2622 attr.dimension = dimension;
2623 attr.codimension = codimension;
2624 attr.pointer = pointer;
2625 attr.allocatable = allocatable;
2626 attr.target = target;
2627 attr.save = sym->attr.save;
2628 attr.coarray_comp = coarray_comp;
2630 return attr;
2634 symbol_attribute
2635 gfc_caf_attr (gfc_expr *e, bool in_allocate, bool *refs_comp)
2637 symbol_attribute attr;
2639 switch (e->expr_type)
2641 case EXPR_VARIABLE:
2642 attr = caf_variable_attr (e, in_allocate, refs_comp);
2643 break;
2645 case EXPR_FUNCTION:
2646 gfc_clear_attr (&attr);
2648 if (e->value.function.esym && e->value.function.esym->result)
2650 gfc_symbol *sym = e->value.function.esym->result;
2651 attr = sym->attr;
2652 if (sym->ts.type == BT_CLASS)
2654 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2655 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2656 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2657 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2658 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived
2659 ->attr.pointer_comp;
2662 else if (e->symtree)
2663 attr = caf_variable_attr (e, in_allocate, refs_comp);
2664 else
2665 gfc_clear_attr (&attr);
2666 break;
2668 default:
2669 gfc_clear_attr (&attr);
2670 break;
2673 return attr;
2677 /* Match a structure constructor. The initial symbol has already been
2678 seen. */
2680 typedef struct gfc_structure_ctor_component
2682 char* name;
2683 gfc_expr* val;
2684 locus where;
2685 struct gfc_structure_ctor_component* next;
2687 gfc_structure_ctor_component;
2689 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2691 static void
2692 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2694 free (comp->name);
2695 gfc_free_expr (comp->val);
2696 free (comp);
2700 /* Translate the component list into the actual constructor by sorting it in
2701 the order required; this also checks along the way that each and every
2702 component actually has an initializer and handles default initializers
2703 for components without explicit value given. */
2704 static bool
2705 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2706 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2708 gfc_structure_ctor_component *comp_iter;
2709 gfc_component *comp;
2711 for (comp = sym->components; comp; comp = comp->next)
2713 gfc_structure_ctor_component **next_ptr;
2714 gfc_expr *value = NULL;
2716 /* Try to find the initializer for the current component by name. */
2717 next_ptr = comp_head;
2718 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2720 if (!strcmp (comp_iter->name, comp->name))
2721 break;
2722 next_ptr = &comp_iter->next;
2725 /* If an extension, try building the parent derived type by building
2726 a value expression for the parent derived type and calling self. */
2727 if (!comp_iter && comp == sym->components && sym->attr.extension)
2729 value = gfc_get_structure_constructor_expr (comp->ts.type,
2730 comp->ts.kind,
2731 &gfc_current_locus);
2732 value->ts = comp->ts;
2734 if (!build_actual_constructor (comp_head,
2735 &value->value.constructor,
2736 comp->ts.u.derived))
2738 gfc_free_expr (value);
2739 return false;
2742 gfc_constructor_append_expr (ctor_head, value, NULL);
2743 continue;
2746 /* If it was not found, try the default initializer if there's any;
2747 otherwise, it's an error unless this is a deferred parameter. */
2748 if (!comp_iter)
2750 if (comp->initializer)
2752 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor "
2753 "with missing optional arguments at %C"))
2754 return false;
2755 value = gfc_copy_expr (comp->initializer);
2757 else if (comp->attr.allocatable
2758 || (comp->ts.type == BT_CLASS
2759 && CLASS_DATA (comp)->attr.allocatable))
2761 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for "
2762 "allocatable component %qs given in the "
2763 "structure constructor at %C", comp->name))
2764 return false;
2766 else if (!comp->attr.artificial)
2768 gfc_error ("No initializer for component %qs given in the"
2769 " structure constructor at %C", comp->name);
2770 return false;
2773 else
2774 value = comp_iter->val;
2776 /* Add the value to the constructor chain built. */
2777 gfc_constructor_append_expr (ctor_head, value, NULL);
2779 /* Remove the entry from the component list. We don't want the expression
2780 value to be free'd, so set it to NULL. */
2781 if (comp_iter)
2783 *next_ptr = comp_iter->next;
2784 comp_iter->val = NULL;
2785 gfc_free_structure_ctor_component (comp_iter);
2788 return true;
2792 bool
2793 gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2794 gfc_actual_arglist **arglist,
2795 bool parent)
2797 gfc_actual_arglist *actual;
2798 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2799 gfc_constructor_base ctor_head = NULL;
2800 gfc_component *comp; /* Is set NULL when named component is first seen */
2801 const char* last_name = NULL;
2802 locus old_locus;
2803 gfc_expr *expr;
2805 expr = parent ? *cexpr : e;
2806 old_locus = gfc_current_locus;
2807 if (parent)
2808 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2809 else
2810 gfc_current_locus = expr->where;
2812 comp_tail = comp_head = NULL;
2814 if (!parent && sym->attr.abstract)
2816 gfc_error ("Can't construct ABSTRACT type %qs at %L",
2817 sym->name, &expr->where);
2818 goto cleanup;
2821 comp = sym->components;
2822 actual = parent ? *arglist : expr->value.function.actual;
2823 for ( ; actual; )
2825 gfc_component *this_comp = NULL;
2827 if (!comp_head)
2828 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2829 else
2831 comp_tail->next = gfc_get_structure_ctor_component ();
2832 comp_tail = comp_tail->next;
2834 if (actual->name)
2836 if (!gfc_notify_std (GFC_STD_F2003, "Structure"
2837 " constructor with named arguments at %C"))
2838 goto cleanup;
2840 comp_tail->name = xstrdup (actual->name);
2841 last_name = comp_tail->name;
2842 comp = NULL;
2844 else
2846 /* Components without name are not allowed after the first named
2847 component initializer! */
2848 if (!comp || comp->attr.artificial)
2850 if (last_name)
2851 gfc_error ("Component initializer without name after component"
2852 " named %s at %L", last_name,
2853 actual->expr ? &actual->expr->where
2854 : &gfc_current_locus);
2855 else
2856 gfc_error ("Too many components in structure constructor at "
2857 "%L", actual->expr ? &actual->expr->where
2858 : &gfc_current_locus);
2859 goto cleanup;
2862 comp_tail->name = xstrdup (comp->name);
2865 /* Find the current component in the structure definition and check
2866 its access is not private. */
2867 if (comp)
2868 this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
2869 else
2871 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2872 false, false, NULL);
2873 comp = NULL; /* Reset needed! */
2876 /* Here we can check if a component name is given which does not
2877 correspond to any component of the defined structure. */
2878 if (!this_comp)
2879 goto cleanup;
2881 comp_tail->val = actual->expr;
2882 if (actual->expr != NULL)
2883 comp_tail->where = actual->expr->where;
2884 actual->expr = NULL;
2886 /* Check if this component is already given a value. */
2887 for (comp_iter = comp_head; comp_iter != comp_tail;
2888 comp_iter = comp_iter->next)
2890 gcc_assert (comp_iter);
2891 if (!strcmp (comp_iter->name, comp_tail->name))
2893 gfc_error ("Component %qs is initialized twice in the structure"
2894 " constructor at %L", comp_tail->name,
2895 comp_tail->val ? &comp_tail->where
2896 : &gfc_current_locus);
2897 goto cleanup;
2901 /* F2008, R457/C725, for PURE C1283. */
2902 if (this_comp->attr.pointer && comp_tail->val
2903 && gfc_is_coindexed (comp_tail->val))
2905 gfc_error ("Coindexed expression to pointer component %qs in "
2906 "structure constructor at %L", comp_tail->name,
2907 &comp_tail->where);
2908 goto cleanup;
2911 /* If not explicitly a parent constructor, gather up the components
2912 and build one. */
2913 if (comp && comp == sym->components
2914 && sym->attr.extension
2915 && comp_tail->val
2916 && (!gfc_bt_struct (comp_tail->val->ts.type)
2918 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2920 bool m;
2921 gfc_actual_arglist *arg_null = NULL;
2923 actual->expr = comp_tail->val;
2924 comp_tail->val = NULL;
2926 m = gfc_convert_to_structure_constructor (NULL,
2927 comp->ts.u.derived, &comp_tail->val,
2928 comp->ts.u.derived->attr.zero_comp
2929 ? &arg_null : &actual, true);
2930 if (!m)
2931 goto cleanup;
2933 if (comp->ts.u.derived->attr.zero_comp)
2935 comp = comp->next;
2936 continue;
2940 if (comp)
2941 comp = comp->next;
2942 if (parent && !comp)
2943 break;
2945 if (actual)
2946 actual = actual->next;
2949 if (!build_actual_constructor (&comp_head, &ctor_head, sym))
2950 goto cleanup;
2952 /* No component should be left, as this should have caused an error in the
2953 loop constructing the component-list (name that does not correspond to any
2954 component in the structure definition). */
2955 if (comp_head && sym->attr.extension)
2957 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2959 gfc_error ("component %qs at %L has already been set by a "
2960 "parent derived type constructor", comp_iter->name,
2961 &comp_iter->where);
2963 goto cleanup;
2965 else
2966 gcc_assert (!comp_head);
2968 if (parent)
2970 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2971 expr->ts.u.derived = sym;
2972 expr->value.constructor = ctor_head;
2973 *cexpr = expr;
2975 else
2977 expr->ts.u.derived = sym;
2978 expr->ts.kind = 0;
2979 expr->ts.type = BT_DERIVED;
2980 expr->value.constructor = ctor_head;
2981 expr->expr_type = EXPR_STRUCTURE;
2984 gfc_current_locus = old_locus;
2985 if (parent)
2986 *arglist = actual;
2987 return true;
2989 cleanup:
2990 gfc_current_locus = old_locus;
2992 for (comp_iter = comp_head; comp_iter; )
2994 gfc_structure_ctor_component *next = comp_iter->next;
2995 gfc_free_structure_ctor_component (comp_iter);
2996 comp_iter = next;
2998 gfc_constructor_free (ctor_head);
3000 return false;
3004 match
3005 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
3007 match m;
3008 gfc_expr *e;
3009 gfc_symtree *symtree;
3011 gfc_get_ha_sym_tree (sym->name, &symtree);
3013 e = gfc_get_expr ();
3014 e->symtree = symtree;
3015 e->expr_type = EXPR_FUNCTION;
3017 gcc_assert (gfc_fl_struct (sym->attr.flavor)
3018 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
3019 e->value.function.esym = sym;
3020 e->symtree->n.sym->attr.generic = 1;
3022 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3023 if (m != MATCH_YES)
3025 gfc_free_expr (e);
3026 return m;
3029 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false))
3031 gfc_free_expr (e);
3032 return MATCH_ERROR;
3035 /* If a structure constructor is in a DATA statement, then each entity
3036 in the structure constructor must be a constant. Try to reduce the
3037 expression here. */
3038 if (gfc_in_match_data ())
3039 gfc_reduce_init_expr (e);
3041 *result = e;
3042 return MATCH_YES;
3046 /* If the symbol is an implicit do loop index and implicitly typed,
3047 it should not be host associated. Provide a symtree from the
3048 current namespace. */
3049 static match
3050 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
3052 if ((*sym)->attr.flavor == FL_VARIABLE
3053 && (*sym)->ns != gfc_current_ns
3054 && (*sym)->attr.implied_index
3055 && (*sym)->attr.implicit_type
3056 && !(*sym)->attr.use_assoc)
3058 int i;
3059 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
3060 if (i)
3061 return MATCH_ERROR;
3062 *sym = (*st)->n.sym;
3064 return MATCH_YES;
3068 /* Procedure pointer as function result: Replace the function symbol by the
3069 auto-generated hidden result variable named "ppr@". */
3071 static bool
3072 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
3074 /* Check for procedure pointer result variable. */
3075 if ((*sym)->attr.function && !(*sym)->attr.external
3076 && (*sym)->result && (*sym)->result != *sym
3077 && (*sym)->result->attr.proc_pointer
3078 && (*sym) == gfc_current_ns->proc_name
3079 && (*sym) == (*sym)->result->ns->proc_name
3080 && strcmp ("ppr@", (*sym)->result->name) == 0)
3082 /* Automatic replacement with "hidden" result variable. */
3083 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
3084 *sym = (*sym)->result;
3085 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
3086 return true;
3088 return false;
3092 /* Matches a variable name followed by anything that might follow it--
3093 array reference, argument list of a function, etc. */
3095 match
3096 gfc_match_rvalue (gfc_expr **result)
3098 gfc_actual_arglist *actual_arglist;
3099 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
3100 gfc_state_data *st;
3101 gfc_symbol *sym;
3102 gfc_symtree *symtree;
3103 locus where, old_loc;
3104 gfc_expr *e;
3105 match m, m2;
3106 int i;
3107 gfc_typespec *ts;
3108 bool implicit_char;
3109 gfc_ref *ref;
3111 m = gfc_match ("%%loc");
3112 if (m == MATCH_YES)
3114 if (!gfc_notify_std (GFC_STD_LEGACY, "%%LOC() as an rvalue at %C"))
3115 return MATCH_ERROR;
3116 strncpy (name, "loc", 4);
3119 else
3121 m = gfc_match_name (name);
3122 if (m != MATCH_YES)
3123 return m;
3126 /* Check if the symbol exists. */
3127 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
3128 return MATCH_ERROR;
3130 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT
3131 type. For derived types we create a generic symbol which links to the
3132 derived type symbol; STRUCTUREs are simpler and must not conflict with
3133 variables. */
3134 if (!symtree)
3135 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree))
3136 return MATCH_ERROR;
3137 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3139 if (gfc_find_state (COMP_INTERFACE)
3140 && !gfc_current_ns->has_import_set)
3141 i = gfc_get_sym_tree (name, NULL, &symtree, false);
3142 else
3143 i = gfc_get_ha_sym_tree (name, &symtree);
3144 if (i)
3145 return MATCH_ERROR;
3149 sym = symtree->n.sym;
3150 e = NULL;
3151 where = gfc_current_locus;
3153 replace_hidden_procptr_result (&sym, &symtree);
3155 /* If this is an implicit do loop index and implicitly typed,
3156 it should not be host associated. */
3157 m = check_for_implicit_index (&symtree, &sym);
3158 if (m != MATCH_YES)
3159 return m;
3161 gfc_set_sym_referenced (sym);
3162 sym->attr.implied_index = 0;
3164 if (sym->attr.function && sym->result == sym)
3166 /* See if this is a directly recursive function call. */
3167 gfc_gobble_whitespace ();
3168 if (sym->attr.recursive
3169 && gfc_peek_ascii_char () == '('
3170 && gfc_current_ns->proc_name == sym
3171 && !sym->attr.dimension)
3173 gfc_error ("%qs at %C is the name of a recursive function "
3174 "and so refers to the result variable. Use an "
3175 "explicit RESULT variable for direct recursion "
3176 "(12.5.2.1)", sym->name);
3177 return MATCH_ERROR;
3180 if (gfc_is_function_return_value (sym, gfc_current_ns))
3181 goto variable;
3183 if (sym->attr.entry
3184 && (sym->ns == gfc_current_ns
3185 || sym->ns == gfc_current_ns->parent))
3187 gfc_entry_list *el = NULL;
3189 for (el = sym->ns->entries; el; el = el->next)
3190 if (sym == el->sym)
3191 goto variable;
3195 if (gfc_matching_procptr_assignment)
3196 goto procptr0;
3198 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
3199 goto function0;
3201 if (sym->attr.generic)
3202 goto generic_function;
3204 switch (sym->attr.flavor)
3206 case FL_VARIABLE:
3207 variable:
3208 e = gfc_get_expr ();
3210 e->expr_type = EXPR_VARIABLE;
3211 e->symtree = symtree;
3213 m = gfc_match_varspec (e, 0, false, true);
3214 break;
3216 case FL_PARAMETER:
3217 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
3218 end up here. Unfortunately, sym->value->expr_type is set to
3219 EXPR_CONSTANT, and so the if () branch would be followed without
3220 the !sym->as check. */
3221 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
3222 e = gfc_copy_expr (sym->value);
3223 else
3225 e = gfc_get_expr ();
3226 e->expr_type = EXPR_VARIABLE;
3229 e->symtree = symtree;
3230 m = gfc_match_varspec (e, 0, false, true);
3232 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
3233 break;
3235 /* Variable array references to derived type parameters cause
3236 all sorts of headaches in simplification. Treating such
3237 expressions as variable works just fine for all array
3238 references. */
3239 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
3241 for (ref = e->ref; ref; ref = ref->next)
3242 if (ref->type == REF_ARRAY)
3243 break;
3245 if (ref == NULL || ref->u.ar.type == AR_FULL)
3246 break;
3248 ref = e->ref;
3249 e->ref = NULL;
3250 gfc_free_expr (e);
3251 e = gfc_get_expr ();
3252 e->expr_type = EXPR_VARIABLE;
3253 e->symtree = symtree;
3254 e->ref = ref;
3257 break;
3259 case FL_STRUCT:
3260 case FL_DERIVED:
3261 sym = gfc_use_derived (sym);
3262 if (sym == NULL)
3263 m = MATCH_ERROR;
3264 else
3265 goto generic_function;
3266 break;
3268 /* If we're here, then the name is known to be the name of a
3269 procedure, yet it is not sure to be the name of a function. */
3270 case FL_PROCEDURE:
3272 /* Procedure Pointer Assignments. */
3273 procptr0:
3274 if (gfc_matching_procptr_assignment)
3276 gfc_gobble_whitespace ();
3277 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
3278 /* Parse functions returning a procptr. */
3279 goto function0;
3281 e = gfc_get_expr ();
3282 e->expr_type = EXPR_VARIABLE;
3283 e->symtree = symtree;
3284 m = gfc_match_varspec (e, 0, false, true);
3285 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
3286 && sym->ts.type == BT_UNKNOWN
3287 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
3289 m = MATCH_ERROR;
3290 break;
3292 break;
3295 if (sym->attr.subroutine)
3297 gfc_error ("Unexpected use of subroutine name %qs at %C",
3298 sym->name);
3299 m = MATCH_ERROR;
3300 break;
3303 /* At this point, the name has to be a non-statement function.
3304 If the name is the same as the current function being
3305 compiled, then we have a variable reference (to the function
3306 result) if the name is non-recursive. */
3308 st = gfc_enclosing_unit (NULL);
3310 if (st != NULL
3311 && st->state == COMP_FUNCTION
3312 && st->sym == sym
3313 && !sym->attr.recursive)
3315 e = gfc_get_expr ();
3316 e->symtree = symtree;
3317 e->expr_type = EXPR_VARIABLE;
3319 m = gfc_match_varspec (e, 0, false, true);
3320 break;
3323 /* Match a function reference. */
3324 function0:
3325 m = gfc_match_actual_arglist (0, &actual_arglist);
3326 if (m == MATCH_NO)
3328 if (sym->attr.proc == PROC_ST_FUNCTION)
3329 gfc_error ("Statement function %qs requires argument list at %C",
3330 sym->name);
3331 else
3332 gfc_error ("Function %qs requires an argument list at %C",
3333 sym->name);
3335 m = MATCH_ERROR;
3336 break;
3339 if (m != MATCH_YES)
3341 m = MATCH_ERROR;
3342 break;
3345 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
3346 sym = symtree->n.sym;
3348 replace_hidden_procptr_result (&sym, &symtree);
3350 e = gfc_get_expr ();
3351 e->symtree = symtree;
3352 e->expr_type = EXPR_FUNCTION;
3353 e->value.function.actual = actual_arglist;
3354 e->where = gfc_current_locus;
3356 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3357 && CLASS_DATA (sym)->as)
3358 e->rank = CLASS_DATA (sym)->as->rank;
3359 else if (sym->as != NULL)
3360 e->rank = sym->as->rank;
3362 if (!sym->attr.function
3363 && !gfc_add_function (&sym->attr, sym->name, NULL))
3365 m = MATCH_ERROR;
3366 break;
3369 /* Check here for the existence of at least one argument for the
3370 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
3371 argument(s) given will be checked in gfc_iso_c_func_interface,
3372 during resolution of the function call. */
3373 if (sym->attr.is_iso_c == 1
3374 && (sym->from_intmod == INTMOD_ISO_C_BINDING
3375 && (sym->intmod_sym_id == ISOCBINDING_LOC
3376 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
3377 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
3379 /* make sure we were given a param */
3380 if (actual_arglist == NULL)
3382 gfc_error ("Missing argument to %qs at %C", sym->name);
3383 m = MATCH_ERROR;
3384 break;
3388 if (sym->result == NULL)
3389 sym->result = sym;
3391 gfc_gobble_whitespace ();
3392 /* F08:C612. */
3393 if (gfc_peek_ascii_char() == '%')
3395 gfc_error ("The leftmost part-ref in a data-ref can not be a "
3396 "function reference at %C");
3397 m = MATCH_ERROR;
3400 m = MATCH_YES;
3401 break;
3403 case FL_UNKNOWN:
3405 /* Special case for derived type variables that get their types
3406 via an IMPLICIT statement. This can't wait for the
3407 resolution phase. */
3409 old_loc = gfc_current_locus;
3410 if (gfc_match_member_sep (sym) == MATCH_YES
3411 && sym->ts.type == BT_UNKNOWN
3412 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
3413 gfc_set_default_type (sym, 0, sym->ns);
3414 gfc_current_locus = old_loc;
3416 /* If the symbol has a (co)dimension attribute, the expression is a
3417 variable. */
3419 if (sym->attr.dimension || sym->attr.codimension)
3421 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3423 m = MATCH_ERROR;
3424 break;
3427 e = gfc_get_expr ();
3428 e->symtree = symtree;
3429 e->expr_type = EXPR_VARIABLE;
3430 m = gfc_match_varspec (e, 0, false, true);
3431 break;
3434 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3435 && (CLASS_DATA (sym)->attr.dimension
3436 || CLASS_DATA (sym)->attr.codimension))
3438 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3440 m = MATCH_ERROR;
3441 break;
3444 e = gfc_get_expr ();
3445 e->symtree = symtree;
3446 e->expr_type = EXPR_VARIABLE;
3447 m = gfc_match_varspec (e, 0, false, true);
3448 break;
3451 /* Name is not an array, so we peek to see if a '(' implies a
3452 function call or a substring reference. Otherwise the
3453 variable is just a scalar. */
3455 gfc_gobble_whitespace ();
3456 if (gfc_peek_ascii_char () != '(')
3458 /* Assume a scalar variable */
3459 e = gfc_get_expr ();
3460 e->symtree = symtree;
3461 e->expr_type = EXPR_VARIABLE;
3463 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3465 m = MATCH_ERROR;
3466 break;
3469 /*FIXME:??? gfc_match_varspec does set this for us: */
3470 e->ts = sym->ts;
3471 m = gfc_match_varspec (e, 0, false, true);
3472 break;
3475 /* See if this is a function reference with a keyword argument
3476 as first argument. We do this because otherwise a spurious
3477 symbol would end up in the symbol table. */
3479 old_loc = gfc_current_locus;
3480 m2 = gfc_match (" ( %n =", argname);
3481 gfc_current_locus = old_loc;
3483 e = gfc_get_expr ();
3484 e->symtree = symtree;
3486 if (m2 != MATCH_YES)
3488 /* Try to figure out whether we're dealing with a character type.
3489 We're peeking ahead here, because we don't want to call
3490 match_substring if we're dealing with an implicitly typed
3491 non-character variable. */
3492 implicit_char = false;
3493 if (sym->ts.type == BT_UNKNOWN)
3495 ts = gfc_get_default_type (sym->name, NULL);
3496 if (ts->type == BT_CHARACTER)
3497 implicit_char = true;
3500 /* See if this could possibly be a substring reference of a name
3501 that we're not sure is a variable yet. */
3503 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3504 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES)
3507 e->expr_type = EXPR_VARIABLE;
3509 if (sym->attr.flavor != FL_VARIABLE
3510 && !gfc_add_flavor (&sym->attr, FL_VARIABLE,
3511 sym->name, NULL))
3513 m = MATCH_ERROR;
3514 break;
3517 if (sym->ts.type == BT_UNKNOWN
3518 && !gfc_set_default_type (sym, 1, NULL))
3520 m = MATCH_ERROR;
3521 break;
3524 e->ts = sym->ts;
3525 if (e->ref)
3526 e->ts.u.cl = NULL;
3527 m = MATCH_YES;
3528 break;
3532 /* Give up, assume we have a function. */
3534 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3535 sym = symtree->n.sym;
3536 e->expr_type = EXPR_FUNCTION;
3538 if (!sym->attr.function
3539 && !gfc_add_function (&sym->attr, sym->name, NULL))
3541 m = MATCH_ERROR;
3542 break;
3545 sym->result = sym;
3547 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3548 if (m == MATCH_NO)
3549 gfc_error ("Missing argument list in function %qs at %C", sym->name);
3551 if (m != MATCH_YES)
3553 m = MATCH_ERROR;
3554 break;
3557 /* If our new function returns a character, array or structure
3558 type, it might have subsequent references. */
3560 m = gfc_match_varspec (e, 0, false, true);
3561 if (m == MATCH_NO)
3562 m = MATCH_YES;
3564 break;
3566 generic_function:
3567 /* Look for symbol first; if not found, look for STRUCTURE type symbol
3568 specially. Creates a generic symbol for derived types. */
3569 gfc_find_sym_tree (name, NULL, 1, &symtree);
3570 if (!symtree)
3571 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree);
3572 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3573 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3575 e = gfc_get_expr ();
3576 e->symtree = symtree;
3577 e->expr_type = EXPR_FUNCTION;
3579 if (gfc_fl_struct (sym->attr.flavor))
3581 e->value.function.esym = sym;
3582 e->symtree->n.sym->attr.generic = 1;
3585 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3586 break;
3588 case FL_NAMELIST:
3589 m = MATCH_ERROR;
3590 break;
3592 default:
3593 gfc_error ("Symbol at %C is not appropriate for an expression");
3594 return MATCH_ERROR;
3597 if (m == MATCH_YES)
3599 e->where = where;
3600 *result = e;
3602 else
3603 gfc_free_expr (e);
3605 return m;
3609 /* Match a variable, i.e. something that can be assigned to. This
3610 starts as a symbol, can be a structure component or an array
3611 reference. It can be a function if the function doesn't have a
3612 separate RESULT variable. If the symbol has not been previously
3613 seen, we assume it is a variable.
3615 This function is called by two interface functions:
3616 gfc_match_variable, which has host_flag = 1, and
3617 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3618 match of the symbol to the local scope. */
3620 static match
3621 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3623 gfc_symbol *sym, *dt_sym;
3624 gfc_symtree *st;
3625 gfc_expr *expr;
3626 locus where, old_loc;
3627 match m;
3629 /* Since nothing has any business being an lvalue in a module
3630 specification block, an interface block or a contains section,
3631 we force the changed_symbols mechanism to work by setting
3632 host_flag to 0. This prevents valid symbols that have the name
3633 of keywords, such as 'end', being turned into variables by
3634 failed matching to assignments for, e.g., END INTERFACE. */
3635 if (gfc_current_state () == COMP_MODULE
3636 || gfc_current_state () == COMP_SUBMODULE
3637 || gfc_current_state () == COMP_INTERFACE
3638 || gfc_current_state () == COMP_CONTAINS)
3639 host_flag = 0;
3641 where = gfc_current_locus;
3642 m = gfc_match_sym_tree (&st, host_flag);
3643 if (m != MATCH_YES)
3644 return m;
3646 sym = st->n.sym;
3648 /* If this is an implicit do loop index and implicitly typed,
3649 it should not be host associated. */
3650 m = check_for_implicit_index (&st, &sym);
3651 if (m != MATCH_YES)
3652 return m;
3654 sym->attr.implied_index = 0;
3656 gfc_set_sym_referenced (sym);
3658 /* STRUCTUREs may share names with variables, but derived types may not. */
3659 if (sym->attr.flavor == FL_PROCEDURE && sym->generic
3660 && (dt_sym = gfc_find_dt_in_generic (sym)))
3662 if (dt_sym->attr.flavor == FL_DERIVED)
3663 gfc_error ("Derived type %qs cannot be used as a variable at %C",
3664 sym->name);
3665 return MATCH_ERROR;
3668 switch (sym->attr.flavor)
3670 case FL_VARIABLE:
3671 /* Everything is alright. */
3672 break;
3674 case FL_UNKNOWN:
3676 sym_flavor flavor = FL_UNKNOWN;
3678 gfc_gobble_whitespace ();
3680 if (sym->attr.external || sym->attr.procedure
3681 || sym->attr.function || sym->attr.subroutine)
3682 flavor = FL_PROCEDURE;
3684 /* If it is not a procedure, is not typed and is host associated,
3685 we cannot give it a flavor yet. */
3686 else if (sym->ns == gfc_current_ns->parent
3687 && sym->ts.type == BT_UNKNOWN)
3688 break;
3690 /* These are definitive indicators that this is a variable. */
3691 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3692 || sym->attr.pointer || sym->as != NULL)
3693 flavor = FL_VARIABLE;
3695 if (flavor != FL_UNKNOWN
3696 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL))
3697 return MATCH_ERROR;
3699 break;
3701 case FL_PARAMETER:
3702 if (equiv_flag)
3704 gfc_error ("Named constant at %C in an EQUIVALENCE");
3705 return MATCH_ERROR;
3707 /* Otherwise this is checked for and an error given in the
3708 variable definition context checks. */
3709 break;
3711 case FL_PROCEDURE:
3712 /* Check for a nonrecursive function result variable. */
3713 if (sym->attr.function
3714 && !sym->attr.external
3715 && sym->result == sym
3716 && (gfc_is_function_return_value (sym, gfc_current_ns)
3717 || (sym->attr.entry
3718 && sym->ns == gfc_current_ns)
3719 || (sym->attr.entry
3720 && sym->ns == gfc_current_ns->parent)))
3722 /* If a function result is a derived type, then the derived
3723 type may still have to be resolved. */
3725 if (sym->ts.type == BT_DERIVED
3726 && gfc_use_derived (sym->ts.u.derived) == NULL)
3727 return MATCH_ERROR;
3728 break;
3731 if (sym->attr.proc_pointer
3732 || replace_hidden_procptr_result (&sym, &st))
3733 break;
3735 /* Fall through to error */
3736 gcc_fallthrough ();
3738 default:
3739 gfc_error ("%qs at %C is not a variable", sym->name);
3740 return MATCH_ERROR;
3743 /* Special case for derived type variables that get their types
3744 via an IMPLICIT statement. This can't wait for the
3745 resolution phase. */
3748 gfc_namespace * implicit_ns;
3750 if (gfc_current_ns->proc_name == sym)
3751 implicit_ns = gfc_current_ns;
3752 else
3753 implicit_ns = sym->ns;
3755 old_loc = gfc_current_locus;
3756 if (gfc_match_member_sep (sym) == MATCH_YES
3757 && sym->ts.type == BT_UNKNOWN
3758 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3759 gfc_set_default_type (sym, 0, implicit_ns);
3760 gfc_current_locus = old_loc;
3763 expr = gfc_get_expr ();
3765 expr->expr_type = EXPR_VARIABLE;
3766 expr->symtree = st;
3767 expr->ts = sym->ts;
3768 expr->where = where;
3770 /* Now see if we have to do more. */
3771 m = gfc_match_varspec (expr, equiv_flag, false, false);
3772 if (m != MATCH_YES)
3774 gfc_free_expr (expr);
3775 return m;
3778 *result = expr;
3779 return MATCH_YES;
3783 match
3784 gfc_match_variable (gfc_expr **result, int equiv_flag)
3786 return match_variable (result, equiv_flag, 1);
3790 match
3791 gfc_match_equiv_variable (gfc_expr **result)
3793 return match_variable (result, 1, 0);