Fix warning with -Wsign-compare -Wsystem-headers
[official-gcc.git] / gcc / fortran / primary.c
blob094f2101bbc553fb27f375eac8195e4e0a2a974c
1 /* Primary expression subroutines
2 Copyright (C) 2000-2018 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_charlen_int_kind, NULL, 1);
866 ref->u.ss.start = start;
867 if (end == NULL && cl)
868 end = gfc_copy_expr (cl->length);
869 ref->u.ss.end = end;
870 ref->u.ss.length = cl;
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 size_t length;
1010 int kind,save_warn_ampersand, ret;
1011 locus old_locus, start_locus;
1012 gfc_symbol *sym;
1013 gfc_expr *e;
1014 match m;
1015 gfc_char_t c, delimiter, *p;
1017 old_locus = gfc_current_locus;
1019 gfc_gobble_whitespace ();
1021 c = gfc_next_char ();
1022 if (c == '\'' || c == '"')
1024 kind = gfc_default_character_kind;
1025 start_locus = gfc_current_locus;
1026 goto got_delim;
1029 if (gfc_wide_is_digit (c))
1031 kind = 0;
1033 while (gfc_wide_is_digit (c))
1035 kind = kind * 10 + c - '0';
1036 if (kind > 9999999)
1037 goto no_match;
1038 c = gfc_next_char ();
1042 else
1044 gfc_current_locus = old_locus;
1046 m = match_charkind_name (name);
1047 if (m != MATCH_YES)
1048 goto no_match;
1050 if (gfc_find_symbol (name, NULL, 1, &sym)
1051 || sym == NULL
1052 || sym->attr.flavor != FL_PARAMETER)
1053 goto no_match;
1055 kind = -1;
1056 c = gfc_next_char ();
1059 if (c == ' ')
1061 gfc_gobble_whitespace ();
1062 c = gfc_next_char ();
1065 if (c != '_')
1066 goto no_match;
1068 gfc_gobble_whitespace ();
1070 c = gfc_next_char ();
1071 if (c != '\'' && c != '"')
1072 goto no_match;
1074 start_locus = gfc_current_locus;
1076 if (kind == -1)
1078 if (gfc_extract_int (sym->value, &kind, 1))
1079 return MATCH_ERROR;
1080 gfc_set_sym_referenced (sym);
1083 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1085 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1086 return MATCH_ERROR;
1089 got_delim:
1090 /* Scan the string into a block of memory by first figuring out how
1091 long it is, allocating the structure, then re-reading it. This
1092 isn't particularly efficient, but string constants aren't that
1093 common in most code. TODO: Use obstacks? */
1095 delimiter = c;
1096 length = 0;
1098 for (;;)
1100 c = next_string_char (delimiter, &ret);
1101 if (ret == -1)
1102 break;
1103 if (ret == -2)
1105 gfc_current_locus = start_locus;
1106 gfc_error ("Unterminated character constant beginning at %C");
1107 return MATCH_ERROR;
1110 length++;
1113 /* Peek at the next character to see if it is a b, o, z, or x for the
1114 postfixed BOZ literal constants. */
1115 peek = gfc_peek_ascii_char ();
1116 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1117 goto no_match;
1119 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1121 gfc_current_locus = start_locus;
1123 /* We disable the warning for the following loop as the warning has already
1124 been printed in the loop above. */
1125 save_warn_ampersand = warn_ampersand;
1126 warn_ampersand = false;
1128 p = e->value.character.string;
1129 for (size_t i = 0; i < length; i++)
1131 c = next_string_char (delimiter, &ret);
1133 if (!gfc_check_character_range (c, kind))
1135 gfc_free_expr (e);
1136 gfc_error ("Character %qs in string at %C is not representable "
1137 "in character kind %d", gfc_print_wide_char (c), kind);
1138 return MATCH_ERROR;
1141 *p++ = c;
1144 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1145 warn_ampersand = save_warn_ampersand;
1147 next_string_char (delimiter, &ret);
1148 if (ret != -1)
1149 gfc_internal_error ("match_string_constant(): Delimiter not found");
1151 if (match_substring (NULL, 0, &e->ref, false) != MATCH_NO)
1152 e->expr_type = EXPR_SUBSTRING;
1154 *result = e;
1156 return MATCH_YES;
1158 no_match:
1159 gfc_current_locus = old_locus;
1160 return MATCH_NO;
1164 /* Match a .true. or .false. Returns 1 if a .true. was found,
1165 0 if a .false. was found, and -1 otherwise. */
1166 static int
1167 match_logical_constant_string (void)
1169 locus orig_loc = gfc_current_locus;
1171 gfc_gobble_whitespace ();
1172 if (gfc_next_ascii_char () == '.')
1174 char ch = gfc_next_ascii_char ();
1175 if (ch == 'f')
1177 if (gfc_next_ascii_char () == 'a'
1178 && gfc_next_ascii_char () == 'l'
1179 && gfc_next_ascii_char () == 's'
1180 && gfc_next_ascii_char () == 'e'
1181 && gfc_next_ascii_char () == '.')
1182 /* Matched ".false.". */
1183 return 0;
1185 else if (ch == 't')
1187 if (gfc_next_ascii_char () == 'r'
1188 && gfc_next_ascii_char () == 'u'
1189 && gfc_next_ascii_char () == 'e'
1190 && gfc_next_ascii_char () == '.')
1191 /* Matched ".true.". */
1192 return 1;
1195 gfc_current_locus = orig_loc;
1196 return -1;
1199 /* Match a .true. or .false. */
1201 static match
1202 match_logical_constant (gfc_expr **result)
1204 gfc_expr *e;
1205 int i, kind, is_iso_c;
1207 i = match_logical_constant_string ();
1208 if (i == -1)
1209 return MATCH_NO;
1211 kind = get_kind (&is_iso_c);
1212 if (kind == -1)
1213 return MATCH_ERROR;
1214 if (kind == -2)
1215 kind = gfc_default_logical_kind;
1217 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1219 gfc_error ("Bad kind for logical constant at %C");
1220 return MATCH_ERROR;
1223 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1224 e->ts.is_c_interop = is_iso_c;
1226 *result = e;
1227 return MATCH_YES;
1231 /* Match a real or imaginary part of a complex constant that is a
1232 symbolic constant. */
1234 static match
1235 match_sym_complex_part (gfc_expr **result)
1237 char name[GFC_MAX_SYMBOL_LEN + 1];
1238 gfc_symbol *sym;
1239 gfc_expr *e;
1240 match m;
1242 m = gfc_match_name (name);
1243 if (m != MATCH_YES)
1244 return m;
1246 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1247 return MATCH_NO;
1249 if (sym->attr.flavor != FL_PARAMETER)
1251 /* Give the matcher for implied do-loops a chance to run. This yields
1252 a much saner error message for "write(*,*) (i, i=1, 6" where the
1253 right parenthesis is missing. */
1254 char c;
1255 gfc_gobble_whitespace ();
1256 c = gfc_peek_ascii_char ();
1257 if (c == '=' || c == ',')
1259 m = MATCH_NO;
1261 else
1263 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1264 m = MATCH_ERROR;
1266 return m;
1269 if (!sym->value)
1270 goto error;
1272 if (!gfc_numeric_ts (&sym->value->ts))
1274 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1275 return MATCH_ERROR;
1278 if (sym->value->rank != 0)
1280 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1281 return MATCH_ERROR;
1284 if (!gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1285 "complex constant at %C"))
1286 return MATCH_ERROR;
1288 switch (sym->value->ts.type)
1290 case BT_REAL:
1291 e = gfc_copy_expr (sym->value);
1292 break;
1294 case BT_COMPLEX:
1295 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1296 if (e == NULL)
1297 goto error;
1298 break;
1300 case BT_INTEGER:
1301 e = gfc_int2real (sym->value, gfc_default_real_kind);
1302 if (e == NULL)
1303 goto error;
1304 break;
1306 default:
1307 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1310 *result = e; /* e is a scalar, real, constant expression. */
1311 return MATCH_YES;
1313 error:
1314 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1315 return MATCH_ERROR;
1319 /* Match a real or imaginary part of a complex number. */
1321 static match
1322 match_complex_part (gfc_expr **result)
1324 match m;
1326 m = match_sym_complex_part (result);
1327 if (m != MATCH_NO)
1328 return m;
1330 m = match_real_constant (result, 1);
1331 if (m != MATCH_NO)
1332 return m;
1334 return match_integer_constant (result, 1);
1338 /* Try to match a complex constant. */
1340 static match
1341 match_complex_constant (gfc_expr **result)
1343 gfc_expr *e, *real, *imag;
1344 gfc_error_buffer old_error;
1345 gfc_typespec target;
1346 locus old_loc;
1347 int kind;
1348 match m;
1350 old_loc = gfc_current_locus;
1351 real = imag = e = NULL;
1353 m = gfc_match_char ('(');
1354 if (m != MATCH_YES)
1355 return m;
1357 gfc_push_error (&old_error);
1359 m = match_complex_part (&real);
1360 if (m == MATCH_NO)
1362 gfc_free_error (&old_error);
1363 goto cleanup;
1366 if (gfc_match_char (',') == MATCH_NO)
1368 /* It is possible that gfc_int2real issued a warning when
1369 converting an integer to real. Throw this away here. */
1371 gfc_clear_warning ();
1372 gfc_pop_error (&old_error);
1373 m = MATCH_NO;
1374 goto cleanup;
1377 /* If m is error, then something was wrong with the real part and we
1378 assume we have a complex constant because we've seen the ','. An
1379 ambiguous case here is the start of an iterator list of some
1380 sort. These sort of lists are matched prior to coming here. */
1382 if (m == MATCH_ERROR)
1384 gfc_free_error (&old_error);
1385 goto cleanup;
1387 gfc_pop_error (&old_error);
1389 m = match_complex_part (&imag);
1390 if (m == MATCH_NO)
1391 goto syntax;
1392 if (m == MATCH_ERROR)
1393 goto cleanup;
1395 m = gfc_match_char (')');
1396 if (m == MATCH_NO)
1398 /* Give the matcher for implied do-loops a chance to run. This
1399 yields a much saner error message for (/ (i, 4=i, 6) /). */
1400 if (gfc_peek_ascii_char () == '=')
1402 m = MATCH_ERROR;
1403 goto cleanup;
1405 else
1406 goto syntax;
1409 if (m == MATCH_ERROR)
1410 goto cleanup;
1412 /* Decide on the kind of this complex number. */
1413 if (real->ts.type == BT_REAL)
1415 if (imag->ts.type == BT_REAL)
1416 kind = gfc_kind_max (real, imag);
1417 else
1418 kind = real->ts.kind;
1420 else
1422 if (imag->ts.type == BT_REAL)
1423 kind = imag->ts.kind;
1424 else
1425 kind = gfc_default_real_kind;
1427 gfc_clear_ts (&target);
1428 target.type = BT_REAL;
1429 target.kind = kind;
1431 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1432 gfc_convert_type (real, &target, 2);
1433 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1434 gfc_convert_type (imag, &target, 2);
1436 e = gfc_convert_complex (real, imag, kind);
1437 e->where = gfc_current_locus;
1439 gfc_free_expr (real);
1440 gfc_free_expr (imag);
1442 *result = e;
1443 return MATCH_YES;
1445 syntax:
1446 gfc_error ("Syntax error in COMPLEX constant at %C");
1447 m = MATCH_ERROR;
1449 cleanup:
1450 gfc_free_expr (e);
1451 gfc_free_expr (real);
1452 gfc_free_expr (imag);
1453 gfc_current_locus = old_loc;
1455 return m;
1459 /* Match constants in any of several forms. Returns nonzero for a
1460 match, zero for no match. */
1462 match
1463 gfc_match_literal_constant (gfc_expr **result, int signflag)
1465 match m;
1467 m = match_complex_constant (result);
1468 if (m != MATCH_NO)
1469 return m;
1471 m = match_string_constant (result);
1472 if (m != MATCH_NO)
1473 return m;
1475 m = match_boz_constant (result);
1476 if (m != MATCH_NO)
1477 return m;
1479 m = match_real_constant (result, signflag);
1480 if (m != MATCH_NO)
1481 return m;
1483 m = match_hollerith_constant (result);
1484 if (m != MATCH_NO)
1485 return m;
1487 m = match_integer_constant (result, signflag);
1488 if (m != MATCH_NO)
1489 return m;
1491 m = match_logical_constant (result);
1492 if (m != MATCH_NO)
1493 return m;
1495 return MATCH_NO;
1499 /* This checks if a symbol is the return value of an encompassing function.
1500 Function nesting can be maximally two levels deep, but we may have
1501 additional local namespaces like BLOCK etc. */
1503 bool
1504 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1506 if (!sym->attr.function || (sym->result != sym))
1507 return false;
1508 while (ns)
1510 if (ns->proc_name == sym)
1511 return true;
1512 ns = ns->parent;
1514 return false;
1518 /* Match a single actual argument value. An actual argument is
1519 usually an expression, but can also be a procedure name. If the
1520 argument is a single name, it is not always possible to tell
1521 whether the name is a dummy procedure or not. We treat these cases
1522 by creating an argument that looks like a dummy procedure and
1523 fixing things later during resolution. */
1525 static match
1526 match_actual_arg (gfc_expr **result)
1528 char name[GFC_MAX_SYMBOL_LEN + 1];
1529 gfc_symtree *symtree;
1530 locus where, w;
1531 gfc_expr *e;
1532 char c;
1534 gfc_gobble_whitespace ();
1535 where = gfc_current_locus;
1537 switch (gfc_match_name (name))
1539 case MATCH_ERROR:
1540 return MATCH_ERROR;
1542 case MATCH_NO:
1543 break;
1545 case MATCH_YES:
1546 w = gfc_current_locus;
1547 gfc_gobble_whitespace ();
1548 c = gfc_next_ascii_char ();
1549 gfc_current_locus = w;
1551 if (c != ',' && c != ')')
1552 break;
1554 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1555 break;
1556 /* Handle error elsewhere. */
1558 /* Eliminate a couple of common cases where we know we don't
1559 have a function argument. */
1560 if (symtree == NULL)
1562 gfc_get_sym_tree (name, NULL, &symtree, false);
1563 gfc_set_sym_referenced (symtree->n.sym);
1565 else
1567 gfc_symbol *sym;
1569 sym = symtree->n.sym;
1570 gfc_set_sym_referenced (sym);
1571 if (sym->attr.flavor == FL_NAMELIST)
1573 gfc_error ("Namelist %qs can not be an argument at %L",
1574 sym->name, &where);
1575 break;
1577 if (sym->attr.flavor != FL_PROCEDURE
1578 && sym->attr.flavor != FL_UNKNOWN)
1579 break;
1581 if (sym->attr.in_common && !sym->attr.proc_pointer)
1583 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE,
1584 sym->name, &sym->declared_at))
1585 return MATCH_ERROR;
1586 break;
1589 /* If the symbol is a function with itself as the result and
1590 is being defined, then we have a variable. */
1591 if (sym->attr.function && sym->result == sym)
1593 if (gfc_is_function_return_value (sym, gfc_current_ns))
1594 break;
1596 if (sym->attr.entry
1597 && (sym->ns == gfc_current_ns
1598 || sym->ns == gfc_current_ns->parent))
1600 gfc_entry_list *el = NULL;
1602 for (el = sym->ns->entries; el; el = el->next)
1603 if (sym == el->sym)
1604 break;
1606 if (el)
1607 break;
1612 e = gfc_get_expr (); /* Leave it unknown for now */
1613 e->symtree = symtree;
1614 e->expr_type = EXPR_VARIABLE;
1615 e->ts.type = BT_PROCEDURE;
1616 e->where = where;
1618 *result = e;
1619 return MATCH_YES;
1622 gfc_current_locus = where;
1623 return gfc_match_expr (result);
1627 /* Match a keyword argument or type parameter spec list.. */
1629 static match
1630 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base, bool pdt)
1632 char name[GFC_MAX_SYMBOL_LEN + 1];
1633 gfc_actual_arglist *a;
1634 locus name_locus;
1635 match m;
1637 name_locus = gfc_current_locus;
1638 m = gfc_match_name (name);
1640 if (m != MATCH_YES)
1641 goto cleanup;
1642 if (gfc_match_char ('=') != MATCH_YES)
1644 m = MATCH_NO;
1645 goto cleanup;
1648 if (pdt)
1650 if (gfc_match_char ('*') == MATCH_YES)
1652 actual->spec_type = SPEC_ASSUMED;
1653 goto add_name;
1655 else if (gfc_match_char (':') == MATCH_YES)
1657 actual->spec_type = SPEC_DEFERRED;
1658 goto add_name;
1660 else
1661 actual->spec_type = SPEC_EXPLICIT;
1664 m = match_actual_arg (&actual->expr);
1665 if (m != MATCH_YES)
1666 goto cleanup;
1668 /* Make sure this name has not appeared yet. */
1669 add_name:
1670 if (name[0] != '\0')
1672 for (a = base; a; a = a->next)
1673 if (a->name != NULL && strcmp (a->name, name) == 0)
1675 gfc_error ("Keyword %qs at %C has already appeared in the "
1676 "current argument list", name);
1677 return MATCH_ERROR;
1681 actual->name = gfc_get_string ("%s", name);
1682 return MATCH_YES;
1684 cleanup:
1685 gfc_current_locus = name_locus;
1686 return m;
1690 /* Match an argument list function, such as %VAL. */
1692 static match
1693 match_arg_list_function (gfc_actual_arglist *result)
1695 char name[GFC_MAX_SYMBOL_LEN + 1];
1696 locus old_locus;
1697 match m;
1699 old_locus = gfc_current_locus;
1701 if (gfc_match_char ('%') != MATCH_YES)
1703 m = MATCH_NO;
1704 goto cleanup;
1707 m = gfc_match ("%n (", name);
1708 if (m != MATCH_YES)
1709 goto cleanup;
1711 if (name[0] != '\0')
1713 switch (name[0])
1715 case 'l':
1716 if (strncmp (name, "loc", 3) == 0)
1718 result->name = "%LOC";
1719 break;
1721 /* FALLTHRU */
1722 case 'r':
1723 if (strncmp (name, "ref", 3) == 0)
1725 result->name = "%REF";
1726 break;
1728 /* FALLTHRU */
1729 case 'v':
1730 if (strncmp (name, "val", 3) == 0)
1732 result->name = "%VAL";
1733 break;
1735 /* FALLTHRU */
1736 default:
1737 m = MATCH_ERROR;
1738 goto cleanup;
1742 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C"))
1744 m = MATCH_ERROR;
1745 goto cleanup;
1748 m = match_actual_arg (&result->expr);
1749 if (m != MATCH_YES)
1750 goto cleanup;
1752 if (gfc_match_char (')') != MATCH_YES)
1754 m = MATCH_NO;
1755 goto cleanup;
1758 return MATCH_YES;
1760 cleanup:
1761 gfc_current_locus = old_locus;
1762 return m;
1766 /* Matches an actual argument list of a function or subroutine, from
1767 the opening parenthesis to the closing parenthesis. The argument
1768 list is assumed to allow keyword arguments because we don't know if
1769 the symbol associated with the procedure has an implicit interface
1770 or not. We make sure keywords are unique. If sub_flag is set,
1771 we're matching the argument list of a subroutine.
1773 NOTE: An alternative use for this function is to match type parameter
1774 spec lists, which are so similar to actual argument lists that the
1775 machinery can be reused. This use is flagged by the optional argument
1776 'pdt'. */
1778 match
1779 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp, bool pdt)
1781 gfc_actual_arglist *head, *tail;
1782 int seen_keyword;
1783 gfc_st_label *label;
1784 locus old_loc;
1785 match m;
1787 *argp = tail = NULL;
1788 old_loc = gfc_current_locus;
1790 seen_keyword = 0;
1792 if (gfc_match_char ('(') == MATCH_NO)
1793 return (sub_flag) ? MATCH_YES : MATCH_NO;
1795 if (gfc_match_char (')') == MATCH_YES)
1796 return MATCH_YES;
1798 head = NULL;
1800 matching_actual_arglist++;
1802 for (;;)
1804 if (head == NULL)
1805 head = tail = gfc_get_actual_arglist ();
1806 else
1808 tail->next = gfc_get_actual_arglist ();
1809 tail = tail->next;
1812 if (sub_flag && !pdt && gfc_match_char ('*') == MATCH_YES)
1814 m = gfc_match_st_label (&label);
1815 if (m == MATCH_NO)
1816 gfc_error ("Expected alternate return label at %C");
1817 if (m != MATCH_YES)
1818 goto cleanup;
1820 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1821 "at %C"))
1822 goto cleanup;
1824 tail->label = label;
1825 goto next;
1828 if (pdt && !seen_keyword)
1830 if (gfc_match_char (':') == MATCH_YES)
1832 tail->spec_type = SPEC_DEFERRED;
1833 goto next;
1835 else if (gfc_match_char ('*') == MATCH_YES)
1837 tail->spec_type = SPEC_ASSUMED;
1838 goto next;
1840 else
1841 tail->spec_type = SPEC_EXPLICIT;
1843 m = match_keyword_arg (tail, head, pdt);
1844 if (m == MATCH_YES)
1846 seen_keyword = 1;
1847 goto next;
1849 if (m == MATCH_ERROR)
1850 goto cleanup;
1853 /* After the first keyword argument is seen, the following
1854 arguments must also have keywords. */
1855 if (seen_keyword)
1857 m = match_keyword_arg (tail, head, pdt);
1859 if (m == MATCH_ERROR)
1860 goto cleanup;
1861 if (m == MATCH_NO)
1863 gfc_error ("Missing keyword name in actual argument list at %C");
1864 goto cleanup;
1868 else
1870 /* Try an argument list function, like %VAL. */
1871 m = match_arg_list_function (tail);
1872 if (m == MATCH_ERROR)
1873 goto cleanup;
1875 /* See if we have the first keyword argument. */
1876 if (m == MATCH_NO)
1878 m = match_keyword_arg (tail, head, false);
1879 if (m == MATCH_YES)
1880 seen_keyword = 1;
1881 if (m == MATCH_ERROR)
1882 goto cleanup;
1885 if (m == MATCH_NO)
1887 /* Try for a non-keyword argument. */
1888 m = match_actual_arg (&tail->expr);
1889 if (m == MATCH_ERROR)
1890 goto cleanup;
1891 if (m == MATCH_NO)
1892 goto syntax;
1897 next:
1898 if (gfc_match_char (')') == MATCH_YES)
1899 break;
1900 if (gfc_match_char (',') != MATCH_YES)
1901 goto syntax;
1904 *argp = head;
1905 matching_actual_arglist--;
1906 return MATCH_YES;
1908 syntax:
1909 gfc_error ("Syntax error in argument list at %C");
1911 cleanup:
1912 gfc_free_actual_arglist (head);
1913 gfc_current_locus = old_loc;
1914 matching_actual_arglist--;
1915 return MATCH_ERROR;
1919 /* Used by gfc_match_varspec() to extend the reference list by one
1920 element. */
1922 static gfc_ref *
1923 extend_ref (gfc_expr *primary, gfc_ref *tail)
1925 if (primary->ref == NULL)
1926 primary->ref = tail = gfc_get_ref ();
1927 else
1929 if (tail == NULL)
1930 gfc_internal_error ("extend_ref(): Bad tail");
1931 tail->next = gfc_get_ref ();
1932 tail = tail->next;
1935 return tail;
1939 /* Match any additional specifications associated with the current
1940 variable like member references or substrings. If equiv_flag is
1941 set we only match stuff that is allowed inside an EQUIVALENCE
1942 statement. sub_flag tells whether we expect a type-bound procedure found
1943 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1944 components, 'ppc_arg' determines whether the PPC may be called (with an
1945 argument list), or whether it may just be referred to as a pointer. */
1947 match
1948 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1949 bool ppc_arg)
1951 char name[GFC_MAX_SYMBOL_LEN + 1];
1952 gfc_ref *substring, *tail, *tmp;
1953 gfc_component *component;
1954 gfc_symbol *sym = primary->symtree->n.sym;
1955 gfc_expr *tgt_expr = NULL;
1956 match m;
1957 bool unknown;
1958 char sep;
1960 tail = NULL;
1962 gfc_gobble_whitespace ();
1964 if (gfc_peek_ascii_char () == '[')
1966 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1967 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1968 && CLASS_DATA (sym)->attr.dimension))
1970 gfc_error ("Array section designator, e.g. '(:)', is required "
1971 "besides the coarray designator '[...]' at %C");
1972 return MATCH_ERROR;
1974 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1975 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1976 && !CLASS_DATA (sym)->attr.codimension))
1978 gfc_error ("Coarray designator at %C but %qs is not a coarray",
1979 sym->name);
1980 return MATCH_ERROR;
1984 if (sym->assoc && sym->assoc->target)
1985 tgt_expr = sym->assoc->target;
1987 /* For associate names, we may not yet know whether they are arrays or not.
1988 If the selector expression is unambiguously an array; eg. a full array
1989 or an array section, then the associate name must be an array and we can
1990 fix it now. Otherwise, if parentheses follow and it is not a character
1991 type, we have to assume that it actually is one for now. The final
1992 decision will be made at resolution, of course. */
1993 if (sym->assoc
1994 && gfc_peek_ascii_char () == '('
1995 && sym->ts.type != BT_CLASS
1996 && !sym->attr.dimension)
1998 gfc_ref *ref = NULL;
2000 if (!sym->assoc->dangling && tgt_expr)
2002 if (tgt_expr->expr_type == EXPR_VARIABLE)
2003 gfc_resolve_expr (tgt_expr);
2005 ref = tgt_expr->ref;
2006 for (; ref; ref = ref->next)
2007 if (ref->type == REF_ARRAY
2008 && (ref->u.ar.type == AR_FULL
2009 || ref->u.ar.type == AR_SECTION))
2010 break;
2013 if (ref || (!(sym->assoc->dangling || sym->ts.type == BT_CHARACTER)
2014 && sym->assoc->st
2015 && sym->assoc->st->n.sym
2016 && sym->assoc->st->n.sym->attr.dimension == 0))
2018 sym->attr.dimension = 1;
2019 if (sym->as == NULL
2020 && sym->assoc->st
2021 && sym->assoc->st->n.sym
2022 && sym->assoc->st->n.sym->as)
2023 sym->as = gfc_copy_array_spec (sym->assoc->st->n.sym->as);
2026 else if (sym->ts.type == BT_CLASS
2027 && tgt_expr
2028 && tgt_expr->expr_type == EXPR_VARIABLE
2029 && sym->ts.u.derived != tgt_expr->ts.u.derived)
2031 gfc_resolve_expr (tgt_expr);
2032 if (tgt_expr->rank)
2033 sym->ts.u.derived = tgt_expr->ts.u.derived;
2036 if ((equiv_flag && gfc_peek_ascii_char () == '(')
2037 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
2038 || (sym->attr.dimension && sym->ts.type != BT_CLASS
2039 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
2040 && !(gfc_matching_procptr_assignment
2041 && sym->attr.flavor == FL_PROCEDURE))
2042 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
2043 && (CLASS_DATA (sym)->attr.dimension
2044 || CLASS_DATA (sym)->attr.codimension)))
2046 gfc_array_spec *as;
2048 tail = extend_ref (primary, tail);
2049 tail->type = REF_ARRAY;
2051 /* In EQUIVALENCE, we don't know yet whether we are seeing
2052 an array, character variable or array of character
2053 variables. We'll leave the decision till resolve time. */
2055 if (equiv_flag)
2056 as = NULL;
2057 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
2058 as = CLASS_DATA (sym)->as;
2059 else
2060 as = sym->as;
2062 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
2063 as ? as->corank : 0);
2064 if (m != MATCH_YES)
2065 return m;
2067 gfc_gobble_whitespace ();
2068 if (equiv_flag && gfc_peek_ascii_char () == '(')
2070 tail = extend_ref (primary, tail);
2071 tail->type = REF_ARRAY;
2073 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
2074 if (m != MATCH_YES)
2075 return m;
2079 primary->ts = sym->ts;
2081 if (equiv_flag)
2082 return MATCH_YES;
2084 /* With DEC extensions, member separator may be '.' or '%'. */
2085 sep = gfc_peek_ascii_char ();
2086 m = gfc_match_member_sep (sym);
2087 if (m == MATCH_ERROR)
2088 return MATCH_ERROR;
2090 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES
2091 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2092 gfc_set_default_type (sym, 0, sym->ns);
2094 /* See if there is a usable typespec in the "no IMPLICIT type" error. */
2095 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES)
2097 bool permissible;
2099 /* These target expressions can be resolved at any time. */
2100 permissible = tgt_expr && tgt_expr->symtree && tgt_expr->symtree->n.sym
2101 && (tgt_expr->symtree->n.sym->attr.use_assoc
2102 || tgt_expr->symtree->n.sym->attr.host_assoc
2103 || tgt_expr->symtree->n.sym->attr.if_source
2104 == IFSRC_DECL);
2105 permissible = permissible
2106 || (tgt_expr && tgt_expr->expr_type == EXPR_OP);
2108 if (permissible)
2110 gfc_resolve_expr (tgt_expr);
2111 sym->ts = tgt_expr->ts;
2114 if (sym->ts.type == BT_UNKNOWN)
2116 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name);
2117 return MATCH_ERROR;
2120 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2121 && m == MATCH_YES)
2123 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C",
2124 sep, sym->name);
2125 return MATCH_ERROR;
2128 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2129 || m != MATCH_YES)
2130 goto check_substring;
2132 sym = sym->ts.u.derived;
2134 for (;;)
2136 bool t;
2137 gfc_symtree *tbp;
2139 m = gfc_match_name (name);
2140 if (m == MATCH_NO)
2141 gfc_error ("Expected structure component name at %C");
2142 if (m != MATCH_YES)
2143 return MATCH_ERROR;
2145 if (sym && sym->f2k_derived)
2146 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
2147 else
2148 tbp = NULL;
2150 if (tbp)
2152 gfc_symbol* tbp_sym;
2154 if (!t)
2155 return MATCH_ERROR;
2157 gcc_assert (!tail || !tail->next);
2159 if (!(primary->expr_type == EXPR_VARIABLE
2160 || (primary->expr_type == EXPR_STRUCTURE
2161 && primary->symtree && primary->symtree->n.sym
2162 && primary->symtree->n.sym->attr.flavor)))
2163 return MATCH_ERROR;
2165 if (tbp->n.tb->is_generic)
2166 tbp_sym = NULL;
2167 else
2168 tbp_sym = tbp->n.tb->u.specific->n.sym;
2170 primary->expr_type = EXPR_COMPCALL;
2171 primary->value.compcall.tbp = tbp->n.tb;
2172 primary->value.compcall.name = tbp->name;
2173 primary->value.compcall.ignore_pass = 0;
2174 primary->value.compcall.assign = 0;
2175 primary->value.compcall.base_object = NULL;
2176 gcc_assert (primary->symtree->n.sym->attr.referenced);
2177 if (tbp_sym)
2178 primary->ts = tbp_sym->ts;
2179 else
2180 gfc_clear_ts (&primary->ts);
2182 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
2183 &primary->value.compcall.actual);
2184 if (m == MATCH_ERROR)
2185 return MATCH_ERROR;
2186 if (m == MATCH_NO)
2188 if (sub_flag)
2189 primary->value.compcall.actual = NULL;
2190 else
2192 gfc_error ("Expected argument list at %C");
2193 return MATCH_ERROR;
2197 break;
2200 component = gfc_find_component (sym, name, false, false, &tmp);
2201 if (component == NULL)
2202 return MATCH_ERROR;
2204 /* Extend the reference chain determined by gfc_find_component. */
2205 if (primary->ref == NULL)
2206 primary->ref = tmp;
2207 else
2209 /* Set by the for loop below for the last component ref. */
2210 gcc_assert (tail != NULL);
2211 tail->next = tmp;
2214 /* The reference chain may be longer than one hop for union
2215 subcomponents; find the new tail. */
2216 for (tail = tmp; tail->next; tail = tail->next)
2219 primary->ts = component->ts;
2221 if (component->attr.proc_pointer && ppc_arg)
2223 /* Procedure pointer component call: Look for argument list. */
2224 m = gfc_match_actual_arglist (sub_flag,
2225 &primary->value.compcall.actual);
2226 if (m == MATCH_ERROR)
2227 return MATCH_ERROR;
2229 if (m == MATCH_NO && !gfc_matching_ptr_assignment
2230 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
2232 gfc_error ("Procedure pointer component %qs requires an "
2233 "argument list at %C", component->name);
2234 return MATCH_ERROR;
2237 if (m == MATCH_YES)
2238 primary->expr_type = EXPR_PPC;
2240 break;
2243 if (component->as != NULL && !component->attr.proc_pointer)
2245 tail = extend_ref (primary, tail);
2246 tail->type = REF_ARRAY;
2248 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2249 component->as->corank);
2250 if (m != MATCH_YES)
2251 return m;
2253 else if (component->ts.type == BT_CLASS && component->attr.class_ok
2254 && CLASS_DATA (component)->as && !component->attr.proc_pointer)
2256 tail = extend_ref (primary, tail);
2257 tail->type = REF_ARRAY;
2259 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2260 equiv_flag,
2261 CLASS_DATA (component)->as->corank);
2262 if (m != MATCH_YES)
2263 return m;
2266 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2267 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES)
2268 break;
2270 sym = component->ts.u.derived;
2273 check_substring:
2274 unknown = false;
2275 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor))
2277 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2279 gfc_set_default_type (sym, 0, sym->ns);
2280 primary->ts = sym->ts;
2281 unknown = true;
2285 if (primary->ts.type == BT_CHARACTER)
2287 bool def = primary->ts.deferred == 1;
2288 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def))
2290 case MATCH_YES:
2291 if (tail == NULL)
2292 primary->ref = substring;
2293 else
2294 tail->next = substring;
2296 if (primary->expr_type == EXPR_CONSTANT)
2297 primary->expr_type = EXPR_SUBSTRING;
2299 if (substring)
2300 primary->ts.u.cl = NULL;
2302 break;
2304 case MATCH_NO:
2305 if (unknown)
2307 gfc_clear_ts (&primary->ts);
2308 gfc_clear_ts (&sym->ts);
2310 break;
2312 case MATCH_ERROR:
2313 return MATCH_ERROR;
2317 /* F08:C611. */
2318 if (primary->ts.type == BT_DERIVED && primary->ref
2319 && primary->ts.u.derived && primary->ts.u.derived->attr.abstract)
2321 gfc_error ("Nonpolymorphic reference to abstract type at %C");
2322 return MATCH_ERROR;
2325 /* F08:C727. */
2326 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2328 gfc_error ("Coindexed procedure-pointer component at %C");
2329 return MATCH_ERROR;
2332 return MATCH_YES;
2336 /* Given an expression that is a variable, figure out what the
2337 ultimate variable's type and attribute is, traversing the reference
2338 structures if necessary.
2340 This subroutine is trickier than it looks. We start at the base
2341 symbol and store the attribute. Component references load a
2342 completely new attribute.
2344 A couple of rules come into play. Subobjects of targets are always
2345 targets themselves. If we see a component that goes through a
2346 pointer, then the expression must also be a target, since the
2347 pointer is associated with something (if it isn't core will soon be
2348 dumped). If we see a full part or section of an array, the
2349 expression is also an array.
2351 We can have at most one full array reference. */
2353 symbol_attribute
2354 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2356 int dimension, codimension, pointer, allocatable, target;
2357 symbol_attribute attr;
2358 gfc_ref *ref;
2359 gfc_symbol *sym;
2360 gfc_component *comp;
2362 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2363 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2365 sym = expr->symtree->n.sym;
2366 attr = sym->attr;
2368 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2370 dimension = CLASS_DATA (sym)->attr.dimension;
2371 codimension = CLASS_DATA (sym)->attr.codimension;
2372 pointer = CLASS_DATA (sym)->attr.class_pointer;
2373 allocatable = CLASS_DATA (sym)->attr.allocatable;
2375 else
2377 dimension = attr.dimension;
2378 codimension = attr.codimension;
2379 pointer = attr.pointer;
2380 allocatable = attr.allocatable;
2383 target = attr.target;
2384 if (pointer || attr.proc_pointer)
2385 target = 1;
2387 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2388 *ts = sym->ts;
2390 for (ref = expr->ref; ref; ref = ref->next)
2391 switch (ref->type)
2393 case REF_ARRAY:
2395 switch (ref->u.ar.type)
2397 case AR_FULL:
2398 dimension = 1;
2399 break;
2401 case AR_SECTION:
2402 allocatable = pointer = 0;
2403 dimension = 1;
2404 break;
2406 case AR_ELEMENT:
2407 /* Handle coarrays. */
2408 if (ref->u.ar.dimen > 0)
2409 allocatable = pointer = 0;
2410 break;
2412 case AR_UNKNOWN:
2413 /* If any of start, end or stride is not integer, there will
2414 already have been an error issued. */
2415 int errors;
2416 gfc_get_errors (NULL, &errors);
2417 if (errors == 0)
2418 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2421 break;
2423 case REF_COMPONENT:
2424 comp = ref->u.c.component;
2425 attr = comp->attr;
2426 if (ts != NULL)
2428 *ts = comp->ts;
2429 /* Don't set the string length if a substring reference
2430 follows. */
2431 if (ts->type == BT_CHARACTER
2432 && ref->next && ref->next->type == REF_SUBSTRING)
2433 ts->u.cl = NULL;
2436 if (comp->ts.type == BT_CLASS)
2438 codimension = CLASS_DATA (comp)->attr.codimension;
2439 pointer = CLASS_DATA (comp)->attr.class_pointer;
2440 allocatable = CLASS_DATA (comp)->attr.allocatable;
2442 else
2444 codimension = comp->attr.codimension;
2445 pointer = comp->attr.pointer;
2446 allocatable = comp->attr.allocatable;
2448 if (pointer || attr.proc_pointer)
2449 target = 1;
2451 break;
2453 case REF_SUBSTRING:
2454 allocatable = pointer = 0;
2455 break;
2458 attr.dimension = dimension;
2459 attr.codimension = codimension;
2460 attr.pointer = pointer;
2461 attr.allocatable = allocatable;
2462 attr.target = target;
2463 attr.save = sym->attr.save;
2465 return attr;
2469 /* Return the attribute from a general expression. */
2471 symbol_attribute
2472 gfc_expr_attr (gfc_expr *e)
2474 symbol_attribute attr;
2476 switch (e->expr_type)
2478 case EXPR_VARIABLE:
2479 attr = gfc_variable_attr (e, NULL);
2480 break;
2482 case EXPR_FUNCTION:
2483 gfc_clear_attr (&attr);
2485 if (e->value.function.esym && e->value.function.esym->result)
2487 gfc_symbol *sym = e->value.function.esym->result;
2488 attr = sym->attr;
2489 if (sym->ts.type == BT_CLASS)
2491 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2492 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2493 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2496 else if (e->value.function.isym
2497 && e->value.function.isym->transformational
2498 && e->ts.type == BT_CLASS)
2499 attr = CLASS_DATA (e)->attr;
2500 else
2501 attr = gfc_variable_attr (e, NULL);
2503 /* TODO: NULL() returns pointers. May have to take care of this
2504 here. */
2506 break;
2508 default:
2509 gfc_clear_attr (&attr);
2510 break;
2513 return attr;
2517 /* Given an expression, figure out what the ultimate expression
2518 attribute is. This routine is similar to gfc_variable_attr with
2519 parts of gfc_expr_attr, but focuses more on the needs of
2520 coarrays. For coarrays a codimension attribute is kind of
2521 "infectious" being propagated once set and never cleared.
2522 The coarray_comp is only set, when the expression refs a coarray
2523 component. REFS_COMP is set when present to true only, when this EXPR
2524 refs a (non-_data) component. To check whether EXPR refs an allocatable
2525 component in a derived type coarray *refs_comp needs to be set and
2526 coarray_comp has to false. */
2528 static symbol_attribute
2529 caf_variable_attr (gfc_expr *expr, bool in_allocate, bool *refs_comp)
2531 int dimension, codimension, pointer, allocatable, target, coarray_comp;
2532 symbol_attribute attr;
2533 gfc_ref *ref;
2534 gfc_symbol *sym;
2535 gfc_component *comp;
2537 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2538 gfc_internal_error ("gfc_caf_attr(): Expression isn't a variable");
2540 sym = expr->symtree->n.sym;
2541 gfc_clear_attr (&attr);
2543 if (refs_comp)
2544 *refs_comp = false;
2546 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2548 dimension = CLASS_DATA (sym)->attr.dimension;
2549 codimension = CLASS_DATA (sym)->attr.codimension;
2550 pointer = CLASS_DATA (sym)->attr.class_pointer;
2551 allocatable = CLASS_DATA (sym)->attr.allocatable;
2552 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2553 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp;
2555 else
2557 dimension = sym->attr.dimension;
2558 codimension = sym->attr.codimension;
2559 pointer = sym->attr.pointer;
2560 allocatable = sym->attr.allocatable;
2561 attr.alloc_comp = sym->ts.type == BT_DERIVED
2562 ? sym->ts.u.derived->attr.alloc_comp : 0;
2563 attr.pointer_comp = sym->ts.type == BT_DERIVED
2564 ? sym->ts.u.derived->attr.pointer_comp : 0;
2567 target = coarray_comp = 0;
2568 if (pointer || attr.proc_pointer)
2569 target = 1;
2571 for (ref = expr->ref; ref; ref = ref->next)
2572 switch (ref->type)
2574 case REF_ARRAY:
2576 switch (ref->u.ar.type)
2578 case AR_FULL:
2579 case AR_SECTION:
2580 dimension = 1;
2581 break;
2583 case AR_ELEMENT:
2584 /* Handle coarrays. */
2585 if (ref->u.ar.dimen > 0 && !in_allocate)
2586 allocatable = pointer = 0;
2587 break;
2589 case AR_UNKNOWN:
2590 /* If any of start, end or stride is not integer, there will
2591 already have been an error issued. */
2592 int errors;
2593 gfc_get_errors (NULL, &errors);
2594 if (errors == 0)
2595 gfc_internal_error ("gfc_caf_attr(): Bad array reference");
2598 break;
2600 case REF_COMPONENT:
2601 comp = ref->u.c.component;
2603 if (comp->ts.type == BT_CLASS)
2605 /* Set coarray_comp only, when this component introduces the
2606 coarray. */
2607 coarray_comp = !codimension && CLASS_DATA (comp)->attr.codimension;
2608 codimension |= CLASS_DATA (comp)->attr.codimension;
2609 pointer = CLASS_DATA (comp)->attr.class_pointer;
2610 allocatable = CLASS_DATA (comp)->attr.allocatable;
2612 else
2614 /* Set coarray_comp only, when this component introduces the
2615 coarray. */
2616 coarray_comp = !codimension && comp->attr.codimension;
2617 codimension |= comp->attr.codimension;
2618 pointer = comp->attr.pointer;
2619 allocatable = comp->attr.allocatable;
2622 if (refs_comp && strcmp (comp->name, "_data") != 0
2623 && (ref->next == NULL
2624 || (ref->next->type == REF_ARRAY && ref->next->next == NULL)))
2625 *refs_comp = true;
2627 if (pointer || attr.proc_pointer)
2628 target = 1;
2630 break;
2632 case REF_SUBSTRING:
2633 allocatable = pointer = 0;
2634 break;
2637 attr.dimension = dimension;
2638 attr.codimension = codimension;
2639 attr.pointer = pointer;
2640 attr.allocatable = allocatable;
2641 attr.target = target;
2642 attr.save = sym->attr.save;
2643 attr.coarray_comp = coarray_comp;
2645 return attr;
2649 symbol_attribute
2650 gfc_caf_attr (gfc_expr *e, bool in_allocate, bool *refs_comp)
2652 symbol_attribute attr;
2654 switch (e->expr_type)
2656 case EXPR_VARIABLE:
2657 attr = caf_variable_attr (e, in_allocate, refs_comp);
2658 break;
2660 case EXPR_FUNCTION:
2661 gfc_clear_attr (&attr);
2663 if (e->value.function.esym && e->value.function.esym->result)
2665 gfc_symbol *sym = e->value.function.esym->result;
2666 attr = sym->attr;
2667 if (sym->ts.type == BT_CLASS)
2669 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2670 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2671 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2672 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2673 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived
2674 ->attr.pointer_comp;
2677 else if (e->symtree)
2678 attr = caf_variable_attr (e, in_allocate, refs_comp);
2679 else
2680 gfc_clear_attr (&attr);
2681 break;
2683 default:
2684 gfc_clear_attr (&attr);
2685 break;
2688 return attr;
2692 /* Match a structure constructor. The initial symbol has already been
2693 seen. */
2695 typedef struct gfc_structure_ctor_component
2697 char* name;
2698 gfc_expr* val;
2699 locus where;
2700 struct gfc_structure_ctor_component* next;
2702 gfc_structure_ctor_component;
2704 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2706 static void
2707 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2709 free (comp->name);
2710 gfc_free_expr (comp->val);
2711 free (comp);
2715 /* Translate the component list into the actual constructor by sorting it in
2716 the order required; this also checks along the way that each and every
2717 component actually has an initializer and handles default initializers
2718 for components without explicit value given. */
2719 static bool
2720 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2721 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2723 gfc_structure_ctor_component *comp_iter;
2724 gfc_component *comp;
2726 for (comp = sym->components; comp; comp = comp->next)
2728 gfc_structure_ctor_component **next_ptr;
2729 gfc_expr *value = NULL;
2731 /* Try to find the initializer for the current component by name. */
2732 next_ptr = comp_head;
2733 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2735 if (!strcmp (comp_iter->name, comp->name))
2736 break;
2737 next_ptr = &comp_iter->next;
2740 /* If an extension, try building the parent derived type by building
2741 a value expression for the parent derived type and calling self. */
2742 if (!comp_iter && comp == sym->components && sym->attr.extension)
2744 value = gfc_get_structure_constructor_expr (comp->ts.type,
2745 comp->ts.kind,
2746 &gfc_current_locus);
2747 value->ts = comp->ts;
2749 if (!build_actual_constructor (comp_head,
2750 &value->value.constructor,
2751 comp->ts.u.derived))
2753 gfc_free_expr (value);
2754 return false;
2757 gfc_constructor_append_expr (ctor_head, value, NULL);
2758 continue;
2761 /* If it was not found, try the default initializer if there's any;
2762 otherwise, it's an error unless this is a deferred parameter. */
2763 if (!comp_iter)
2765 if (comp->initializer)
2767 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor "
2768 "with missing optional arguments at %C"))
2769 return false;
2770 value = gfc_copy_expr (comp->initializer);
2772 else if (comp->attr.allocatable
2773 || (comp->ts.type == BT_CLASS
2774 && CLASS_DATA (comp)->attr.allocatable))
2776 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for "
2777 "allocatable component %qs given in the "
2778 "structure constructor at %C", comp->name))
2779 return false;
2781 else if (!comp->attr.artificial)
2783 gfc_error ("No initializer for component %qs given in the"
2784 " structure constructor at %C", comp->name);
2785 return false;
2788 else
2789 value = comp_iter->val;
2791 /* Add the value to the constructor chain built. */
2792 gfc_constructor_append_expr (ctor_head, value, NULL);
2794 /* Remove the entry from the component list. We don't want the expression
2795 value to be free'd, so set it to NULL. */
2796 if (comp_iter)
2798 *next_ptr = comp_iter->next;
2799 comp_iter->val = NULL;
2800 gfc_free_structure_ctor_component (comp_iter);
2803 return true;
2807 bool
2808 gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2809 gfc_actual_arglist **arglist,
2810 bool parent)
2812 gfc_actual_arglist *actual;
2813 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2814 gfc_constructor_base ctor_head = NULL;
2815 gfc_component *comp; /* Is set NULL when named component is first seen */
2816 const char* last_name = NULL;
2817 locus old_locus;
2818 gfc_expr *expr;
2820 expr = parent ? *cexpr : e;
2821 old_locus = gfc_current_locus;
2822 if (parent)
2823 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2824 else
2825 gfc_current_locus = expr->where;
2827 comp_tail = comp_head = NULL;
2829 if (!parent && sym->attr.abstract)
2831 gfc_error ("Can't construct ABSTRACT type %qs at %L",
2832 sym->name, &expr->where);
2833 goto cleanup;
2836 comp = sym->components;
2837 actual = parent ? *arglist : expr->value.function.actual;
2838 for ( ; actual; )
2840 gfc_component *this_comp = NULL;
2842 if (!comp_head)
2843 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2844 else
2846 comp_tail->next = gfc_get_structure_ctor_component ();
2847 comp_tail = comp_tail->next;
2849 if (actual->name)
2851 if (!gfc_notify_std (GFC_STD_F2003, "Structure"
2852 " constructor with named arguments at %C"))
2853 goto cleanup;
2855 comp_tail->name = xstrdup (actual->name);
2856 last_name = comp_tail->name;
2857 comp = NULL;
2859 else
2861 /* Components without name are not allowed after the first named
2862 component initializer! */
2863 if (!comp || comp->attr.artificial)
2865 if (last_name)
2866 gfc_error ("Component initializer without name after component"
2867 " named %s at %L", last_name,
2868 actual->expr ? &actual->expr->where
2869 : &gfc_current_locus);
2870 else
2871 gfc_error ("Too many components in structure constructor at "
2872 "%L", actual->expr ? &actual->expr->where
2873 : &gfc_current_locus);
2874 goto cleanup;
2877 comp_tail->name = xstrdup (comp->name);
2880 /* Find the current component in the structure definition and check
2881 its access is not private. */
2882 if (comp)
2883 this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
2884 else
2886 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2887 false, false, NULL);
2888 comp = NULL; /* Reset needed! */
2891 /* Here we can check if a component name is given which does not
2892 correspond to any component of the defined structure. */
2893 if (!this_comp)
2894 goto cleanup;
2896 /* For a constant string constructor, make sure the length is
2897 correct; truncate of fill with blanks if needed. */
2898 if (this_comp->ts.type == BT_CHARACTER && !this_comp->attr.allocatable
2899 && this_comp->ts.u.cl && this_comp->ts.u.cl->length
2900 && this_comp->ts.u.cl->length->expr_type == EXPR_CONSTANT
2901 && actual->expr->ts.type == BT_CHARACTER
2902 && actual->expr->expr_type == EXPR_CONSTANT)
2904 ptrdiff_t c, e;
2905 c = gfc_mpz_get_hwi (this_comp->ts.u.cl->length->value.integer);
2906 e = actual->expr->value.character.length;
2908 if (c != e)
2910 ptrdiff_t i, to;
2911 gfc_char_t *dest;
2912 dest = gfc_get_wide_string (c + 1);
2914 to = e < c ? e : c;
2915 for (i = 0; i < to; i++)
2916 dest[i] = actual->expr->value.character.string[i];
2918 for (i = e; i < c; i++)
2919 dest[i] = ' ';
2921 dest[c] = '\0';
2922 free (actual->expr->value.character.string);
2924 actual->expr->value.character.length = c;
2925 actual->expr->value.character.string = dest;
2929 comp_tail->val = actual->expr;
2930 if (actual->expr != NULL)
2931 comp_tail->where = actual->expr->where;
2932 actual->expr = NULL;
2934 /* Check if this component is already given a value. */
2935 for (comp_iter = comp_head; comp_iter != comp_tail;
2936 comp_iter = comp_iter->next)
2938 gcc_assert (comp_iter);
2939 if (!strcmp (comp_iter->name, comp_tail->name))
2941 gfc_error ("Component %qs is initialized twice in the structure"
2942 " constructor at %L", comp_tail->name,
2943 comp_tail->val ? &comp_tail->where
2944 : &gfc_current_locus);
2945 goto cleanup;
2949 /* F2008, R457/C725, for PURE C1283. */
2950 if (this_comp->attr.pointer && comp_tail->val
2951 && gfc_is_coindexed (comp_tail->val))
2953 gfc_error ("Coindexed expression to pointer component %qs in "
2954 "structure constructor at %L", comp_tail->name,
2955 &comp_tail->where);
2956 goto cleanup;
2959 /* If not explicitly a parent constructor, gather up the components
2960 and build one. */
2961 if (comp && comp == sym->components
2962 && sym->attr.extension
2963 && comp_tail->val
2964 && (!gfc_bt_struct (comp_tail->val->ts.type)
2966 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2968 bool m;
2969 gfc_actual_arglist *arg_null = NULL;
2971 actual->expr = comp_tail->val;
2972 comp_tail->val = NULL;
2974 m = gfc_convert_to_structure_constructor (NULL,
2975 comp->ts.u.derived, &comp_tail->val,
2976 comp->ts.u.derived->attr.zero_comp
2977 ? &arg_null : &actual, true);
2978 if (!m)
2979 goto cleanup;
2981 if (comp->ts.u.derived->attr.zero_comp)
2983 comp = comp->next;
2984 continue;
2988 if (comp)
2989 comp = comp->next;
2990 if (parent && !comp)
2991 break;
2993 if (actual)
2994 actual = actual->next;
2997 if (!build_actual_constructor (&comp_head, &ctor_head, sym))
2998 goto cleanup;
3000 /* No component should be left, as this should have caused an error in the
3001 loop constructing the component-list (name that does not correspond to any
3002 component in the structure definition). */
3003 if (comp_head && sym->attr.extension)
3005 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
3007 gfc_error ("component %qs at %L has already been set by a "
3008 "parent derived type constructor", comp_iter->name,
3009 &comp_iter->where);
3011 goto cleanup;
3013 else
3014 gcc_assert (!comp_head);
3016 if (parent)
3018 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
3019 expr->ts.u.derived = sym;
3020 expr->value.constructor = ctor_head;
3021 *cexpr = expr;
3023 else
3025 expr->ts.u.derived = sym;
3026 expr->ts.kind = 0;
3027 expr->ts.type = BT_DERIVED;
3028 expr->value.constructor = ctor_head;
3029 expr->expr_type = EXPR_STRUCTURE;
3032 gfc_current_locus = old_locus;
3033 if (parent)
3034 *arglist = actual;
3035 return true;
3037 cleanup:
3038 gfc_current_locus = old_locus;
3040 for (comp_iter = comp_head; comp_iter; )
3042 gfc_structure_ctor_component *next = comp_iter->next;
3043 gfc_free_structure_ctor_component (comp_iter);
3044 comp_iter = next;
3046 gfc_constructor_free (ctor_head);
3048 return false;
3052 match
3053 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
3055 match m;
3056 gfc_expr *e;
3057 gfc_symtree *symtree;
3059 gfc_get_ha_sym_tree (sym->name, &symtree);
3061 e = gfc_get_expr ();
3062 e->symtree = symtree;
3063 e->expr_type = EXPR_FUNCTION;
3065 gcc_assert (gfc_fl_struct (sym->attr.flavor)
3066 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
3067 e->value.function.esym = sym;
3068 e->symtree->n.sym->attr.generic = 1;
3070 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3071 if (m != MATCH_YES)
3073 gfc_free_expr (e);
3074 return m;
3077 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false))
3079 gfc_free_expr (e);
3080 return MATCH_ERROR;
3083 /* If a structure constructor is in a DATA statement, then each entity
3084 in the structure constructor must be a constant. Try to reduce the
3085 expression here. */
3086 if (gfc_in_match_data ())
3087 gfc_reduce_init_expr (e);
3089 *result = e;
3090 return MATCH_YES;
3094 /* If the symbol is an implicit do loop index and implicitly typed,
3095 it should not be host associated. Provide a symtree from the
3096 current namespace. */
3097 static match
3098 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
3100 if ((*sym)->attr.flavor == FL_VARIABLE
3101 && (*sym)->ns != gfc_current_ns
3102 && (*sym)->attr.implied_index
3103 && (*sym)->attr.implicit_type
3104 && !(*sym)->attr.use_assoc)
3106 int i;
3107 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
3108 if (i)
3109 return MATCH_ERROR;
3110 *sym = (*st)->n.sym;
3112 return MATCH_YES;
3116 /* Procedure pointer as function result: Replace the function symbol by the
3117 auto-generated hidden result variable named "ppr@". */
3119 static bool
3120 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
3122 /* Check for procedure pointer result variable. */
3123 if ((*sym)->attr.function && !(*sym)->attr.external
3124 && (*sym)->result && (*sym)->result != *sym
3125 && (*sym)->result->attr.proc_pointer
3126 && (*sym) == gfc_current_ns->proc_name
3127 && (*sym) == (*sym)->result->ns->proc_name
3128 && strcmp ("ppr@", (*sym)->result->name) == 0)
3130 /* Automatic replacement with "hidden" result variable. */
3131 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
3132 *sym = (*sym)->result;
3133 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
3134 return true;
3136 return false;
3140 /* Matches a variable name followed by anything that might follow it--
3141 array reference, argument list of a function, etc. */
3143 match
3144 gfc_match_rvalue (gfc_expr **result)
3146 gfc_actual_arglist *actual_arglist;
3147 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
3148 gfc_state_data *st;
3149 gfc_symbol *sym;
3150 gfc_symtree *symtree;
3151 locus where, old_loc;
3152 gfc_expr *e;
3153 match m, m2;
3154 int i;
3155 gfc_typespec *ts;
3156 bool implicit_char;
3157 gfc_ref *ref;
3159 m = gfc_match ("%%loc");
3160 if (m == MATCH_YES)
3162 if (!gfc_notify_std (GFC_STD_LEGACY, "%%LOC() as an rvalue at %C"))
3163 return MATCH_ERROR;
3164 strncpy (name, "loc", 4);
3167 else
3169 m = gfc_match_name (name);
3170 if (m != MATCH_YES)
3171 return m;
3174 /* Check if the symbol exists. */
3175 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
3176 return MATCH_ERROR;
3178 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT
3179 type. For derived types we create a generic symbol which links to the
3180 derived type symbol; STRUCTUREs are simpler and must not conflict with
3181 variables. */
3182 if (!symtree)
3183 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree))
3184 return MATCH_ERROR;
3185 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3187 if (gfc_find_state (COMP_INTERFACE)
3188 && !gfc_current_ns->has_import_set)
3189 i = gfc_get_sym_tree (name, NULL, &symtree, false);
3190 else
3191 i = gfc_get_ha_sym_tree (name, &symtree);
3192 if (i)
3193 return MATCH_ERROR;
3197 sym = symtree->n.sym;
3198 e = NULL;
3199 where = gfc_current_locus;
3201 replace_hidden_procptr_result (&sym, &symtree);
3203 /* If this is an implicit do loop index and implicitly typed,
3204 it should not be host associated. */
3205 m = check_for_implicit_index (&symtree, &sym);
3206 if (m != MATCH_YES)
3207 return m;
3209 gfc_set_sym_referenced (sym);
3210 sym->attr.implied_index = 0;
3212 if (sym->attr.function && sym->result == sym)
3214 /* See if this is a directly recursive function call. */
3215 gfc_gobble_whitespace ();
3216 if (sym->attr.recursive
3217 && gfc_peek_ascii_char () == '('
3218 && gfc_current_ns->proc_name == sym
3219 && !sym->attr.dimension)
3221 gfc_error ("%qs at %C is the name of a recursive function "
3222 "and so refers to the result variable. Use an "
3223 "explicit RESULT variable for direct recursion "
3224 "(12.5.2.1)", sym->name);
3225 return MATCH_ERROR;
3228 if (gfc_is_function_return_value (sym, gfc_current_ns))
3229 goto variable;
3231 if (sym->attr.entry
3232 && (sym->ns == gfc_current_ns
3233 || sym->ns == gfc_current_ns->parent))
3235 gfc_entry_list *el = NULL;
3237 for (el = sym->ns->entries; el; el = el->next)
3238 if (sym == el->sym)
3239 goto variable;
3243 if (gfc_matching_procptr_assignment)
3244 goto procptr0;
3246 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
3247 goto function0;
3249 if (sym->attr.generic)
3250 goto generic_function;
3252 switch (sym->attr.flavor)
3254 case FL_VARIABLE:
3255 variable:
3256 e = gfc_get_expr ();
3258 e->expr_type = EXPR_VARIABLE;
3259 e->symtree = symtree;
3261 m = gfc_match_varspec (e, 0, false, true);
3262 break;
3264 case FL_PARAMETER:
3265 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
3266 end up here. Unfortunately, sym->value->expr_type is set to
3267 EXPR_CONSTANT, and so the if () branch would be followed without
3268 the !sym->as check. */
3269 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
3270 e = gfc_copy_expr (sym->value);
3271 else
3273 e = gfc_get_expr ();
3274 e->expr_type = EXPR_VARIABLE;
3277 e->symtree = symtree;
3278 m = gfc_match_varspec (e, 0, false, true);
3280 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
3281 break;
3283 /* Variable array references to derived type parameters cause
3284 all sorts of headaches in simplification. Treating such
3285 expressions as variable works just fine for all array
3286 references. */
3287 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
3289 for (ref = e->ref; ref; ref = ref->next)
3290 if (ref->type == REF_ARRAY)
3291 break;
3293 if (ref == NULL || ref->u.ar.type == AR_FULL)
3294 break;
3296 ref = e->ref;
3297 e->ref = NULL;
3298 gfc_free_expr (e);
3299 e = gfc_get_expr ();
3300 e->expr_type = EXPR_VARIABLE;
3301 e->symtree = symtree;
3302 e->ref = ref;
3305 break;
3307 case FL_STRUCT:
3308 case FL_DERIVED:
3309 sym = gfc_use_derived (sym);
3310 if (sym == NULL)
3311 m = MATCH_ERROR;
3312 else
3313 goto generic_function;
3314 break;
3316 /* If we're here, then the name is known to be the name of a
3317 procedure, yet it is not sure to be the name of a function. */
3318 case FL_PROCEDURE:
3320 /* Procedure Pointer Assignments. */
3321 procptr0:
3322 if (gfc_matching_procptr_assignment)
3324 gfc_gobble_whitespace ();
3325 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
3326 /* Parse functions returning a procptr. */
3327 goto function0;
3329 e = gfc_get_expr ();
3330 e->expr_type = EXPR_VARIABLE;
3331 e->symtree = symtree;
3332 m = gfc_match_varspec (e, 0, false, true);
3333 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
3334 && sym->ts.type == BT_UNKNOWN
3335 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
3337 m = MATCH_ERROR;
3338 break;
3340 break;
3343 if (sym->attr.subroutine)
3345 gfc_error ("Unexpected use of subroutine name %qs at %C",
3346 sym->name);
3347 m = MATCH_ERROR;
3348 break;
3351 /* At this point, the name has to be a non-statement function.
3352 If the name is the same as the current function being
3353 compiled, then we have a variable reference (to the function
3354 result) if the name is non-recursive. */
3356 st = gfc_enclosing_unit (NULL);
3358 if (st != NULL
3359 && st->state == COMP_FUNCTION
3360 && st->sym == sym
3361 && !sym->attr.recursive)
3363 e = gfc_get_expr ();
3364 e->symtree = symtree;
3365 e->expr_type = EXPR_VARIABLE;
3367 m = gfc_match_varspec (e, 0, false, true);
3368 break;
3371 /* Match a function reference. */
3372 function0:
3373 m = gfc_match_actual_arglist (0, &actual_arglist);
3374 if (m == MATCH_NO)
3376 if (sym->attr.proc == PROC_ST_FUNCTION)
3377 gfc_error ("Statement function %qs requires argument list at %C",
3378 sym->name);
3379 else
3380 gfc_error ("Function %qs requires an argument list at %C",
3381 sym->name);
3383 m = MATCH_ERROR;
3384 break;
3387 if (m != MATCH_YES)
3389 m = MATCH_ERROR;
3390 break;
3393 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
3394 sym = symtree->n.sym;
3396 replace_hidden_procptr_result (&sym, &symtree);
3398 e = gfc_get_expr ();
3399 e->symtree = symtree;
3400 e->expr_type = EXPR_FUNCTION;
3401 e->value.function.actual = actual_arglist;
3402 e->where = gfc_current_locus;
3404 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3405 && CLASS_DATA (sym)->as)
3406 e->rank = CLASS_DATA (sym)->as->rank;
3407 else if (sym->as != NULL)
3408 e->rank = sym->as->rank;
3410 if (!sym->attr.function
3411 && !gfc_add_function (&sym->attr, sym->name, NULL))
3413 m = MATCH_ERROR;
3414 break;
3417 /* Check here for the existence of at least one argument for the
3418 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
3419 argument(s) given will be checked in gfc_iso_c_func_interface,
3420 during resolution of the function call. */
3421 if (sym->attr.is_iso_c == 1
3422 && (sym->from_intmod == INTMOD_ISO_C_BINDING
3423 && (sym->intmod_sym_id == ISOCBINDING_LOC
3424 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
3425 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
3427 /* make sure we were given a param */
3428 if (actual_arglist == NULL)
3430 gfc_error ("Missing argument to %qs at %C", sym->name);
3431 m = MATCH_ERROR;
3432 break;
3436 if (sym->result == NULL)
3437 sym->result = sym;
3439 gfc_gobble_whitespace ();
3440 /* F08:C612. */
3441 if (gfc_peek_ascii_char() == '%')
3443 gfc_error ("The leftmost part-ref in a data-ref can not be a "
3444 "function reference at %C");
3445 m = MATCH_ERROR;
3448 m = MATCH_YES;
3449 break;
3451 case FL_UNKNOWN:
3453 /* Special case for derived type variables that get their types
3454 via an IMPLICIT statement. This can't wait for the
3455 resolution phase. */
3457 old_loc = gfc_current_locus;
3458 if (gfc_match_member_sep (sym) == MATCH_YES
3459 && sym->ts.type == BT_UNKNOWN
3460 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
3461 gfc_set_default_type (sym, 0, sym->ns);
3462 gfc_current_locus = old_loc;
3464 /* If the symbol has a (co)dimension attribute, the expression is a
3465 variable. */
3467 if (sym->attr.dimension || sym->attr.codimension)
3469 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3471 m = MATCH_ERROR;
3472 break;
3475 e = gfc_get_expr ();
3476 e->symtree = symtree;
3477 e->expr_type = EXPR_VARIABLE;
3478 m = gfc_match_varspec (e, 0, false, true);
3479 break;
3482 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3483 && (CLASS_DATA (sym)->attr.dimension
3484 || CLASS_DATA (sym)->attr.codimension))
3486 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3488 m = MATCH_ERROR;
3489 break;
3492 e = gfc_get_expr ();
3493 e->symtree = symtree;
3494 e->expr_type = EXPR_VARIABLE;
3495 m = gfc_match_varspec (e, 0, false, true);
3496 break;
3499 /* Name is not an array, so we peek to see if a '(' implies a
3500 function call or a substring reference. Otherwise the
3501 variable is just a scalar. */
3503 gfc_gobble_whitespace ();
3504 if (gfc_peek_ascii_char () != '(')
3506 /* Assume a scalar variable */
3507 e = gfc_get_expr ();
3508 e->symtree = symtree;
3509 e->expr_type = EXPR_VARIABLE;
3511 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3513 m = MATCH_ERROR;
3514 break;
3517 /*FIXME:??? gfc_match_varspec does set this for us: */
3518 e->ts = sym->ts;
3519 m = gfc_match_varspec (e, 0, false, true);
3520 break;
3523 /* See if this is a function reference with a keyword argument
3524 as first argument. We do this because otherwise a spurious
3525 symbol would end up in the symbol table. */
3527 old_loc = gfc_current_locus;
3528 m2 = gfc_match (" ( %n =", argname);
3529 gfc_current_locus = old_loc;
3531 e = gfc_get_expr ();
3532 e->symtree = symtree;
3534 if (m2 != MATCH_YES)
3536 /* Try to figure out whether we're dealing with a character type.
3537 We're peeking ahead here, because we don't want to call
3538 match_substring if we're dealing with an implicitly typed
3539 non-character variable. */
3540 implicit_char = false;
3541 if (sym->ts.type == BT_UNKNOWN)
3543 ts = gfc_get_default_type (sym->name, NULL);
3544 if (ts->type == BT_CHARACTER)
3545 implicit_char = true;
3548 /* See if this could possibly be a substring reference of a name
3549 that we're not sure is a variable yet. */
3551 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3552 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES)
3555 e->expr_type = EXPR_VARIABLE;
3557 if (sym->attr.flavor != FL_VARIABLE
3558 && !gfc_add_flavor (&sym->attr, FL_VARIABLE,
3559 sym->name, NULL))
3561 m = MATCH_ERROR;
3562 break;
3565 if (sym->ts.type == BT_UNKNOWN
3566 && !gfc_set_default_type (sym, 1, NULL))
3568 m = MATCH_ERROR;
3569 break;
3572 e->ts = sym->ts;
3573 if (e->ref)
3574 e->ts.u.cl = NULL;
3575 m = MATCH_YES;
3576 break;
3580 /* Give up, assume we have a function. */
3582 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3583 sym = symtree->n.sym;
3584 e->expr_type = EXPR_FUNCTION;
3586 if (!sym->attr.function
3587 && !gfc_add_function (&sym->attr, sym->name, NULL))
3589 m = MATCH_ERROR;
3590 break;
3593 sym->result = sym;
3595 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3596 if (m == MATCH_NO)
3597 gfc_error ("Missing argument list in function %qs at %C", sym->name);
3599 if (m != MATCH_YES)
3601 m = MATCH_ERROR;
3602 break;
3605 /* If our new function returns a character, array or structure
3606 type, it might have subsequent references. */
3608 m = gfc_match_varspec (e, 0, false, true);
3609 if (m == MATCH_NO)
3610 m = MATCH_YES;
3612 break;
3614 generic_function:
3615 /* Look for symbol first; if not found, look for STRUCTURE type symbol
3616 specially. Creates a generic symbol for derived types. */
3617 gfc_find_sym_tree (name, NULL, 1, &symtree);
3618 if (!symtree)
3619 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree);
3620 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3621 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3623 e = gfc_get_expr ();
3624 e->symtree = symtree;
3625 e->expr_type = EXPR_FUNCTION;
3627 if (gfc_fl_struct (sym->attr.flavor))
3629 e->value.function.esym = sym;
3630 e->symtree->n.sym->attr.generic = 1;
3633 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3634 break;
3636 case FL_NAMELIST:
3637 m = MATCH_ERROR;
3638 break;
3640 default:
3641 gfc_error ("Symbol at %C is not appropriate for an expression");
3642 return MATCH_ERROR;
3645 if (m == MATCH_YES)
3647 e->where = where;
3648 *result = e;
3650 else
3651 gfc_free_expr (e);
3653 return m;
3657 /* Match a variable, i.e. something that can be assigned to. This
3658 starts as a symbol, can be a structure component or an array
3659 reference. It can be a function if the function doesn't have a
3660 separate RESULT variable. If the symbol has not been previously
3661 seen, we assume it is a variable.
3663 This function is called by two interface functions:
3664 gfc_match_variable, which has host_flag = 1, and
3665 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3666 match of the symbol to the local scope. */
3668 static match
3669 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3671 gfc_symbol *sym, *dt_sym;
3672 gfc_symtree *st;
3673 gfc_expr *expr;
3674 locus where, old_loc;
3675 match m;
3677 /* Since nothing has any business being an lvalue in a module
3678 specification block, an interface block or a contains section,
3679 we force the changed_symbols mechanism to work by setting
3680 host_flag to 0. This prevents valid symbols that have the name
3681 of keywords, such as 'end', being turned into variables by
3682 failed matching to assignments for, e.g., END INTERFACE. */
3683 if (gfc_current_state () == COMP_MODULE
3684 || gfc_current_state () == COMP_SUBMODULE
3685 || gfc_current_state () == COMP_INTERFACE
3686 || gfc_current_state () == COMP_CONTAINS)
3687 host_flag = 0;
3689 where = gfc_current_locus;
3690 m = gfc_match_sym_tree (&st, host_flag);
3691 if (m != MATCH_YES)
3692 return m;
3694 sym = st->n.sym;
3696 /* If this is an implicit do loop index and implicitly typed,
3697 it should not be host associated. */
3698 m = check_for_implicit_index (&st, &sym);
3699 if (m != MATCH_YES)
3700 return m;
3702 sym->attr.implied_index = 0;
3704 gfc_set_sym_referenced (sym);
3706 /* STRUCTUREs may share names with variables, but derived types may not. */
3707 if (sym->attr.flavor == FL_PROCEDURE && sym->generic
3708 && (dt_sym = gfc_find_dt_in_generic (sym)))
3710 if (dt_sym->attr.flavor == FL_DERIVED)
3711 gfc_error ("Derived type %qs cannot be used as a variable at %C",
3712 sym->name);
3713 return MATCH_ERROR;
3716 switch (sym->attr.flavor)
3718 case FL_VARIABLE:
3719 /* Everything is alright. */
3720 break;
3722 case FL_UNKNOWN:
3724 sym_flavor flavor = FL_UNKNOWN;
3726 gfc_gobble_whitespace ();
3728 if (sym->attr.external || sym->attr.procedure
3729 || sym->attr.function || sym->attr.subroutine)
3730 flavor = FL_PROCEDURE;
3732 /* If it is not a procedure, is not typed and is host associated,
3733 we cannot give it a flavor yet. */
3734 else if (sym->ns == gfc_current_ns->parent
3735 && sym->ts.type == BT_UNKNOWN)
3736 break;
3738 /* These are definitive indicators that this is a variable. */
3739 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3740 || sym->attr.pointer || sym->as != NULL)
3741 flavor = FL_VARIABLE;
3743 if (flavor != FL_UNKNOWN
3744 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL))
3745 return MATCH_ERROR;
3747 break;
3749 case FL_PARAMETER:
3750 if (equiv_flag)
3752 gfc_error ("Named constant at %C in an EQUIVALENCE");
3753 return MATCH_ERROR;
3755 /* Otherwise this is checked for and an error given in the
3756 variable definition context checks. */
3757 break;
3759 case FL_PROCEDURE:
3760 /* Check for a nonrecursive function result variable. */
3761 if (sym->attr.function
3762 && !sym->attr.external
3763 && sym->result == sym
3764 && (gfc_is_function_return_value (sym, gfc_current_ns)
3765 || (sym->attr.entry
3766 && sym->ns == gfc_current_ns)
3767 || (sym->attr.entry
3768 && sym->ns == gfc_current_ns->parent)))
3770 /* If a function result is a derived type, then the derived
3771 type may still have to be resolved. */
3773 if (sym->ts.type == BT_DERIVED
3774 && gfc_use_derived (sym->ts.u.derived) == NULL)
3775 return MATCH_ERROR;
3776 break;
3779 if (sym->attr.proc_pointer
3780 || replace_hidden_procptr_result (&sym, &st))
3781 break;
3783 /* Fall through to error */
3784 gcc_fallthrough ();
3786 default:
3787 gfc_error ("%qs at %C is not a variable", sym->name);
3788 return MATCH_ERROR;
3791 /* Special case for derived type variables that get their types
3792 via an IMPLICIT statement. This can't wait for the
3793 resolution phase. */
3796 gfc_namespace * implicit_ns;
3798 if (gfc_current_ns->proc_name == sym)
3799 implicit_ns = gfc_current_ns;
3800 else
3801 implicit_ns = sym->ns;
3803 old_loc = gfc_current_locus;
3804 if (gfc_match_member_sep (sym) == MATCH_YES
3805 && sym->ts.type == BT_UNKNOWN
3806 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3807 gfc_set_default_type (sym, 0, implicit_ns);
3808 gfc_current_locus = old_loc;
3811 expr = gfc_get_expr ();
3813 expr->expr_type = EXPR_VARIABLE;
3814 expr->symtree = st;
3815 expr->ts = sym->ts;
3816 expr->where = where;
3818 /* Now see if we have to do more. */
3819 m = gfc_match_varspec (expr, equiv_flag, false, false);
3820 if (m != MATCH_YES)
3822 gfc_free_expr (expr);
3823 return m;
3826 *result = expr;
3827 return MATCH_YES;
3831 match
3832 gfc_match_variable (gfc_expr **result, int equiv_flag)
3834 return match_variable (result, equiv_flag, 1);
3838 match
3839 gfc_match_equiv_variable (gfc_expr **result)
3841 return match_variable (result, 1, 0);