* es.po: Update.
[official-gcc.git] / gcc / fortran / primary.c
blob2101644fcdc2649377b5c70517b6d98bd87b3212
1 /* Primary expression subroutines
2 Copyright (C) 2000-2016 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 const char *p;
45 match m;
47 *is_iso_c = 0;
49 m = gfc_match_small_literal_int (kind, NULL);
50 if (m != MATCH_NO)
51 return m;
53 m = gfc_match_name (name);
54 if (m != MATCH_YES)
55 return m;
57 if (gfc_find_symbol (name, NULL, 1, &sym))
58 return MATCH_ERROR;
60 if (sym == NULL)
61 return MATCH_NO;
63 *is_iso_c = sym->attr.is_iso_c;
65 if (sym->attr.flavor != FL_PARAMETER)
66 return MATCH_NO;
68 if (sym->value == NULL)
69 return MATCH_NO;
71 p = gfc_extract_int (sym->value, kind);
72 if (p != NULL)
73 return MATCH_NO;
75 gfc_set_sym_referenced (sym);
77 if (*kind < 0)
78 return MATCH_NO;
80 return MATCH_YES;
84 /* Get a trailing kind-specification for non-character variables.
85 Returns:
86 * the integer kind value or
87 * -1 if an error was generated,
88 * -2 if no kind was found.
89 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
90 symbol like e.g. 'c_int'. */
92 static int
93 get_kind (int *is_iso_c)
95 int kind;
96 match m;
98 *is_iso_c = 0;
100 if (gfc_match_char ('_') != MATCH_YES)
101 return -2;
103 m = match_kind_param (&kind, is_iso_c);
104 if (m == MATCH_NO)
105 gfc_error ("Missing kind-parameter at %C");
107 return (m == MATCH_YES) ? kind : -1;
111 /* Given a character and a radix, see if the character is a valid
112 digit in that radix. */
115 gfc_check_digit (char c, int radix)
117 int r;
119 switch (radix)
121 case 2:
122 r = ('0' <= c && c <= '1');
123 break;
125 case 8:
126 r = ('0' <= c && c <= '7');
127 break;
129 case 10:
130 r = ('0' <= c && c <= '9');
131 break;
133 case 16:
134 r = ISXDIGIT (c);
135 break;
137 default:
138 gfc_internal_error ("gfc_check_digit(): bad radix");
141 return r;
145 /* Match the digit string part of an integer if signflag is not set,
146 the signed digit string part if signflag is set. If the buffer
147 is NULL, we just count characters for the resolution pass. Returns
148 the number of characters matched, -1 for no match. */
150 static int
151 match_digits (int signflag, int radix, char *buffer)
153 locus old_loc;
154 int length;
155 char c;
157 length = 0;
158 c = gfc_next_ascii_char ();
160 if (signflag && (c == '+' || c == '-'))
162 if (buffer != NULL)
163 *buffer++ = c;
164 gfc_gobble_whitespace ();
165 c = gfc_next_ascii_char ();
166 length++;
169 if (!gfc_check_digit (c, radix))
170 return -1;
172 length++;
173 if (buffer != NULL)
174 *buffer++ = c;
176 for (;;)
178 old_loc = gfc_current_locus;
179 c = gfc_next_ascii_char ();
181 if (!gfc_check_digit (c, radix))
182 break;
184 if (buffer != NULL)
185 *buffer++ = c;
186 length++;
189 gfc_current_locus = old_loc;
191 return length;
195 /* Match an integer (digit string and optional kind).
196 A sign will be accepted if signflag is set. */
198 static match
199 match_integer_constant (gfc_expr **result, int signflag)
201 int length, kind, is_iso_c;
202 locus old_loc;
203 char *buffer;
204 gfc_expr *e;
206 old_loc = gfc_current_locus;
207 gfc_gobble_whitespace ();
209 length = match_digits (signflag, 10, NULL);
210 gfc_current_locus = old_loc;
211 if (length == -1)
212 return MATCH_NO;
214 buffer = (char *) alloca (length + 1);
215 memset (buffer, '\0', length + 1);
217 gfc_gobble_whitespace ();
219 match_digits (signflag, 10, buffer);
221 kind = get_kind (&is_iso_c);
222 if (kind == -2)
223 kind = gfc_default_integer_kind;
224 if (kind == -1)
225 return MATCH_ERROR;
227 if (kind == 4 && flag_integer4_kind == 8)
228 kind = 8;
230 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
232 gfc_error ("Integer kind %d at %C not available", kind);
233 return MATCH_ERROR;
236 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
237 e->ts.is_c_interop = is_iso_c;
239 if (gfc_range_check (e) != ARITH_OK)
241 gfc_error ("Integer too big for its kind at %C. This check can be "
242 "disabled with the option -fno-range-check");
244 gfc_free_expr (e);
245 return MATCH_ERROR;
248 *result = e;
249 return MATCH_YES;
253 /* Match a Hollerith constant. */
255 static match
256 match_hollerith_constant (gfc_expr **result)
258 locus old_loc;
259 gfc_expr *e = NULL;
260 const char *msg;
261 int num, pad;
262 int i;
264 old_loc = gfc_current_locus;
265 gfc_gobble_whitespace ();
267 if (match_integer_constant (&e, 0) == MATCH_YES
268 && gfc_match_char ('h') == MATCH_YES)
270 if (!gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant at %C"))
271 goto cleanup;
273 msg = gfc_extract_int (e, &num);
274 if (msg != NULL)
276 gfc_error (msg);
277 goto cleanup;
279 if (num == 0)
281 gfc_error ("Invalid Hollerith constant: %L must contain at least "
282 "one character", &old_loc);
283 goto cleanup;
285 if (e->ts.kind != gfc_default_integer_kind)
287 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
288 "should be default", &old_loc);
289 goto cleanup;
291 else
293 gfc_free_expr (e);
294 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
295 &gfc_current_locus);
297 /* Calculate padding needed to fit default integer memory. */
298 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
300 e->representation.string = XCNEWVEC (char, num + pad + 1);
302 for (i = 0; i < num; i++)
304 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
305 if (! gfc_wide_fits_in_byte (c))
307 gfc_error ("Invalid Hollerith constant at %L contains a "
308 "wide character", &old_loc);
309 goto cleanup;
312 e->representation.string[i] = (unsigned char) c;
315 /* Now pad with blanks and end with a null char. */
316 for (i = 0; i < pad; i++)
317 e->representation.string[num + i] = ' ';
319 e->representation.string[num + i] = '\0';
320 e->representation.length = num + pad;
321 e->ts.u.pad = pad;
323 *result = e;
324 return MATCH_YES;
328 gfc_free_expr (e);
329 gfc_current_locus = old_loc;
330 return MATCH_NO;
332 cleanup:
333 gfc_free_expr (e);
334 return MATCH_ERROR;
338 /* Match a binary, octal or hexadecimal constant that can be found in
339 a DATA statement. The standard permits b'010...', o'73...', and
340 z'a1...' where b, o, and z can be capital letters. This function
341 also accepts postfixed forms of the constants: '01...'b, '73...'o,
342 and 'a1...'z. An additional extension is the use of x for z. */
344 static match
345 match_boz_constant (gfc_expr **result)
347 int radix, length, x_hex, kind;
348 locus old_loc, start_loc;
349 char *buffer, post, delim;
350 gfc_expr *e;
352 start_loc = old_loc = gfc_current_locus;
353 gfc_gobble_whitespace ();
355 x_hex = 0;
356 switch (post = gfc_next_ascii_char ())
358 case 'b':
359 radix = 2;
360 post = 0;
361 break;
362 case 'o':
363 radix = 8;
364 post = 0;
365 break;
366 case 'x':
367 x_hex = 1;
368 /* Fall through. */
369 case 'z':
370 radix = 16;
371 post = 0;
372 break;
373 case '\'':
374 /* Fall through. */
375 case '\"':
376 delim = post;
377 post = 1;
378 radix = 16; /* Set to accept any valid digit string. */
379 break;
380 default:
381 goto backup;
384 /* No whitespace allowed here. */
386 if (post == 0)
387 delim = gfc_next_ascii_char ();
389 if (delim != '\'' && delim != '\"')
390 goto backup;
392 if (x_hex
393 && (!gfc_notify_std(GFC_STD_GNU, "Hexadecimal "
394 "constant at %C uses non-standard syntax")))
395 return MATCH_ERROR;
397 old_loc = gfc_current_locus;
399 length = match_digits (0, radix, NULL);
400 if (length == -1)
402 gfc_error ("Empty set of digits in BOZ constant at %C");
403 return MATCH_ERROR;
406 if (gfc_next_ascii_char () != delim)
408 gfc_error ("Illegal character in BOZ constant at %C");
409 return MATCH_ERROR;
412 if (post == 1)
414 switch (gfc_next_ascii_char ())
416 case 'b':
417 radix = 2;
418 break;
419 case 'o':
420 radix = 8;
421 break;
422 case 'x':
423 /* Fall through. */
424 case 'z':
425 radix = 16;
426 break;
427 default:
428 goto backup;
431 if (!gfc_notify_std (GFC_STD_GNU, "BOZ constant "
432 "at %C uses non-standard postfix syntax"))
433 return MATCH_ERROR;
436 gfc_current_locus = old_loc;
438 buffer = (char *) alloca (length + 1);
439 memset (buffer, '\0', length + 1);
441 match_digits (0, radix, buffer);
442 gfc_next_ascii_char (); /* Eat delimiter. */
443 if (post == 1)
444 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
446 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
447 "If a data-stmt-constant is a boz-literal-constant, the corresponding
448 variable shall be of type integer. The boz-literal-constant is treated
449 as if it were an int-literal-constant with a kind-param that specifies
450 the representation method with the largest decimal exponent range
451 supported by the processor." */
453 kind = gfc_max_integer_kind;
454 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
456 /* Mark as boz variable. */
457 e->is_boz = 1;
459 if (gfc_range_check (e) != ARITH_OK)
461 gfc_error ("Integer too big for integer kind %i at %C", kind);
462 gfc_free_expr (e);
463 return MATCH_ERROR;
466 if (!gfc_in_match_data ()
467 && (!gfc_notify_std(GFC_STD_F2003, "BOZ used outside a DATA "
468 "statement at %C")))
469 return MATCH_ERROR;
471 *result = e;
472 return MATCH_YES;
474 backup:
475 gfc_current_locus = start_loc;
476 return MATCH_NO;
480 /* Match a real constant of some sort. Allow a signed constant if signflag
481 is nonzero. */
483 static match
484 match_real_constant (gfc_expr **result, int signflag)
486 int kind, count, seen_dp, seen_digits, is_iso_c;
487 locus old_loc, temp_loc;
488 char *p, *buffer, c, exp_char;
489 gfc_expr *e;
490 bool negate;
492 old_loc = gfc_current_locus;
493 gfc_gobble_whitespace ();
495 e = NULL;
497 count = 0;
498 seen_dp = 0;
499 seen_digits = 0;
500 exp_char = ' ';
501 negate = FALSE;
503 c = gfc_next_ascii_char ();
504 if (signflag && (c == '+' || c == '-'))
506 if (c == '-')
507 negate = TRUE;
509 gfc_gobble_whitespace ();
510 c = gfc_next_ascii_char ();
513 /* Scan significand. */
514 for (;; c = gfc_next_ascii_char (), count++)
516 if (c == '.')
518 if (seen_dp)
519 goto done;
521 /* Check to see if "." goes with a following operator like
522 ".eq.". */
523 temp_loc = gfc_current_locus;
524 c = gfc_next_ascii_char ();
526 if (c == 'e' || c == 'd' || c == 'q')
528 c = gfc_next_ascii_char ();
529 if (c == '.')
530 goto done; /* Operator named .e. or .d. */
533 if (ISALPHA (c))
534 goto done; /* Distinguish 1.e9 from 1.eq.2 */
536 gfc_current_locus = temp_loc;
537 seen_dp = 1;
538 continue;
541 if (ISDIGIT (c))
543 seen_digits = 1;
544 continue;
547 break;
550 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
551 goto done;
552 exp_char = c;
555 if (c == 'q')
557 if (!gfc_notify_std (GFC_STD_GNU, "exponent-letter 'q' in "
558 "real-literal-constant at %C"))
559 return MATCH_ERROR;
560 else if (warn_real_q_constant)
561 gfc_warning (OPT_Wreal_q_constant,
562 "Extension: exponent-letter %<q%> in real-literal-constant "
563 "at %C");
566 /* Scan exponent. */
567 c = gfc_next_ascii_char ();
568 count++;
570 if (c == '+' || c == '-')
571 { /* optional sign */
572 c = gfc_next_ascii_char ();
573 count++;
576 if (!ISDIGIT (c))
578 gfc_error ("Missing exponent in real number at %C");
579 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 + 1);
601 memset (buffer, '\0', count + 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 ();
625 kind = get_kind (&is_iso_c);
626 if (kind == -1)
627 goto cleanup;
629 switch (exp_char)
631 case 'd':
632 if (kind != -2)
634 gfc_error ("Real number at %C has a %<d%> exponent and an explicit "
635 "kind");
636 goto cleanup;
638 kind = gfc_default_double_kind;
640 if (kind == 4)
642 if (flag_real4_kind == 8)
643 kind = 8;
644 if (flag_real4_kind == 10)
645 kind = 10;
646 if (flag_real4_kind == 16)
647 kind = 16;
650 if (kind == 8)
652 if (flag_real8_kind == 4)
653 kind = 4;
654 if (flag_real8_kind == 10)
655 kind = 10;
656 if (flag_real8_kind == 16)
657 kind = 16;
659 break;
661 case 'q':
662 if (kind != -2)
664 gfc_error ("Real number at %C has a %<q%> exponent and an explicit "
665 "kind");
666 goto cleanup;
669 /* The maximum possible real kind type parameter is 16. First, try
670 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
671 extended precision. If neither value works, just given up. */
672 kind = 16;
673 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
675 kind = 10;
676 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
678 gfc_error ("Invalid exponent-letter %<q%> in "
679 "real-literal-constant at %C");
680 goto cleanup;
683 break;
685 default:
686 if (kind == -2)
687 kind = gfc_default_real_kind;
689 if (kind == 4)
691 if (flag_real4_kind == 8)
692 kind = 8;
693 if (flag_real4_kind == 10)
694 kind = 10;
695 if (flag_real4_kind == 16)
696 kind = 16;
699 if (kind == 8)
701 if (flag_real8_kind == 4)
702 kind = 4;
703 if (flag_real8_kind == 10)
704 kind = 10;
705 if (flag_real8_kind == 16)
706 kind = 16;
709 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
711 gfc_error ("Invalid real kind %d at %C", kind);
712 goto cleanup;
716 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
717 if (negate)
718 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
719 e->ts.is_c_interop = is_iso_c;
721 switch (gfc_range_check (e))
723 case ARITH_OK:
724 break;
725 case ARITH_OVERFLOW:
726 gfc_error ("Real constant overflows its kind at %C");
727 goto cleanup;
729 case ARITH_UNDERFLOW:
730 if (warn_underflow)
731 gfc_warning (OPT_Wunderflow, "Real constant underflows its kind at %C");
732 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
733 break;
735 default:
736 gfc_internal_error ("gfc_range_check() returned bad value");
739 /* Warn about trailing digits which suggest the user added too many
740 trailing digits, which may cause the appearance of higher pecision
741 than the kind kan support.
743 This is done by replacing the rightmost non-zero digit with zero
744 and comparing with the original value. If these are equal, we
745 assume the user supplied more digits than intended (or forgot to
746 convert to the correct kind).
749 if (warn_conversion_extra)
751 mpfr_t r;
752 char *c, *p;
753 bool did_break;
755 c = strchr (buffer, 'e');
756 if (c == NULL)
757 c = buffer + strlen(buffer);
759 did_break = false;
760 for (p = c - 1; p >= buffer; p--)
762 if (*p == '.')
763 continue;
765 if (*p != '0')
767 *p = '0';
768 did_break = true;
769 break;
773 if (did_break)
775 mpfr_init (r);
776 mpfr_set_str (r, buffer, 10, GFC_RND_MODE);
777 if (negate)
778 mpfr_neg (r, r, GFC_RND_MODE);
780 mpfr_sub (r, r, e->value.real, GFC_RND_MODE);
782 if (mpfr_cmp_ui (r, 0) == 0)
783 gfc_warning (OPT_Wconversion_extra, "Non-significant digits "
784 "in %qs number at %C, maybe incorrect KIND",
785 gfc_typename (&e->ts));
787 mpfr_clear (r);
791 *result = e;
792 return MATCH_YES;
794 cleanup:
795 gfc_free_expr (e);
796 return MATCH_ERROR;
800 /* Match a substring reference. */
802 static match
803 match_substring (gfc_charlen *cl, int init, gfc_ref **result, bool deferred)
805 gfc_expr *start, *end;
806 locus old_loc;
807 gfc_ref *ref;
808 match m;
810 start = NULL;
811 end = NULL;
813 old_loc = gfc_current_locus;
815 m = gfc_match_char ('(');
816 if (m != MATCH_YES)
817 return MATCH_NO;
819 if (gfc_match_char (':') != MATCH_YES)
821 if (init)
822 m = gfc_match_init_expr (&start);
823 else
824 m = gfc_match_expr (&start);
826 if (m != MATCH_YES)
828 m = MATCH_NO;
829 goto cleanup;
832 m = gfc_match_char (':');
833 if (m != MATCH_YES)
834 goto cleanup;
837 if (gfc_match_char (')') != MATCH_YES)
839 if (init)
840 m = gfc_match_init_expr (&end);
841 else
842 m = gfc_match_expr (&end);
844 if (m == MATCH_NO)
845 goto syntax;
846 if (m == MATCH_ERROR)
847 goto cleanup;
849 m = gfc_match_char (')');
850 if (m == MATCH_NO)
851 goto syntax;
854 /* Optimize away the (:) reference. */
855 if (start == NULL && end == NULL && !deferred)
856 ref = NULL;
857 else
859 ref = gfc_get_ref ();
861 ref->type = REF_SUBSTRING;
862 if (start == NULL)
863 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
864 ref->u.ss.start = start;
865 if (end == NULL && cl)
866 end = gfc_copy_expr (cl->length);
867 ref->u.ss.end = end;
868 ref->u.ss.length = cl;
871 *result = ref;
872 return MATCH_YES;
874 syntax:
875 gfc_error ("Syntax error in SUBSTRING specification at %C");
876 m = MATCH_ERROR;
878 cleanup:
879 gfc_free_expr (start);
880 gfc_free_expr (end);
882 gfc_current_locus = old_loc;
883 return m;
887 /* Reads the next character of a string constant, taking care to
888 return doubled delimiters on the input as a single instance of
889 the delimiter.
891 Special return values for "ret" argument are:
892 -1 End of the string, as determined by the delimiter
893 -2 Unterminated string detected
895 Backslash codes are also expanded at this time. */
897 static gfc_char_t
898 next_string_char (gfc_char_t delimiter, int *ret)
900 locus old_locus;
901 gfc_char_t c;
903 c = gfc_next_char_literal (INSTRING_WARN);
904 *ret = 0;
906 if (c == '\n')
908 *ret = -2;
909 return 0;
912 if (flag_backslash && c == '\\')
914 old_locus = gfc_current_locus;
916 if (gfc_match_special_char (&c) == MATCH_NO)
917 gfc_current_locus = old_locus;
919 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
920 gfc_warning (0, "Extension: backslash character at %C");
923 if (c != delimiter)
924 return c;
926 old_locus = gfc_current_locus;
927 c = gfc_next_char_literal (NONSTRING);
929 if (c == delimiter)
930 return c;
931 gfc_current_locus = old_locus;
933 *ret = -1;
934 return 0;
938 /* Special case of gfc_match_name() that matches a parameter kind name
939 before a string constant. This takes case of the weird but legal
940 case of:
942 kind_____'string'
944 where kind____ is a parameter. gfc_match_name() will happily slurp
945 up all the underscores, which leads to problems. If we return
946 MATCH_YES, the parse pointer points to the final underscore, which
947 is not part of the name. We never return MATCH_ERROR-- errors in
948 the name will be detected later. */
950 static match
951 match_charkind_name (char *name)
953 locus old_loc;
954 char c, peek;
955 int len;
957 gfc_gobble_whitespace ();
958 c = gfc_next_ascii_char ();
959 if (!ISALPHA (c))
960 return MATCH_NO;
962 *name++ = c;
963 len = 1;
965 for (;;)
967 old_loc = gfc_current_locus;
968 c = gfc_next_ascii_char ();
970 if (c == '_')
972 peek = gfc_peek_ascii_char ();
974 if (peek == '\'' || peek == '\"')
976 gfc_current_locus = old_loc;
977 *name = '\0';
978 return MATCH_YES;
982 if (!ISALNUM (c)
983 && c != '_'
984 && (c != '$' || !flag_dollar_ok))
985 break;
987 *name++ = c;
988 if (++len > GFC_MAX_SYMBOL_LEN)
989 break;
992 return MATCH_NO;
996 /* See if the current input matches a character constant. Lots of
997 contortions have to be done to match the kind parameter which comes
998 before the actual string. The main consideration is that we don't
999 want to error out too quickly. For example, we don't actually do
1000 any validation of the kinds until we have actually seen a legal
1001 delimiter. Using match_kind_param() generates errors too quickly. */
1003 static match
1004 match_string_constant (gfc_expr **result)
1006 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
1007 int i, kind, length, save_warn_ampersand, ret;
1008 locus old_locus, start_locus;
1009 gfc_symbol *sym;
1010 gfc_expr *e;
1011 const char *q;
1012 match m;
1013 gfc_char_t c, delimiter, *p;
1015 old_locus = gfc_current_locus;
1017 gfc_gobble_whitespace ();
1019 c = gfc_next_char ();
1020 if (c == '\'' || c == '"')
1022 kind = gfc_default_character_kind;
1023 start_locus = gfc_current_locus;
1024 goto got_delim;
1027 if (gfc_wide_is_digit (c))
1029 kind = 0;
1031 while (gfc_wide_is_digit (c))
1033 kind = kind * 10 + c - '0';
1034 if (kind > 9999999)
1035 goto no_match;
1036 c = gfc_next_char ();
1040 else
1042 gfc_current_locus = old_locus;
1044 m = match_charkind_name (name);
1045 if (m != MATCH_YES)
1046 goto no_match;
1048 if (gfc_find_symbol (name, NULL, 1, &sym)
1049 || sym == NULL
1050 || sym->attr.flavor != FL_PARAMETER)
1051 goto no_match;
1053 kind = -1;
1054 c = gfc_next_char ();
1057 if (c == ' ')
1059 gfc_gobble_whitespace ();
1060 c = gfc_next_char ();
1063 if (c != '_')
1064 goto no_match;
1066 gfc_gobble_whitespace ();
1068 c = gfc_next_char ();
1069 if (c != '\'' && c != '"')
1070 goto no_match;
1072 start_locus = gfc_current_locus;
1074 if (kind == -1)
1076 q = gfc_extract_int (sym->value, &kind);
1077 if (q != NULL)
1079 gfc_error (q);
1080 return MATCH_ERROR;
1082 gfc_set_sym_referenced (sym);
1085 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1087 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1088 return MATCH_ERROR;
1091 got_delim:
1092 /* Scan the string into a block of memory by first figuring out how
1093 long it is, allocating the structure, then re-reading it. This
1094 isn't particularly efficient, but string constants aren't that
1095 common in most code. TODO: Use obstacks? */
1097 delimiter = c;
1098 length = 0;
1100 for (;;)
1102 c = next_string_char (delimiter, &ret);
1103 if (ret == -1)
1104 break;
1105 if (ret == -2)
1107 gfc_current_locus = start_locus;
1108 gfc_error ("Unterminated character constant beginning at %C");
1109 return MATCH_ERROR;
1112 length++;
1115 /* Peek at the next character to see if it is a b, o, z, or x for the
1116 postfixed BOZ literal constants. */
1117 peek = gfc_peek_ascii_char ();
1118 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1119 goto no_match;
1121 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1123 gfc_current_locus = start_locus;
1125 /* We disable the warning for the following loop as the warning has already
1126 been printed in the loop above. */
1127 save_warn_ampersand = warn_ampersand;
1128 warn_ampersand = false;
1130 p = e->value.character.string;
1131 for (i = 0; i < length; i++)
1133 c = next_string_char (delimiter, &ret);
1135 if (!gfc_check_character_range (c, kind))
1137 gfc_free_expr (e);
1138 gfc_error ("Character %qs in string at %C is not representable "
1139 "in character kind %d", gfc_print_wide_char (c), kind);
1140 return MATCH_ERROR;
1143 *p++ = c;
1146 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1147 warn_ampersand = save_warn_ampersand;
1149 next_string_char (delimiter, &ret);
1150 if (ret != -1)
1151 gfc_internal_error ("match_string_constant(): Delimiter not found");
1153 if (match_substring (NULL, 0, &e->ref, false) != MATCH_NO)
1154 e->expr_type = EXPR_SUBSTRING;
1156 *result = e;
1158 return MATCH_YES;
1160 no_match:
1161 gfc_current_locus = old_locus;
1162 return MATCH_NO;
1166 /* Match a .true. or .false. Returns 1 if a .true. was found,
1167 0 if a .false. was found, and -1 otherwise. */
1168 static int
1169 match_logical_constant_string (void)
1171 locus orig_loc = gfc_current_locus;
1173 gfc_gobble_whitespace ();
1174 if (gfc_next_ascii_char () == '.')
1176 char ch = gfc_next_ascii_char ();
1177 if (ch == 'f')
1179 if (gfc_next_ascii_char () == 'a'
1180 && gfc_next_ascii_char () == 'l'
1181 && gfc_next_ascii_char () == 's'
1182 && gfc_next_ascii_char () == 'e'
1183 && gfc_next_ascii_char () == '.')
1184 /* Matched ".false.". */
1185 return 0;
1187 else if (ch == 't')
1189 if (gfc_next_ascii_char () == 'r'
1190 && gfc_next_ascii_char () == 'u'
1191 && gfc_next_ascii_char () == 'e'
1192 && gfc_next_ascii_char () == '.')
1193 /* Matched ".true.". */
1194 return 1;
1197 gfc_current_locus = orig_loc;
1198 return -1;
1201 /* Match a .true. or .false. */
1203 static match
1204 match_logical_constant (gfc_expr **result)
1206 gfc_expr *e;
1207 int i, kind, is_iso_c;
1209 i = match_logical_constant_string ();
1210 if (i == -1)
1211 return MATCH_NO;
1213 kind = get_kind (&is_iso_c);
1214 if (kind == -1)
1215 return MATCH_ERROR;
1216 if (kind == -2)
1217 kind = gfc_default_logical_kind;
1219 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1221 gfc_error ("Bad kind for logical constant at %C");
1222 return MATCH_ERROR;
1225 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1226 e->ts.is_c_interop = is_iso_c;
1228 *result = e;
1229 return MATCH_YES;
1233 /* Match a real or imaginary part of a complex constant that is a
1234 symbolic constant. */
1236 static match
1237 match_sym_complex_part (gfc_expr **result)
1239 char name[GFC_MAX_SYMBOL_LEN + 1];
1240 gfc_symbol *sym;
1241 gfc_expr *e;
1242 match m;
1244 m = gfc_match_name (name);
1245 if (m != MATCH_YES)
1246 return m;
1248 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1249 return MATCH_NO;
1251 if (sym->attr.flavor != FL_PARAMETER)
1253 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1254 return MATCH_ERROR;
1257 if (!sym->value)
1258 goto error;
1260 if (!gfc_numeric_ts (&sym->value->ts))
1262 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1263 return MATCH_ERROR;
1266 if (sym->value->rank != 0)
1268 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1269 return MATCH_ERROR;
1272 if (!gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1273 "complex constant at %C"))
1274 return MATCH_ERROR;
1276 switch (sym->value->ts.type)
1278 case BT_REAL:
1279 e = gfc_copy_expr (sym->value);
1280 break;
1282 case BT_COMPLEX:
1283 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1284 if (e == NULL)
1285 goto error;
1286 break;
1288 case BT_INTEGER:
1289 e = gfc_int2real (sym->value, gfc_default_real_kind);
1290 if (e == NULL)
1291 goto error;
1292 break;
1294 default:
1295 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1298 *result = e; /* e is a scalar, real, constant expression. */
1299 return MATCH_YES;
1301 error:
1302 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1303 return MATCH_ERROR;
1307 /* Match a real or imaginary part of a complex number. */
1309 static match
1310 match_complex_part (gfc_expr **result)
1312 match m;
1314 m = match_sym_complex_part (result);
1315 if (m != MATCH_NO)
1316 return m;
1318 m = match_real_constant (result, 1);
1319 if (m != MATCH_NO)
1320 return m;
1322 return match_integer_constant (result, 1);
1326 /* Try to match a complex constant. */
1328 static match
1329 match_complex_constant (gfc_expr **result)
1331 gfc_expr *e, *real, *imag;
1332 gfc_error_buffer old_error;
1333 gfc_typespec target;
1334 locus old_loc;
1335 int kind;
1336 match m;
1338 old_loc = gfc_current_locus;
1339 real = imag = e = NULL;
1341 m = gfc_match_char ('(');
1342 if (m != MATCH_YES)
1343 return m;
1345 gfc_push_error (&old_error);
1347 m = match_complex_part (&real);
1348 if (m == MATCH_NO)
1350 gfc_free_error (&old_error);
1351 goto cleanup;
1354 if (gfc_match_char (',') == MATCH_NO)
1356 /* It is possible that gfc_int2real issued a warning when
1357 converting an integer to real. Throw this away here. */
1359 gfc_clear_warning ();
1360 gfc_pop_error (&old_error);
1361 m = MATCH_NO;
1362 goto cleanup;
1365 /* If m is error, then something was wrong with the real part and we
1366 assume we have a complex constant because we've seen the ','. An
1367 ambiguous case here is the start of an iterator list of some
1368 sort. These sort of lists are matched prior to coming here. */
1370 if (m == MATCH_ERROR)
1372 gfc_free_error (&old_error);
1373 goto cleanup;
1375 gfc_pop_error (&old_error);
1377 m = match_complex_part (&imag);
1378 if (m == MATCH_NO)
1379 goto syntax;
1380 if (m == MATCH_ERROR)
1381 goto cleanup;
1383 m = gfc_match_char (')');
1384 if (m == MATCH_NO)
1386 /* Give the matcher for implied do-loops a chance to run. This
1387 yields a much saner error message for (/ (i, 4=i, 6) /). */
1388 if (gfc_peek_ascii_char () == '=')
1390 m = MATCH_ERROR;
1391 goto cleanup;
1393 else
1394 goto syntax;
1397 if (m == MATCH_ERROR)
1398 goto cleanup;
1400 /* Decide on the kind of this complex number. */
1401 if (real->ts.type == BT_REAL)
1403 if (imag->ts.type == BT_REAL)
1404 kind = gfc_kind_max (real, imag);
1405 else
1406 kind = real->ts.kind;
1408 else
1410 if (imag->ts.type == BT_REAL)
1411 kind = imag->ts.kind;
1412 else
1413 kind = gfc_default_real_kind;
1415 gfc_clear_ts (&target);
1416 target.type = BT_REAL;
1417 target.kind = kind;
1419 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1420 gfc_convert_type (real, &target, 2);
1421 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1422 gfc_convert_type (imag, &target, 2);
1424 e = gfc_convert_complex (real, imag, kind);
1425 e->where = gfc_current_locus;
1427 gfc_free_expr (real);
1428 gfc_free_expr (imag);
1430 *result = e;
1431 return MATCH_YES;
1433 syntax:
1434 gfc_error ("Syntax error in COMPLEX constant at %C");
1435 m = MATCH_ERROR;
1437 cleanup:
1438 gfc_free_expr (e);
1439 gfc_free_expr (real);
1440 gfc_free_expr (imag);
1441 gfc_current_locus = old_loc;
1443 return m;
1447 /* Match constants in any of several forms. Returns nonzero for a
1448 match, zero for no match. */
1450 match
1451 gfc_match_literal_constant (gfc_expr **result, int signflag)
1453 match m;
1455 m = match_complex_constant (result);
1456 if (m != MATCH_NO)
1457 return m;
1459 m = match_string_constant (result);
1460 if (m != MATCH_NO)
1461 return m;
1463 m = match_boz_constant (result);
1464 if (m != MATCH_NO)
1465 return m;
1467 m = match_real_constant (result, signflag);
1468 if (m != MATCH_NO)
1469 return m;
1471 m = match_hollerith_constant (result);
1472 if (m != MATCH_NO)
1473 return m;
1475 m = match_integer_constant (result, signflag);
1476 if (m != MATCH_NO)
1477 return m;
1479 m = match_logical_constant (result);
1480 if (m != MATCH_NO)
1481 return m;
1483 return MATCH_NO;
1487 /* This checks if a symbol is the return value of an encompassing function.
1488 Function nesting can be maximally two levels deep, but we may have
1489 additional local namespaces like BLOCK etc. */
1491 bool
1492 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1494 if (!sym->attr.function || (sym->result != sym))
1495 return false;
1496 while (ns)
1498 if (ns->proc_name == sym)
1499 return true;
1500 ns = ns->parent;
1502 return false;
1506 /* Match a single actual argument value. An actual argument is
1507 usually an expression, but can also be a procedure name. If the
1508 argument is a single name, it is not always possible to tell
1509 whether the name is a dummy procedure or not. We treat these cases
1510 by creating an argument that looks like a dummy procedure and
1511 fixing things later during resolution. */
1513 static match
1514 match_actual_arg (gfc_expr **result)
1516 char name[GFC_MAX_SYMBOL_LEN + 1];
1517 gfc_symtree *symtree;
1518 locus where, w;
1519 gfc_expr *e;
1520 char c;
1522 gfc_gobble_whitespace ();
1523 where = gfc_current_locus;
1525 switch (gfc_match_name (name))
1527 case MATCH_ERROR:
1528 return MATCH_ERROR;
1530 case MATCH_NO:
1531 break;
1533 case MATCH_YES:
1534 w = gfc_current_locus;
1535 gfc_gobble_whitespace ();
1536 c = gfc_next_ascii_char ();
1537 gfc_current_locus = w;
1539 if (c != ',' && c != ')')
1540 break;
1542 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1543 break;
1544 /* Handle error elsewhere. */
1546 /* Eliminate a couple of common cases where we know we don't
1547 have a function argument. */
1548 if (symtree == NULL)
1550 gfc_get_sym_tree (name, NULL, &symtree, false);
1551 gfc_set_sym_referenced (symtree->n.sym);
1553 else
1555 gfc_symbol *sym;
1557 sym = symtree->n.sym;
1558 gfc_set_sym_referenced (sym);
1559 if (sym->attr.flavor == FL_NAMELIST)
1561 gfc_error ("Namelist '%s' can not be an argument at %L",
1562 sym->name, &where);
1563 break;
1565 if (sym->attr.flavor != FL_PROCEDURE
1566 && sym->attr.flavor != FL_UNKNOWN)
1567 break;
1569 if (sym->attr.in_common && !sym->attr.proc_pointer)
1571 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE,
1572 sym->name, &sym->declared_at))
1573 return MATCH_ERROR;
1574 break;
1577 /* If the symbol is a function with itself as the result and
1578 is being defined, then we have a variable. */
1579 if (sym->attr.function && sym->result == sym)
1581 if (gfc_is_function_return_value (sym, gfc_current_ns))
1582 break;
1584 if (sym->attr.entry
1585 && (sym->ns == gfc_current_ns
1586 || sym->ns == gfc_current_ns->parent))
1588 gfc_entry_list *el = NULL;
1590 for (el = sym->ns->entries; el; el = el->next)
1591 if (sym == el->sym)
1592 break;
1594 if (el)
1595 break;
1600 e = gfc_get_expr (); /* Leave it unknown for now */
1601 e->symtree = symtree;
1602 e->expr_type = EXPR_VARIABLE;
1603 e->ts.type = BT_PROCEDURE;
1604 e->where = where;
1606 *result = e;
1607 return MATCH_YES;
1610 gfc_current_locus = where;
1611 return gfc_match_expr (result);
1615 /* Match a keyword argument. */
1617 static match
1618 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1620 char name[GFC_MAX_SYMBOL_LEN + 1];
1621 gfc_actual_arglist *a;
1622 locus name_locus;
1623 match m;
1625 name_locus = gfc_current_locus;
1626 m = gfc_match_name (name);
1628 if (m != MATCH_YES)
1629 goto cleanup;
1630 if (gfc_match_char ('=') != MATCH_YES)
1632 m = MATCH_NO;
1633 goto cleanup;
1636 m = match_actual_arg (&actual->expr);
1637 if (m != MATCH_YES)
1638 goto cleanup;
1640 /* Make sure this name has not appeared yet. */
1642 if (name[0] != '\0')
1644 for (a = base; a; a = a->next)
1645 if (a->name != NULL && strcmp (a->name, name) == 0)
1647 gfc_error ("Keyword %qs at %C has already appeared in the "
1648 "current argument list", name);
1649 return MATCH_ERROR;
1653 actual->name = gfc_get_string (name);
1654 return MATCH_YES;
1656 cleanup:
1657 gfc_current_locus = name_locus;
1658 return m;
1662 /* Match an argument list function, such as %VAL. */
1664 static match
1665 match_arg_list_function (gfc_actual_arglist *result)
1667 char name[GFC_MAX_SYMBOL_LEN + 1];
1668 locus old_locus;
1669 match m;
1671 old_locus = gfc_current_locus;
1673 if (gfc_match_char ('%') != MATCH_YES)
1675 m = MATCH_NO;
1676 goto cleanup;
1679 m = gfc_match ("%n (", name);
1680 if (m != MATCH_YES)
1681 goto cleanup;
1683 if (name[0] != '\0')
1685 switch (name[0])
1687 case 'l':
1688 if (strncmp (name, "loc", 3) == 0)
1690 result->name = "%LOC";
1691 break;
1693 /* FALLTHRU */
1694 case 'r':
1695 if (strncmp (name, "ref", 3) == 0)
1697 result->name = "%REF";
1698 break;
1700 /* FALLTHRU */
1701 case 'v':
1702 if (strncmp (name, "val", 3) == 0)
1704 result->name = "%VAL";
1705 break;
1707 /* FALLTHRU */
1708 default:
1709 m = MATCH_ERROR;
1710 goto cleanup;
1714 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C"))
1716 m = MATCH_ERROR;
1717 goto cleanup;
1720 m = match_actual_arg (&result->expr);
1721 if (m != MATCH_YES)
1722 goto cleanup;
1724 if (gfc_match_char (')') != MATCH_YES)
1726 m = MATCH_NO;
1727 goto cleanup;
1730 return MATCH_YES;
1732 cleanup:
1733 gfc_current_locus = old_locus;
1734 return m;
1738 /* Matches an actual argument list of a function or subroutine, from
1739 the opening parenthesis to the closing parenthesis. The argument
1740 list is assumed to allow keyword arguments because we don't know if
1741 the symbol associated with the procedure has an implicit interface
1742 or not. We make sure keywords are unique. If sub_flag is set,
1743 we're matching the argument list of a subroutine. */
1745 match
1746 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1748 gfc_actual_arglist *head, *tail;
1749 int seen_keyword;
1750 gfc_st_label *label;
1751 locus old_loc;
1752 match m;
1754 *argp = tail = NULL;
1755 old_loc = gfc_current_locus;
1757 seen_keyword = 0;
1759 if (gfc_match_char ('(') == MATCH_NO)
1760 return (sub_flag) ? MATCH_YES : MATCH_NO;
1762 if (gfc_match_char (')') == MATCH_YES)
1763 return MATCH_YES;
1764 head = NULL;
1766 matching_actual_arglist++;
1768 for (;;)
1770 if (head == NULL)
1771 head = tail = gfc_get_actual_arglist ();
1772 else
1774 tail->next = gfc_get_actual_arglist ();
1775 tail = tail->next;
1778 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1780 m = gfc_match_st_label (&label);
1781 if (m == MATCH_NO)
1782 gfc_error ("Expected alternate return label at %C");
1783 if (m != MATCH_YES)
1784 goto cleanup;
1786 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1787 "at %C"))
1788 goto cleanup;
1790 tail->label = label;
1791 goto next;
1794 /* After the first keyword argument is seen, the following
1795 arguments must also have keywords. */
1796 if (seen_keyword)
1798 m = match_keyword_arg (tail, head);
1800 if (m == MATCH_ERROR)
1801 goto cleanup;
1802 if (m == MATCH_NO)
1804 gfc_error ("Missing keyword name in actual argument list at %C");
1805 goto cleanup;
1809 else
1811 /* Try an argument list function, like %VAL. */
1812 m = match_arg_list_function (tail);
1813 if (m == MATCH_ERROR)
1814 goto cleanup;
1816 /* See if we have the first keyword argument. */
1817 if (m == MATCH_NO)
1819 m = match_keyword_arg (tail, head);
1820 if (m == MATCH_YES)
1821 seen_keyword = 1;
1822 if (m == MATCH_ERROR)
1823 goto cleanup;
1826 if (m == MATCH_NO)
1828 /* Try for a non-keyword argument. */
1829 m = match_actual_arg (&tail->expr);
1830 if (m == MATCH_ERROR)
1831 goto cleanup;
1832 if (m == MATCH_NO)
1833 goto syntax;
1838 next:
1839 if (gfc_match_char (')') == MATCH_YES)
1840 break;
1841 if (gfc_match_char (',') != MATCH_YES)
1842 goto syntax;
1845 *argp = head;
1846 matching_actual_arglist--;
1847 return MATCH_YES;
1849 syntax:
1850 gfc_error ("Syntax error in argument list at %C");
1852 cleanup:
1853 gfc_free_actual_arglist (head);
1854 gfc_current_locus = old_loc;
1855 matching_actual_arglist--;
1856 return MATCH_ERROR;
1860 /* Used by gfc_match_varspec() to extend the reference list by one
1861 element. */
1863 static gfc_ref *
1864 extend_ref (gfc_expr *primary, gfc_ref *tail)
1866 if (primary->ref == NULL)
1867 primary->ref = tail = gfc_get_ref ();
1868 else
1870 if (tail == NULL)
1871 gfc_internal_error ("extend_ref(): Bad tail");
1872 tail->next = gfc_get_ref ();
1873 tail = tail->next;
1876 return tail;
1880 /* Match any additional specifications associated with the current
1881 variable like member references or substrings. If equiv_flag is
1882 set we only match stuff that is allowed inside an EQUIVALENCE
1883 statement. sub_flag tells whether we expect a type-bound procedure found
1884 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1885 components, 'ppc_arg' determines whether the PPC may be called (with an
1886 argument list), or whether it may just be referred to as a pointer. */
1888 match
1889 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1890 bool ppc_arg)
1892 char name[GFC_MAX_SYMBOL_LEN + 1];
1893 gfc_ref *substring, *tail, *tmp;
1894 gfc_component *component;
1895 gfc_symbol *sym = primary->symtree->n.sym;
1896 match m;
1897 bool unknown;
1898 char sep;
1900 tail = NULL;
1902 gfc_gobble_whitespace ();
1904 if (gfc_peek_ascii_char () == '[')
1906 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1907 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1908 && CLASS_DATA (sym)->attr.dimension))
1910 gfc_error ("Array section designator, e.g. '(:)', is required "
1911 "besides the coarray designator '[...]' at %C");
1912 return MATCH_ERROR;
1914 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1915 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1916 && !CLASS_DATA (sym)->attr.codimension))
1918 gfc_error ("Coarray designator at %C but %qs is not a coarray",
1919 sym->name);
1920 return MATCH_ERROR;
1924 /* For associate names, we may not yet know whether they are arrays or not.
1925 Thus if we have one and parentheses follow, we have to assume that it
1926 actually is one for now. The final decision will be made at
1927 resolution time, of course. */
1928 if (sym->assoc && gfc_peek_ascii_char () == '('
1929 && !(sym->assoc->dangling && sym->assoc->st
1930 && sym->assoc->st->n.sym
1931 && sym->assoc->st->n.sym->attr.dimension == 0)
1932 && sym->ts.type != BT_CLASS)
1933 sym->attr.dimension = 1;
1935 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1936 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1937 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1938 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
1939 && !(gfc_matching_procptr_assignment
1940 && sym->attr.flavor == FL_PROCEDURE))
1941 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1942 && (CLASS_DATA (sym)->attr.dimension
1943 || CLASS_DATA (sym)->attr.codimension)))
1945 gfc_array_spec *as;
1947 tail = extend_ref (primary, tail);
1948 tail->type = REF_ARRAY;
1950 /* In EQUIVALENCE, we don't know yet whether we are seeing
1951 an array, character variable or array of character
1952 variables. We'll leave the decision till resolve time. */
1954 if (equiv_flag)
1955 as = NULL;
1956 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1957 as = CLASS_DATA (sym)->as;
1958 else
1959 as = sym->as;
1961 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1962 as ? as->corank : 0);
1963 if (m != MATCH_YES)
1964 return m;
1966 gfc_gobble_whitespace ();
1967 if (equiv_flag && gfc_peek_ascii_char () == '(')
1969 tail = extend_ref (primary, tail);
1970 tail->type = REF_ARRAY;
1972 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1973 if (m != MATCH_YES)
1974 return m;
1978 primary->ts = sym->ts;
1980 if (equiv_flag)
1981 return MATCH_YES;
1983 /* With DEC extensions, member separator may be '.' or '%'. */
1984 sep = gfc_peek_ascii_char ();
1985 m = gfc_match_member_sep (sym);
1986 if (m == MATCH_ERROR)
1987 return MATCH_ERROR;
1989 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES
1990 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1991 gfc_set_default_type (sym, 0, sym->ns);
1993 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES)
1995 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name);
1996 return MATCH_ERROR;
1998 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1999 && m == MATCH_YES)
2001 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C",
2002 sep, sym->name);
2003 return MATCH_ERROR;
2006 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2007 || m != MATCH_YES)
2008 goto check_substring;
2010 sym = sym->ts.u.derived;
2012 for (;;)
2014 bool t;
2015 gfc_symtree *tbp;
2017 m = gfc_match_name (name);
2018 if (m == MATCH_NO)
2019 gfc_error ("Expected structure component name at %C");
2020 if (m != MATCH_YES)
2021 return MATCH_ERROR;
2023 if (sym->f2k_derived)
2024 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
2025 else
2026 tbp = NULL;
2028 if (tbp)
2030 gfc_symbol* tbp_sym;
2032 if (!t)
2033 return MATCH_ERROR;
2035 gcc_assert (!tail || !tail->next);
2037 if (!(primary->expr_type == EXPR_VARIABLE
2038 || (primary->expr_type == EXPR_STRUCTURE
2039 && primary->symtree && primary->symtree->n.sym
2040 && primary->symtree->n.sym->attr.flavor)))
2041 return MATCH_ERROR;
2043 if (tbp->n.tb->is_generic)
2044 tbp_sym = NULL;
2045 else
2046 tbp_sym = tbp->n.tb->u.specific->n.sym;
2048 primary->expr_type = EXPR_COMPCALL;
2049 primary->value.compcall.tbp = tbp->n.tb;
2050 primary->value.compcall.name = tbp->name;
2051 primary->value.compcall.ignore_pass = 0;
2052 primary->value.compcall.assign = 0;
2053 primary->value.compcall.base_object = NULL;
2054 gcc_assert (primary->symtree->n.sym->attr.referenced);
2055 if (tbp_sym)
2056 primary->ts = tbp_sym->ts;
2057 else
2058 gfc_clear_ts (&primary->ts);
2060 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
2061 &primary->value.compcall.actual);
2062 if (m == MATCH_ERROR)
2063 return MATCH_ERROR;
2064 if (m == MATCH_NO)
2066 if (sub_flag)
2067 primary->value.compcall.actual = NULL;
2068 else
2070 gfc_error ("Expected argument list at %C");
2071 return MATCH_ERROR;
2075 break;
2078 component = gfc_find_component (sym, name, false, false, &tmp);
2079 if (component == NULL)
2080 return MATCH_ERROR;
2082 /* Extend the reference chain determined by gfc_find_component. */
2083 if (primary->ref == NULL)
2084 primary->ref = tmp;
2085 else
2087 /* Set by the for loop below for the last component ref. */
2088 gcc_assert (tail != NULL);
2089 tail->next = tmp;
2092 /* The reference chain may be longer than one hop for union
2093 subcomponents; find the new tail. */
2094 for (tail = tmp; tail->next; tail = tail->next)
2097 primary->ts = component->ts;
2099 if (component->attr.proc_pointer && ppc_arg)
2101 /* Procedure pointer component call: Look for argument list. */
2102 m = gfc_match_actual_arglist (sub_flag,
2103 &primary->value.compcall.actual);
2104 if (m == MATCH_ERROR)
2105 return MATCH_ERROR;
2107 if (m == MATCH_NO && !gfc_matching_ptr_assignment
2108 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
2110 gfc_error ("Procedure pointer component %qs requires an "
2111 "argument list at %C", component->name);
2112 return MATCH_ERROR;
2115 if (m == MATCH_YES)
2116 primary->expr_type = EXPR_PPC;
2118 break;
2121 if (component->as != NULL && !component->attr.proc_pointer)
2123 tail = extend_ref (primary, tail);
2124 tail->type = REF_ARRAY;
2126 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2127 component->as->corank);
2128 if (m != MATCH_YES)
2129 return m;
2131 else if (component->ts.type == BT_CLASS && component->attr.class_ok
2132 && CLASS_DATA (component)->as && !component->attr.proc_pointer)
2134 tail = extend_ref (primary, tail);
2135 tail->type = REF_ARRAY;
2137 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2138 equiv_flag,
2139 CLASS_DATA (component)->as->corank);
2140 if (m != MATCH_YES)
2141 return m;
2144 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2145 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES)
2146 break;
2148 sym = component->ts.u.derived;
2151 check_substring:
2152 unknown = false;
2153 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor))
2155 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2157 gfc_set_default_type (sym, 0, sym->ns);
2158 primary->ts = sym->ts;
2159 unknown = true;
2163 if (primary->ts.type == BT_CHARACTER)
2165 bool def = primary->ts.deferred == 1;
2166 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def))
2168 case MATCH_YES:
2169 if (tail == NULL)
2170 primary->ref = substring;
2171 else
2172 tail->next = substring;
2174 if (primary->expr_type == EXPR_CONSTANT)
2175 primary->expr_type = EXPR_SUBSTRING;
2177 if (substring)
2178 primary->ts.u.cl = NULL;
2180 break;
2182 case MATCH_NO:
2183 if (unknown)
2185 gfc_clear_ts (&primary->ts);
2186 gfc_clear_ts (&sym->ts);
2188 break;
2190 case MATCH_ERROR:
2191 return MATCH_ERROR;
2195 /* F2008, C727. */
2196 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2198 gfc_error ("Coindexed procedure-pointer component at %C");
2199 return MATCH_ERROR;
2202 return MATCH_YES;
2206 /* Given an expression that is a variable, figure out what the
2207 ultimate variable's type and attribute is, traversing the reference
2208 structures if necessary.
2210 This subroutine is trickier than it looks. We start at the base
2211 symbol and store the attribute. Component references load a
2212 completely new attribute.
2214 A couple of rules come into play. Subobjects of targets are always
2215 targets themselves. If we see a component that goes through a
2216 pointer, then the expression must also be a target, since the
2217 pointer is associated with something (if it isn't core will soon be
2218 dumped). If we see a full part or section of an array, the
2219 expression is also an array.
2221 We can have at most one full array reference. */
2223 symbol_attribute
2224 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2226 int dimension, codimension, pointer, allocatable, target;
2227 symbol_attribute attr;
2228 gfc_ref *ref;
2229 gfc_symbol *sym;
2230 gfc_component *comp;
2232 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2233 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2235 sym = expr->symtree->n.sym;
2236 attr = sym->attr;
2238 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2240 dimension = CLASS_DATA (sym)->attr.dimension;
2241 codimension = CLASS_DATA (sym)->attr.codimension;
2242 pointer = CLASS_DATA (sym)->attr.class_pointer;
2243 allocatable = CLASS_DATA (sym)->attr.allocatable;
2245 else
2247 dimension = attr.dimension;
2248 codimension = attr.codimension;
2249 pointer = attr.pointer;
2250 allocatable = attr.allocatable;
2253 target = attr.target;
2254 if (pointer || attr.proc_pointer)
2255 target = 1;
2257 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2258 *ts = sym->ts;
2260 for (ref = expr->ref; ref; ref = ref->next)
2261 switch (ref->type)
2263 case REF_ARRAY:
2265 switch (ref->u.ar.type)
2267 case AR_FULL:
2268 dimension = 1;
2269 break;
2271 case AR_SECTION:
2272 allocatable = pointer = 0;
2273 dimension = 1;
2274 break;
2276 case AR_ELEMENT:
2277 /* Handle coarrays. */
2278 if (ref->u.ar.dimen > 0)
2279 allocatable = pointer = 0;
2280 break;
2282 case AR_UNKNOWN:
2283 /* If any of start, end or stride is not integer, there will
2284 already have been an error issued. */
2285 int errors;
2286 gfc_get_errors (NULL, &errors);
2287 if (errors == 0)
2288 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2291 break;
2293 case REF_COMPONENT:
2294 comp = ref->u.c.component;
2295 attr = comp->attr;
2296 if (ts != NULL)
2298 *ts = comp->ts;
2299 /* Don't set the string length if a substring reference
2300 follows. */
2301 if (ts->type == BT_CHARACTER
2302 && ref->next && ref->next->type == REF_SUBSTRING)
2303 ts->u.cl = NULL;
2306 if (comp->ts.type == BT_CLASS)
2308 codimension = CLASS_DATA (comp)->attr.codimension;
2309 pointer = CLASS_DATA (comp)->attr.class_pointer;
2310 allocatable = CLASS_DATA (comp)->attr.allocatable;
2312 else
2314 codimension = comp->attr.codimension;
2315 pointer = comp->attr.pointer;
2316 allocatable = comp->attr.allocatable;
2318 if (pointer || attr.proc_pointer)
2319 target = 1;
2321 break;
2323 case REF_SUBSTRING:
2324 allocatable = pointer = 0;
2325 break;
2328 attr.dimension = dimension;
2329 attr.codimension = codimension;
2330 attr.pointer = pointer;
2331 attr.allocatable = allocatable;
2332 attr.target = target;
2333 attr.save = sym->attr.save;
2335 return attr;
2339 /* Return the attribute from a general expression. */
2341 symbol_attribute
2342 gfc_expr_attr (gfc_expr *e)
2344 symbol_attribute attr;
2346 switch (e->expr_type)
2348 case EXPR_VARIABLE:
2349 attr = gfc_variable_attr (e, NULL);
2350 break;
2352 case EXPR_FUNCTION:
2353 gfc_clear_attr (&attr);
2355 if (e->value.function.esym && e->value.function.esym->result)
2357 gfc_symbol *sym = e->value.function.esym->result;
2358 attr = sym->attr;
2359 if (sym->ts.type == BT_CLASS)
2361 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2362 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2363 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2366 else if (e->value.function.isym
2367 && e->value.function.isym->transformational
2368 && e->ts.type == BT_CLASS)
2369 attr = CLASS_DATA (e)->attr;
2370 else
2371 attr = gfc_variable_attr (e, NULL);
2373 /* TODO: NULL() returns pointers. May have to take care of this
2374 here. */
2376 break;
2378 default:
2379 gfc_clear_attr (&attr);
2380 break;
2383 return attr;
2387 /* Given an expression, figure out what the ultimate expression
2388 attribute is. This routine is similar to gfc_variable_attr with
2389 parts of gfc_expr_attr, but focuses more on the needs of
2390 coarrays. For coarrays a codimension attribute is kind of
2391 "infectious" being propagated once set and never cleared. */
2393 static symbol_attribute
2394 caf_variable_attr (gfc_expr *expr, bool in_allocate)
2396 int dimension, codimension, pointer, allocatable, target, coarray_comp,
2397 alloc_comp;
2398 symbol_attribute attr;
2399 gfc_ref *ref;
2400 gfc_symbol *sym;
2401 gfc_component *comp;
2403 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2404 gfc_internal_error ("gfc_caf_attr(): Expression isn't a variable");
2406 sym = expr->symtree->n.sym;
2407 gfc_clear_attr (&attr);
2409 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2411 dimension = CLASS_DATA (sym)->attr.dimension;
2412 codimension = CLASS_DATA (sym)->attr.codimension;
2413 pointer = CLASS_DATA (sym)->attr.class_pointer;
2414 allocatable = CLASS_DATA (sym)->attr.allocatable;
2415 coarray_comp = CLASS_DATA (sym)->attr.coarray_comp;
2416 alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2418 else
2420 dimension = sym->attr.dimension;
2421 codimension = sym->attr.codimension;
2422 pointer = sym->attr.pointer;
2423 allocatable = sym->attr.allocatable;
2424 coarray_comp = sym->attr.coarray_comp;
2425 alloc_comp = sym->ts.type == BT_DERIVED
2426 ? sym->ts.u.derived->attr.alloc_comp : 0;
2429 target = attr.target;
2430 if (pointer || attr.proc_pointer)
2431 target = 1;
2433 for (ref = expr->ref; ref; ref = ref->next)
2434 switch (ref->type)
2436 case REF_ARRAY:
2438 switch (ref->u.ar.type)
2440 case AR_FULL:
2441 case AR_SECTION:
2442 dimension = 1;
2443 break;
2445 case AR_ELEMENT:
2446 /* Handle coarrays. */
2447 if (ref->u.ar.dimen > 0 && !in_allocate)
2448 allocatable = pointer = 0;
2449 break;
2451 case AR_UNKNOWN:
2452 /* If any of start, end or stride is not integer, there will
2453 already have been an error issued. */
2454 int errors;
2455 gfc_get_errors (NULL, &errors);
2456 if (errors == 0)
2457 gfc_internal_error ("gfc_caf_attr(): Bad array reference");
2460 break;
2462 case REF_COMPONENT:
2463 comp = ref->u.c.component;
2465 if (comp->ts.type == BT_CLASS)
2467 codimension |= CLASS_DATA (comp)->attr.codimension;
2468 pointer = CLASS_DATA (comp)->attr.class_pointer;
2469 allocatable = CLASS_DATA (comp)->attr.allocatable;
2470 coarray_comp |= CLASS_DATA (comp)->attr.coarray_comp;
2472 else
2474 codimension |= comp->attr.codimension;
2475 pointer = comp->attr.pointer;
2476 allocatable = comp->attr.allocatable;
2477 coarray_comp |= comp->attr.coarray_comp;
2480 if (pointer || attr.proc_pointer)
2481 target = 1;
2483 break;
2485 case REF_SUBSTRING:
2486 allocatable = pointer = 0;
2487 break;
2490 attr.dimension = dimension;
2491 attr.codimension = codimension;
2492 attr.pointer = pointer;
2493 attr.allocatable = allocatable;
2494 attr.target = target;
2495 attr.save = sym->attr.save;
2496 attr.coarray_comp = coarray_comp;
2497 attr.alloc_comp = alloc_comp;
2499 return attr;
2503 symbol_attribute
2504 gfc_caf_attr (gfc_expr *e, bool in_allocate)
2506 symbol_attribute attr;
2508 switch (e->expr_type)
2510 case EXPR_VARIABLE:
2511 attr = caf_variable_attr (e, in_allocate);
2512 break;
2514 case EXPR_FUNCTION:
2515 gfc_clear_attr (&attr);
2517 if (e->value.function.esym && e->value.function.esym->result)
2519 gfc_symbol *sym = e->value.function.esym->result;
2520 attr = sym->attr;
2521 if (sym->ts.type == BT_CLASS)
2523 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2524 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2525 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2526 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2529 else if (e->symtree)
2530 attr = caf_variable_attr (e, in_allocate);
2531 else
2532 gfc_clear_attr (&attr);
2533 break;
2535 default:
2536 gfc_clear_attr (&attr);
2537 break;
2540 return attr;
2544 /* Match a structure constructor. The initial symbol has already been
2545 seen. */
2547 typedef struct gfc_structure_ctor_component
2549 char* name;
2550 gfc_expr* val;
2551 locus where;
2552 struct gfc_structure_ctor_component* next;
2554 gfc_structure_ctor_component;
2556 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2558 static void
2559 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2561 free (comp->name);
2562 gfc_free_expr (comp->val);
2563 free (comp);
2567 /* Translate the component list into the actual constructor by sorting it in
2568 the order required; this also checks along the way that each and every
2569 component actually has an initializer and handles default initializers
2570 for components without explicit value given. */
2571 static bool
2572 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2573 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2575 gfc_structure_ctor_component *comp_iter;
2576 gfc_component *comp;
2578 for (comp = sym->components; comp; comp = comp->next)
2580 gfc_structure_ctor_component **next_ptr;
2581 gfc_expr *value = NULL;
2583 /* Try to find the initializer for the current component by name. */
2584 next_ptr = comp_head;
2585 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2587 if (!strcmp (comp_iter->name, comp->name))
2588 break;
2589 next_ptr = &comp_iter->next;
2592 /* If an extension, try building the parent derived type by building
2593 a value expression for the parent derived type and calling self. */
2594 if (!comp_iter && comp == sym->components && sym->attr.extension)
2596 value = gfc_get_structure_constructor_expr (comp->ts.type,
2597 comp->ts.kind,
2598 &gfc_current_locus);
2599 value->ts = comp->ts;
2601 if (!build_actual_constructor (comp_head,
2602 &value->value.constructor,
2603 comp->ts.u.derived))
2605 gfc_free_expr (value);
2606 return false;
2609 gfc_constructor_append_expr (ctor_head, value, NULL);
2610 continue;
2613 /* If it was not found, try the default initializer if there's any;
2614 otherwise, it's an error unless this is a deferred parameter. */
2615 if (!comp_iter)
2617 if (comp->initializer)
2619 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor "
2620 "with missing optional arguments at %C"))
2621 return false;
2622 value = gfc_copy_expr (comp->initializer);
2624 else if (comp->attr.allocatable
2625 || (comp->ts.type == BT_CLASS
2626 && CLASS_DATA (comp)->attr.allocatable))
2628 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for "
2629 "allocatable component '%qs' given in the "
2630 "structure constructor at %C", comp->name))
2631 return false;
2633 else if (!comp->attr.artificial)
2635 gfc_error ("No initializer for component %qs given in the"
2636 " structure constructor at %C!", comp->name);
2637 return false;
2640 else
2641 value = comp_iter->val;
2643 /* Add the value to the constructor chain built. */
2644 gfc_constructor_append_expr (ctor_head, value, NULL);
2646 /* Remove the entry from the component list. We don't want the expression
2647 value to be free'd, so set it to NULL. */
2648 if (comp_iter)
2650 *next_ptr = comp_iter->next;
2651 comp_iter->val = NULL;
2652 gfc_free_structure_ctor_component (comp_iter);
2655 return true;
2659 bool
2660 gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2661 gfc_actual_arglist **arglist,
2662 bool parent)
2664 gfc_actual_arglist *actual;
2665 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2666 gfc_constructor_base ctor_head = NULL;
2667 gfc_component *comp; /* Is set NULL when named component is first seen */
2668 const char* last_name = NULL;
2669 locus old_locus;
2670 gfc_expr *expr;
2672 expr = parent ? *cexpr : e;
2673 old_locus = gfc_current_locus;
2674 if (parent)
2675 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2676 else
2677 gfc_current_locus = expr->where;
2679 comp_tail = comp_head = NULL;
2681 if (!parent && sym->attr.abstract)
2683 gfc_error ("Can't construct ABSTRACT type %qs at %L",
2684 sym->name, &expr->where);
2685 goto cleanup;
2688 comp = sym->components;
2689 actual = parent ? *arglist : expr->value.function.actual;
2690 for ( ; actual; )
2692 gfc_component *this_comp = NULL;
2694 if (!comp_head)
2695 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2696 else
2698 comp_tail->next = gfc_get_structure_ctor_component ();
2699 comp_tail = comp_tail->next;
2701 if (actual->name)
2703 if (!gfc_notify_std (GFC_STD_F2003, "Structure"
2704 " constructor with named arguments at %C"))
2705 goto cleanup;
2707 comp_tail->name = xstrdup (actual->name);
2708 last_name = comp_tail->name;
2709 comp = NULL;
2711 else
2713 /* Components without name are not allowed after the first named
2714 component initializer! */
2715 if (!comp || comp->attr.artificial)
2717 if (last_name)
2718 gfc_error ("Component initializer without name after component"
2719 " named %s at %L!", last_name,
2720 actual->expr ? &actual->expr->where
2721 : &gfc_current_locus);
2722 else
2723 gfc_error ("Too many components in structure constructor at "
2724 "%L!", actual->expr ? &actual->expr->where
2725 : &gfc_current_locus);
2726 goto cleanup;
2729 comp_tail->name = xstrdup (comp->name);
2732 /* Find the current component in the structure definition and check
2733 its access is not private. */
2734 if (comp)
2735 this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
2736 else
2738 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2739 false, false, NULL);
2740 comp = NULL; /* Reset needed! */
2743 /* Here we can check if a component name is given which does not
2744 correspond to any component of the defined structure. */
2745 if (!this_comp)
2746 goto cleanup;
2748 comp_tail->val = actual->expr;
2749 if (actual->expr != NULL)
2750 comp_tail->where = actual->expr->where;
2751 actual->expr = NULL;
2753 /* Check if this component is already given a value. */
2754 for (comp_iter = comp_head; comp_iter != comp_tail;
2755 comp_iter = comp_iter->next)
2757 gcc_assert (comp_iter);
2758 if (!strcmp (comp_iter->name, comp_tail->name))
2760 gfc_error ("Component %qs is initialized twice in the structure"
2761 " constructor at %L!", comp_tail->name,
2762 comp_tail->val ? &comp_tail->where
2763 : &gfc_current_locus);
2764 goto cleanup;
2768 /* F2008, R457/C725, for PURE C1283. */
2769 if (this_comp->attr.pointer && comp_tail->val
2770 && gfc_is_coindexed (comp_tail->val))
2772 gfc_error ("Coindexed expression to pointer component %qs in "
2773 "structure constructor at %L!", comp_tail->name,
2774 &comp_tail->where);
2775 goto cleanup;
2778 /* If not explicitly a parent constructor, gather up the components
2779 and build one. */
2780 if (comp && comp == sym->components
2781 && sym->attr.extension
2782 && comp_tail->val
2783 && (!gfc_bt_struct (comp_tail->val->ts.type)
2785 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2787 bool m;
2788 gfc_actual_arglist *arg_null = NULL;
2790 actual->expr = comp_tail->val;
2791 comp_tail->val = NULL;
2793 m = gfc_convert_to_structure_constructor (NULL,
2794 comp->ts.u.derived, &comp_tail->val,
2795 comp->ts.u.derived->attr.zero_comp
2796 ? &arg_null : &actual, true);
2797 if (!m)
2798 goto cleanup;
2800 if (comp->ts.u.derived->attr.zero_comp)
2802 comp = comp->next;
2803 continue;
2807 if (comp)
2808 comp = comp->next;
2809 if (parent && !comp)
2810 break;
2812 if (actual)
2813 actual = actual->next;
2816 if (!build_actual_constructor (&comp_head, &ctor_head, sym))
2817 goto cleanup;
2819 /* No component should be left, as this should have caused an error in the
2820 loop constructing the component-list (name that does not correspond to any
2821 component in the structure definition). */
2822 if (comp_head && sym->attr.extension)
2824 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2826 gfc_error ("component %qs at %L has already been set by a "
2827 "parent derived type constructor", comp_iter->name,
2828 &comp_iter->where);
2830 goto cleanup;
2832 else
2833 gcc_assert (!comp_head);
2835 if (parent)
2837 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2838 expr->ts.u.derived = sym;
2839 expr->value.constructor = ctor_head;
2840 *cexpr = expr;
2842 else
2844 expr->ts.u.derived = sym;
2845 expr->ts.kind = 0;
2846 expr->ts.type = BT_DERIVED;
2847 expr->value.constructor = ctor_head;
2848 expr->expr_type = EXPR_STRUCTURE;
2851 gfc_current_locus = old_locus;
2852 if (parent)
2853 *arglist = actual;
2854 return true;
2856 cleanup:
2857 gfc_current_locus = old_locus;
2859 for (comp_iter = comp_head; comp_iter; )
2861 gfc_structure_ctor_component *next = comp_iter->next;
2862 gfc_free_structure_ctor_component (comp_iter);
2863 comp_iter = next;
2865 gfc_constructor_free (ctor_head);
2867 return false;
2871 match
2872 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2874 match m;
2875 gfc_expr *e;
2876 gfc_symtree *symtree;
2878 gfc_get_ha_sym_tree (sym->name, &symtree);
2880 e = gfc_get_expr ();
2881 e->symtree = symtree;
2882 e->expr_type = EXPR_FUNCTION;
2884 gcc_assert (gfc_fl_struct (sym->attr.flavor)
2885 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2886 e->value.function.esym = sym;
2887 e->symtree->n.sym->attr.generic = 1;
2889 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2890 if (m != MATCH_YES)
2892 gfc_free_expr (e);
2893 return m;
2896 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false))
2898 gfc_free_expr (e);
2899 return MATCH_ERROR;
2902 /* If a structure constructor is in a DATA statement, then each entity
2903 in the structure constructor must be a constant. Try to reduce the
2904 expression here. */
2905 if (gfc_in_match_data ())
2906 gfc_reduce_init_expr (e);
2908 *result = e;
2909 return MATCH_YES;
2913 /* If the symbol is an implicit do loop index and implicitly typed,
2914 it should not be host associated. Provide a symtree from the
2915 current namespace. */
2916 static match
2917 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2919 if ((*sym)->attr.flavor == FL_VARIABLE
2920 && (*sym)->ns != gfc_current_ns
2921 && (*sym)->attr.implied_index
2922 && (*sym)->attr.implicit_type
2923 && !(*sym)->attr.use_assoc)
2925 int i;
2926 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2927 if (i)
2928 return MATCH_ERROR;
2929 *sym = (*st)->n.sym;
2931 return MATCH_YES;
2935 /* Procedure pointer as function result: Replace the function symbol by the
2936 auto-generated hidden result variable named "ppr@". */
2938 static bool
2939 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2941 /* Check for procedure pointer result variable. */
2942 if ((*sym)->attr.function && !(*sym)->attr.external
2943 && (*sym)->result && (*sym)->result != *sym
2944 && (*sym)->result->attr.proc_pointer
2945 && (*sym) == gfc_current_ns->proc_name
2946 && (*sym) == (*sym)->result->ns->proc_name
2947 && strcmp ("ppr@", (*sym)->result->name) == 0)
2949 /* Automatic replacement with "hidden" result variable. */
2950 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2951 *sym = (*sym)->result;
2952 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2953 return true;
2955 return false;
2959 /* Matches a variable name followed by anything that might follow it--
2960 array reference, argument list of a function, etc. */
2962 match
2963 gfc_match_rvalue (gfc_expr **result)
2965 gfc_actual_arglist *actual_arglist;
2966 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2967 gfc_state_data *st;
2968 gfc_symbol *sym;
2969 gfc_symtree *symtree;
2970 locus where, old_loc;
2971 gfc_expr *e;
2972 match m, m2;
2973 int i;
2974 gfc_typespec *ts;
2975 bool implicit_char;
2976 gfc_ref *ref;
2978 m = gfc_match ("%%loc");
2979 if (m == MATCH_YES)
2981 if (!gfc_notify_std (GFC_STD_LEGACY, "%%LOC() as an rvalue at %C"))
2982 return MATCH_ERROR;
2983 strncpy (name, "loc", 4);
2986 else
2988 m = gfc_match_name (name);
2989 if (m != MATCH_YES)
2990 return m;
2993 /* Check if the symbol exists. */
2994 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
2995 return MATCH_ERROR;
2997 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT
2998 type. For derived types we create a generic symbol which links to the
2999 derived type symbol; STRUCTUREs are simpler and must not conflict with
3000 variables. */
3001 if (!symtree)
3002 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree))
3003 return MATCH_ERROR;
3004 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3006 if (gfc_find_state (COMP_INTERFACE)
3007 && !gfc_current_ns->has_import_set)
3008 i = gfc_get_sym_tree (name, NULL, &symtree, false);
3009 else
3010 i = gfc_get_ha_sym_tree (name, &symtree);
3011 if (i)
3012 return MATCH_ERROR;
3016 sym = symtree->n.sym;
3017 e = NULL;
3018 where = gfc_current_locus;
3020 replace_hidden_procptr_result (&sym, &symtree);
3022 /* If this is an implicit do loop index and implicitly typed,
3023 it should not be host associated. */
3024 m = check_for_implicit_index (&symtree, &sym);
3025 if (m != MATCH_YES)
3026 return m;
3028 gfc_set_sym_referenced (sym);
3029 sym->attr.implied_index = 0;
3031 if (sym->attr.function && sym->result == sym)
3033 /* See if this is a directly recursive function call. */
3034 gfc_gobble_whitespace ();
3035 if (sym->attr.recursive
3036 && gfc_peek_ascii_char () == '('
3037 && gfc_current_ns->proc_name == sym
3038 && !sym->attr.dimension)
3040 gfc_error ("%qs at %C is the name of a recursive function "
3041 "and so refers to the result variable. Use an "
3042 "explicit RESULT variable for direct recursion "
3043 "(12.5.2.1)", sym->name);
3044 return MATCH_ERROR;
3047 if (gfc_is_function_return_value (sym, gfc_current_ns))
3048 goto variable;
3050 if (sym->attr.entry
3051 && (sym->ns == gfc_current_ns
3052 || sym->ns == gfc_current_ns->parent))
3054 gfc_entry_list *el = NULL;
3056 for (el = sym->ns->entries; el; el = el->next)
3057 if (sym == el->sym)
3058 goto variable;
3062 if (gfc_matching_procptr_assignment)
3063 goto procptr0;
3065 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
3066 goto function0;
3068 if (sym->attr.generic)
3069 goto generic_function;
3071 switch (sym->attr.flavor)
3073 case FL_VARIABLE:
3074 variable:
3075 e = gfc_get_expr ();
3077 e->expr_type = EXPR_VARIABLE;
3078 e->symtree = symtree;
3080 m = gfc_match_varspec (e, 0, false, true);
3081 break;
3083 case FL_PARAMETER:
3084 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
3085 end up here. Unfortunately, sym->value->expr_type is set to
3086 EXPR_CONSTANT, and so the if () branch would be followed without
3087 the !sym->as check. */
3088 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
3089 e = gfc_copy_expr (sym->value);
3090 else
3092 e = gfc_get_expr ();
3093 e->expr_type = EXPR_VARIABLE;
3096 e->symtree = symtree;
3097 m = gfc_match_varspec (e, 0, false, true);
3099 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
3100 break;
3102 /* Variable array references to derived type parameters cause
3103 all sorts of headaches in simplification. Treating such
3104 expressions as variable works just fine for all array
3105 references. */
3106 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
3108 for (ref = e->ref; ref; ref = ref->next)
3109 if (ref->type == REF_ARRAY)
3110 break;
3112 if (ref == NULL || ref->u.ar.type == AR_FULL)
3113 break;
3115 ref = e->ref;
3116 e->ref = NULL;
3117 gfc_free_expr (e);
3118 e = gfc_get_expr ();
3119 e->expr_type = EXPR_VARIABLE;
3120 e->symtree = symtree;
3121 e->ref = ref;
3124 break;
3126 case FL_STRUCT:
3127 case FL_DERIVED:
3128 sym = gfc_use_derived (sym);
3129 if (sym == NULL)
3130 m = MATCH_ERROR;
3131 else
3132 goto generic_function;
3133 break;
3135 /* If we're here, then the name is known to be the name of a
3136 procedure, yet it is not sure to be the name of a function. */
3137 case FL_PROCEDURE:
3139 /* Procedure Pointer Assignments. */
3140 procptr0:
3141 if (gfc_matching_procptr_assignment)
3143 gfc_gobble_whitespace ();
3144 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
3145 /* Parse functions returning a procptr. */
3146 goto function0;
3148 e = gfc_get_expr ();
3149 e->expr_type = EXPR_VARIABLE;
3150 e->symtree = symtree;
3151 m = gfc_match_varspec (e, 0, false, true);
3152 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
3153 && sym->ts.type == BT_UNKNOWN
3154 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
3156 m = MATCH_ERROR;
3157 break;
3159 break;
3162 if (sym->attr.subroutine)
3164 gfc_error ("Unexpected use of subroutine name %qs at %C",
3165 sym->name);
3166 m = MATCH_ERROR;
3167 break;
3170 /* At this point, the name has to be a non-statement function.
3171 If the name is the same as the current function being
3172 compiled, then we have a variable reference (to the function
3173 result) if the name is non-recursive. */
3175 st = gfc_enclosing_unit (NULL);
3177 if (st != NULL
3178 && st->state == COMP_FUNCTION
3179 && st->sym == sym
3180 && !sym->attr.recursive)
3182 e = gfc_get_expr ();
3183 e->symtree = symtree;
3184 e->expr_type = EXPR_VARIABLE;
3186 m = gfc_match_varspec (e, 0, false, true);
3187 break;
3190 /* Match a function reference. */
3191 function0:
3192 m = gfc_match_actual_arglist (0, &actual_arglist);
3193 if (m == MATCH_NO)
3195 if (sym->attr.proc == PROC_ST_FUNCTION)
3196 gfc_error ("Statement function %qs requires argument list at %C",
3197 sym->name);
3198 else
3199 gfc_error ("Function %qs requires an argument list at %C",
3200 sym->name);
3202 m = MATCH_ERROR;
3203 break;
3206 if (m != MATCH_YES)
3208 m = MATCH_ERROR;
3209 break;
3212 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
3213 sym = symtree->n.sym;
3215 replace_hidden_procptr_result (&sym, &symtree);
3217 e = gfc_get_expr ();
3218 e->symtree = symtree;
3219 e->expr_type = EXPR_FUNCTION;
3220 e->value.function.actual = actual_arglist;
3221 e->where = gfc_current_locus;
3223 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3224 && CLASS_DATA (sym)->as)
3225 e->rank = CLASS_DATA (sym)->as->rank;
3226 else if (sym->as != NULL)
3227 e->rank = sym->as->rank;
3229 if (!sym->attr.function
3230 && !gfc_add_function (&sym->attr, sym->name, NULL))
3232 m = MATCH_ERROR;
3233 break;
3236 /* Check here for the existence of at least one argument for the
3237 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
3238 argument(s) given will be checked in gfc_iso_c_func_interface,
3239 during resolution of the function call. */
3240 if (sym->attr.is_iso_c == 1
3241 && (sym->from_intmod == INTMOD_ISO_C_BINDING
3242 && (sym->intmod_sym_id == ISOCBINDING_LOC
3243 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
3244 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
3246 /* make sure we were given a param */
3247 if (actual_arglist == NULL)
3249 gfc_error ("Missing argument to %qs at %C", sym->name);
3250 m = MATCH_ERROR;
3251 break;
3255 if (sym->result == NULL)
3256 sym->result = sym;
3258 m = MATCH_YES;
3259 break;
3261 case FL_UNKNOWN:
3263 /* Special case for derived type variables that get their types
3264 via an IMPLICIT statement. This can't wait for the
3265 resolution phase. */
3267 old_loc = gfc_current_locus;
3268 if (gfc_match_member_sep (sym) == MATCH_YES
3269 && sym->ts.type == BT_UNKNOWN
3270 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
3271 gfc_set_default_type (sym, 0, sym->ns);
3272 gfc_current_locus = old_loc;
3274 /* If the symbol has a (co)dimension attribute, the expression is a
3275 variable. */
3277 if (sym->attr.dimension || sym->attr.codimension)
3279 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3281 m = MATCH_ERROR;
3282 break;
3285 e = gfc_get_expr ();
3286 e->symtree = symtree;
3287 e->expr_type = EXPR_VARIABLE;
3288 m = gfc_match_varspec (e, 0, false, true);
3289 break;
3292 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3293 && (CLASS_DATA (sym)->attr.dimension
3294 || CLASS_DATA (sym)->attr.codimension))
3296 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3298 m = MATCH_ERROR;
3299 break;
3302 e = gfc_get_expr ();
3303 e->symtree = symtree;
3304 e->expr_type = EXPR_VARIABLE;
3305 m = gfc_match_varspec (e, 0, false, true);
3306 break;
3309 /* Name is not an array, so we peek to see if a '(' implies a
3310 function call or a substring reference. Otherwise the
3311 variable is just a scalar. */
3313 gfc_gobble_whitespace ();
3314 if (gfc_peek_ascii_char () != '(')
3316 /* Assume a scalar variable */
3317 e = gfc_get_expr ();
3318 e->symtree = symtree;
3319 e->expr_type = EXPR_VARIABLE;
3321 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3323 m = MATCH_ERROR;
3324 break;
3327 /*FIXME:??? gfc_match_varspec does set this for us: */
3328 e->ts = sym->ts;
3329 m = gfc_match_varspec (e, 0, false, true);
3330 break;
3333 /* See if this is a function reference with a keyword argument
3334 as first argument. We do this because otherwise a spurious
3335 symbol would end up in the symbol table. */
3337 old_loc = gfc_current_locus;
3338 m2 = gfc_match (" ( %n =", argname);
3339 gfc_current_locus = old_loc;
3341 e = gfc_get_expr ();
3342 e->symtree = symtree;
3344 if (m2 != MATCH_YES)
3346 /* Try to figure out whether we're dealing with a character type.
3347 We're peeking ahead here, because we don't want to call
3348 match_substring if we're dealing with an implicitly typed
3349 non-character variable. */
3350 implicit_char = false;
3351 if (sym->ts.type == BT_UNKNOWN)
3353 ts = gfc_get_default_type (sym->name, NULL);
3354 if (ts->type == BT_CHARACTER)
3355 implicit_char = true;
3358 /* See if this could possibly be a substring reference of a name
3359 that we're not sure is a variable yet. */
3361 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3362 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES)
3365 e->expr_type = EXPR_VARIABLE;
3367 if (sym->attr.flavor != FL_VARIABLE
3368 && !gfc_add_flavor (&sym->attr, FL_VARIABLE,
3369 sym->name, NULL))
3371 m = MATCH_ERROR;
3372 break;
3375 if (sym->ts.type == BT_UNKNOWN
3376 && !gfc_set_default_type (sym, 1, NULL))
3378 m = MATCH_ERROR;
3379 break;
3382 e->ts = sym->ts;
3383 if (e->ref)
3384 e->ts.u.cl = NULL;
3385 m = MATCH_YES;
3386 break;
3390 /* Give up, assume we have a function. */
3392 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3393 sym = symtree->n.sym;
3394 e->expr_type = EXPR_FUNCTION;
3396 if (!sym->attr.function
3397 && !gfc_add_function (&sym->attr, sym->name, NULL))
3399 m = MATCH_ERROR;
3400 break;
3403 sym->result = sym;
3405 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3406 if (m == MATCH_NO)
3407 gfc_error ("Missing argument list in function %qs at %C", sym->name);
3409 if (m != MATCH_YES)
3411 m = MATCH_ERROR;
3412 break;
3415 /* If our new function returns a character, array or structure
3416 type, it might have subsequent references. */
3418 m = gfc_match_varspec (e, 0, false, true);
3419 if (m == MATCH_NO)
3420 m = MATCH_YES;
3422 break;
3424 generic_function:
3425 /* Look for symbol first; if not found, look for STRUCTURE type symbol
3426 specially. Creates a generic symbol for derived types. */
3427 gfc_find_sym_tree (name, NULL, 1, &symtree);
3428 if (!symtree)
3429 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree);
3430 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3431 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3433 e = gfc_get_expr ();
3434 e->symtree = symtree;
3435 e->expr_type = EXPR_FUNCTION;
3437 if (gfc_fl_struct (sym->attr.flavor))
3439 e->value.function.esym = sym;
3440 e->symtree->n.sym->attr.generic = 1;
3443 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3444 break;
3446 case FL_NAMELIST:
3447 m = MATCH_ERROR;
3448 break;
3450 default:
3451 gfc_error ("Symbol at %C is not appropriate for an expression");
3452 return MATCH_ERROR;
3455 if (m == MATCH_YES)
3457 e->where = where;
3458 *result = e;
3460 else
3461 gfc_free_expr (e);
3463 return m;
3467 /* Match a variable, i.e. something that can be assigned to. This
3468 starts as a symbol, can be a structure component or an array
3469 reference. It can be a function if the function doesn't have a
3470 separate RESULT variable. If the symbol has not been previously
3471 seen, we assume it is a variable.
3473 This function is called by two interface functions:
3474 gfc_match_variable, which has host_flag = 1, and
3475 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3476 match of the symbol to the local scope. */
3478 static match
3479 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3481 gfc_symbol *sym, *dt_sym;
3482 gfc_symtree *st;
3483 gfc_expr *expr;
3484 locus where, old_loc;
3485 match m;
3487 /* Since nothing has any business being an lvalue in a module
3488 specification block, an interface block or a contains section,
3489 we force the changed_symbols mechanism to work by setting
3490 host_flag to 0. This prevents valid symbols that have the name
3491 of keywords, such as 'end', being turned into variables by
3492 failed matching to assignments for, e.g., END INTERFACE. */
3493 if (gfc_current_state () == COMP_MODULE
3494 || gfc_current_state () == COMP_SUBMODULE
3495 || gfc_current_state () == COMP_INTERFACE
3496 || gfc_current_state () == COMP_CONTAINS)
3497 host_flag = 0;
3499 where = gfc_current_locus;
3500 m = gfc_match_sym_tree (&st, host_flag);
3501 if (m != MATCH_YES)
3502 return m;
3504 sym = st->n.sym;
3506 /* If this is an implicit do loop index and implicitly typed,
3507 it should not be host associated. */
3508 m = check_for_implicit_index (&st, &sym);
3509 if (m != MATCH_YES)
3510 return m;
3512 sym->attr.implied_index = 0;
3514 gfc_set_sym_referenced (sym);
3516 /* STRUCTUREs may share names with variables, but derived types may not. */
3517 if (sym->attr.flavor == FL_PROCEDURE && sym->generic
3518 && (dt_sym = gfc_find_dt_in_generic (sym)))
3520 if (dt_sym->attr.flavor == FL_DERIVED)
3521 gfc_error ("Derived type '%s' cannot be used as a variable at %C",
3522 sym->name);
3523 return MATCH_ERROR;
3526 switch (sym->attr.flavor)
3528 case FL_VARIABLE:
3529 /* Everything is alright. */
3530 break;
3532 case FL_UNKNOWN:
3534 sym_flavor flavor = FL_UNKNOWN;
3536 gfc_gobble_whitespace ();
3538 if (sym->attr.external || sym->attr.procedure
3539 || sym->attr.function || sym->attr.subroutine)
3540 flavor = FL_PROCEDURE;
3542 /* If it is not a procedure, is not typed and is host associated,
3543 we cannot give it a flavor yet. */
3544 else if (sym->ns == gfc_current_ns->parent
3545 && sym->ts.type == BT_UNKNOWN)
3546 break;
3548 /* These are definitive indicators that this is a variable. */
3549 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3550 || sym->attr.pointer || sym->as != NULL)
3551 flavor = FL_VARIABLE;
3553 if (flavor != FL_UNKNOWN
3554 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL))
3555 return MATCH_ERROR;
3557 break;
3559 case FL_PARAMETER:
3560 if (equiv_flag)
3562 gfc_error ("Named constant at %C in an EQUIVALENCE");
3563 return MATCH_ERROR;
3565 /* Otherwise this is checked for and an error given in the
3566 variable definition context checks. */
3567 break;
3569 case FL_PROCEDURE:
3570 /* Check for a nonrecursive function result variable. */
3571 if (sym->attr.function
3572 && !sym->attr.external
3573 && sym->result == sym
3574 && (gfc_is_function_return_value (sym, gfc_current_ns)
3575 || (sym->attr.entry
3576 && sym->ns == gfc_current_ns)
3577 || (sym->attr.entry
3578 && sym->ns == gfc_current_ns->parent)))
3580 /* If a function result is a derived type, then the derived
3581 type may still have to be resolved. */
3583 if (sym->ts.type == BT_DERIVED
3584 && gfc_use_derived (sym->ts.u.derived) == NULL)
3585 return MATCH_ERROR;
3586 break;
3589 if (sym->attr.proc_pointer
3590 || replace_hidden_procptr_result (&sym, &st))
3591 break;
3593 /* Fall through to error */
3594 gcc_fallthrough ();
3596 default:
3597 gfc_error ("%qs at %C is not a variable", sym->name);
3598 return MATCH_ERROR;
3601 /* Special case for derived type variables that get their types
3602 via an IMPLICIT statement. This can't wait for the
3603 resolution phase. */
3606 gfc_namespace * implicit_ns;
3608 if (gfc_current_ns->proc_name == sym)
3609 implicit_ns = gfc_current_ns;
3610 else
3611 implicit_ns = sym->ns;
3613 old_loc = gfc_current_locus;
3614 if (gfc_match_member_sep (sym) == MATCH_YES
3615 && sym->ts.type == BT_UNKNOWN
3616 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3617 gfc_set_default_type (sym, 0, implicit_ns);
3618 gfc_current_locus = old_loc;
3621 expr = gfc_get_expr ();
3623 expr->expr_type = EXPR_VARIABLE;
3624 expr->symtree = st;
3625 expr->ts = sym->ts;
3626 expr->where = where;
3628 /* Now see if we have to do more. */
3629 m = gfc_match_varspec (expr, equiv_flag, false, false);
3630 if (m != MATCH_YES)
3632 gfc_free_expr (expr);
3633 return m;
3636 *result = expr;
3637 return MATCH_YES;
3641 match
3642 gfc_match_variable (gfc_expr **result, int equiv_flag)
3644 return match_variable (result, equiv_flag, 1);
3648 match
3649 gfc_match_equiv_variable (gfc_expr **result)
3651 return match_variable (result, 1, 0);