openmp.c (match_acc): New generic function to parse OpenACC directives.
[official-gcc.git] / gcc / fortran / primary.c
blobc2faa0f3e10bf7c5942e2b18c536a1d2f765f842
1 /* Primary expression subroutines
2 Copyright (C) 2000-2016 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "options.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
28 #include "parse.h"
29 #include "constructor.h"
31 int matching_actual_arglist = 0;
33 /* Matches a kind-parameter expression, which is either a named
34 symbolic constant or a nonnegative integer constant. If
35 successful, sets the kind value to the correct integer.
36 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
37 symbol like e.g. 'c_int'. */
39 static match
40 match_kind_param (int *kind, int *is_iso_c)
42 char name[GFC_MAX_SYMBOL_LEN + 1];
43 gfc_symbol *sym;
44 const char *p;
45 match m;
47 *is_iso_c = 0;
49 m = gfc_match_small_literal_int (kind, NULL);
50 if (m != MATCH_NO)
51 return m;
53 m = gfc_match_name (name);
54 if (m != MATCH_YES)
55 return m;
57 if (gfc_find_symbol (name, NULL, 1, &sym))
58 return MATCH_ERROR;
60 if (sym == NULL)
61 return MATCH_NO;
63 *is_iso_c = sym->attr.is_iso_c;
65 if (sym->attr.flavor != FL_PARAMETER)
66 return MATCH_NO;
68 if (sym->value == NULL)
69 return MATCH_NO;
71 p = gfc_extract_int (sym->value, kind);
72 if (p != NULL)
73 return MATCH_NO;
75 gfc_set_sym_referenced (sym);
77 if (*kind < 0)
78 return MATCH_NO;
80 return MATCH_YES;
84 /* Get a trailing kind-specification for non-character variables.
85 Returns:
86 * the integer kind value or
87 * -1 if an error was generated,
88 * -2 if no kind was found.
89 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
90 symbol like e.g. 'c_int'. */
92 static int
93 get_kind (int *is_iso_c)
95 int kind;
96 match m;
98 *is_iso_c = 0;
100 if (gfc_match_char ('_') != MATCH_YES)
101 return -2;
103 m = match_kind_param (&kind, is_iso_c);
104 if (m == MATCH_NO)
105 gfc_error ("Missing kind-parameter at %C");
107 return (m == MATCH_YES) ? kind : -1;
111 /* Given a character and a radix, see if the character is a valid
112 digit in that radix. */
115 gfc_check_digit (char c, int radix)
117 int r;
119 switch (radix)
121 case 2:
122 r = ('0' <= c && c <= '1');
123 break;
125 case 8:
126 r = ('0' <= c && c <= '7');
127 break;
129 case 10:
130 r = ('0' <= c && c <= '9');
131 break;
133 case 16:
134 r = ISXDIGIT (c);
135 break;
137 default:
138 gfc_internal_error ("gfc_check_digit(): bad radix");
141 return r;
145 /* Match the digit string part of an integer if signflag is not set,
146 the signed digit string part if signflag is set. If the buffer
147 is NULL, we just count characters for the resolution pass. Returns
148 the number of characters matched, -1 for no match. */
150 static int
151 match_digits (int signflag, int radix, char *buffer)
153 locus old_loc;
154 int length;
155 char c;
157 length = 0;
158 c = gfc_next_ascii_char ();
160 if (signflag && (c == '+' || c == '-'))
162 if (buffer != NULL)
163 *buffer++ = c;
164 gfc_gobble_whitespace ();
165 c = gfc_next_ascii_char ();
166 length++;
169 if (!gfc_check_digit (c, radix))
170 return -1;
172 length++;
173 if (buffer != NULL)
174 *buffer++ = c;
176 for (;;)
178 old_loc = gfc_current_locus;
179 c = gfc_next_ascii_char ();
181 if (!gfc_check_digit (c, radix))
182 break;
184 if (buffer != NULL)
185 *buffer++ = c;
186 length++;
189 gfc_current_locus = old_loc;
191 return length;
195 /* Match an integer (digit string and optional kind).
196 A sign will be accepted if signflag is set. */
198 static match
199 match_integer_constant (gfc_expr **result, int signflag)
201 int length, kind, is_iso_c;
202 locus old_loc;
203 char *buffer;
204 gfc_expr *e;
206 old_loc = gfc_current_locus;
207 gfc_gobble_whitespace ();
209 length = match_digits (signflag, 10, NULL);
210 gfc_current_locus = old_loc;
211 if (length == -1)
212 return MATCH_NO;
214 buffer = (char *) alloca (length + 1);
215 memset (buffer, '\0', length + 1);
217 gfc_gobble_whitespace ();
219 match_digits (signflag, 10, buffer);
221 kind = get_kind (&is_iso_c);
222 if (kind == -2)
223 kind = gfc_default_integer_kind;
224 if (kind == -1)
225 return MATCH_ERROR;
227 if (kind == 4 && flag_integer4_kind == 8)
228 kind = 8;
230 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
232 gfc_error ("Integer kind %d at %C not available", kind);
233 return MATCH_ERROR;
236 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
237 e->ts.is_c_interop = is_iso_c;
239 if (gfc_range_check (e) != ARITH_OK)
241 gfc_error ("Integer too big for its kind at %C. This check can be "
242 "disabled with the option -fno-range-check");
244 gfc_free_expr (e);
245 return MATCH_ERROR;
248 *result = e;
249 return MATCH_YES;
253 /* Match a Hollerith constant. */
255 static match
256 match_hollerith_constant (gfc_expr **result)
258 locus old_loc;
259 gfc_expr *e = NULL;
260 const char *msg;
261 int num, pad;
262 int i;
264 old_loc = gfc_current_locus;
265 gfc_gobble_whitespace ();
267 if (match_integer_constant (&e, 0) == MATCH_YES
268 && gfc_match_char ('h') == MATCH_YES)
270 if (!gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant at %C"))
271 goto cleanup;
273 msg = gfc_extract_int (e, &num);
274 if (msg != NULL)
276 gfc_error (msg);
277 goto cleanup;
279 if (num == 0)
281 gfc_error ("Invalid Hollerith constant: %L must contain at least "
282 "one character", &old_loc);
283 goto cleanup;
285 if (e->ts.kind != gfc_default_integer_kind)
287 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
288 "should be default", &old_loc);
289 goto cleanup;
291 else
293 gfc_free_expr (e);
294 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
295 &gfc_current_locus);
297 /* Calculate padding needed to fit default integer memory. */
298 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
300 e->representation.string = XCNEWVEC (char, num + pad + 1);
302 for (i = 0; i < num; i++)
304 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
305 if (! gfc_wide_fits_in_byte (c))
307 gfc_error ("Invalid Hollerith constant at %L contains a "
308 "wide character", &old_loc);
309 goto cleanup;
312 e->representation.string[i] = (unsigned char) c;
315 /* Now pad with blanks and end with a null char. */
316 for (i = 0; i < pad; i++)
317 e->representation.string[num + i] = ' ';
319 e->representation.string[num + i] = '\0';
320 e->representation.length = num + pad;
321 e->ts.u.pad = pad;
323 *result = e;
324 return MATCH_YES;
328 gfc_free_expr (e);
329 gfc_current_locus = old_loc;
330 return MATCH_NO;
332 cleanup:
333 gfc_free_expr (e);
334 return MATCH_ERROR;
338 /* Match a binary, octal or hexadecimal constant that can be found in
339 a DATA statement. The standard permits b'010...', o'73...', and
340 z'a1...' where b, o, and z can be capital letters. This function
341 also accepts postfixed forms of the constants: '01...'b, '73...'o,
342 and 'a1...'z. An additional extension is the use of x for z. */
344 static match
345 match_boz_constant (gfc_expr **result)
347 int radix, length, x_hex, kind;
348 locus old_loc, start_loc;
349 char *buffer, post, delim;
350 gfc_expr *e;
352 start_loc = old_loc = gfc_current_locus;
353 gfc_gobble_whitespace ();
355 x_hex = 0;
356 switch (post = gfc_next_ascii_char ())
358 case 'b':
359 radix = 2;
360 post = 0;
361 break;
362 case 'o':
363 radix = 8;
364 post = 0;
365 break;
366 case 'x':
367 x_hex = 1;
368 /* Fall through. */
369 case 'z':
370 radix = 16;
371 post = 0;
372 break;
373 case '\'':
374 /* Fall through. */
375 case '\"':
376 delim = post;
377 post = 1;
378 radix = 16; /* Set to accept any valid digit string. */
379 break;
380 default:
381 goto backup;
384 /* No whitespace allowed here. */
386 if (post == 0)
387 delim = gfc_next_ascii_char ();
389 if (delim != '\'' && delim != '\"')
390 goto backup;
392 if (x_hex
393 && (!gfc_notify_std(GFC_STD_GNU, "Hexadecimal "
394 "constant at %C uses non-standard syntax")))
395 return MATCH_ERROR;
397 old_loc = gfc_current_locus;
399 length = match_digits (0, radix, NULL);
400 if (length == -1)
402 gfc_error ("Empty set of digits in BOZ constant at %C");
403 return MATCH_ERROR;
406 if (gfc_next_ascii_char () != delim)
408 gfc_error ("Illegal character in BOZ constant at %C");
409 return MATCH_ERROR;
412 if (post == 1)
414 switch (gfc_next_ascii_char ())
416 case 'b':
417 radix = 2;
418 break;
419 case 'o':
420 radix = 8;
421 break;
422 case 'x':
423 /* Fall through. */
424 case 'z':
425 radix = 16;
426 break;
427 default:
428 goto backup;
431 if (!gfc_notify_std (GFC_STD_GNU, "BOZ constant "
432 "at %C uses non-standard postfix syntax"))
433 return MATCH_ERROR;
436 gfc_current_locus = old_loc;
438 buffer = (char *) alloca (length + 1);
439 memset (buffer, '\0', length + 1);
441 match_digits (0, radix, buffer);
442 gfc_next_ascii_char (); /* Eat delimiter. */
443 if (post == 1)
444 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
446 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
447 "If a data-stmt-constant is a boz-literal-constant, the corresponding
448 variable shall be of type integer. The boz-literal-constant is treated
449 as if it were an int-literal-constant with a kind-param that specifies
450 the representation method with the largest decimal exponent range
451 supported by the processor." */
453 kind = gfc_max_integer_kind;
454 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
456 /* Mark as boz variable. */
457 e->is_boz = 1;
459 if (gfc_range_check (e) != ARITH_OK)
461 gfc_error ("Integer too big for integer kind %i at %C", kind);
462 gfc_free_expr (e);
463 return MATCH_ERROR;
466 if (!gfc_in_match_data ()
467 && (!gfc_notify_std(GFC_STD_F2003, "BOZ used outside a DATA "
468 "statement at %C")))
469 return MATCH_ERROR;
471 *result = e;
472 return MATCH_YES;
474 backup:
475 gfc_current_locus = start_loc;
476 return MATCH_NO;
480 /* Match a real constant of some sort. Allow a signed constant if signflag
481 is nonzero. */
483 static match
484 match_real_constant (gfc_expr **result, int signflag)
486 int kind, count, seen_dp, seen_digits, is_iso_c;
487 locus old_loc, temp_loc;
488 char *p, *buffer, c, exp_char;
489 gfc_expr *e;
490 bool negate;
492 old_loc = gfc_current_locus;
493 gfc_gobble_whitespace ();
495 e = NULL;
497 count = 0;
498 seen_dp = 0;
499 seen_digits = 0;
500 exp_char = ' ';
501 negate = FALSE;
503 c = gfc_next_ascii_char ();
504 if (signflag && (c == '+' || c == '-'))
506 if (c == '-')
507 negate = TRUE;
509 gfc_gobble_whitespace ();
510 c = gfc_next_ascii_char ();
513 /* Scan significand. */
514 for (;; c = gfc_next_ascii_char (), count++)
516 if (c == '.')
518 if (seen_dp)
519 goto done;
521 /* Check to see if "." goes with a following operator like
522 ".eq.". */
523 temp_loc = gfc_current_locus;
524 c = gfc_next_ascii_char ();
526 if (c == 'e' || c == 'd' || c == 'q')
528 c = gfc_next_ascii_char ();
529 if (c == '.')
530 goto done; /* Operator named .e. or .d. */
533 if (ISALPHA (c))
534 goto done; /* Distinguish 1.e9 from 1.eq.2 */
536 gfc_current_locus = temp_loc;
537 seen_dp = 1;
538 continue;
541 if (ISDIGIT (c))
543 seen_digits = 1;
544 continue;
547 break;
550 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
551 goto done;
552 exp_char = c;
555 if (c == 'q')
557 if (!gfc_notify_std (GFC_STD_GNU, "exponent-letter 'q' in "
558 "real-literal-constant at %C"))
559 return MATCH_ERROR;
560 else if (warn_real_q_constant)
561 gfc_warning (OPT_Wreal_q_constant,
562 "Extension: exponent-letter %<q%> in real-literal-constant "
563 "at %C");
566 /* Scan exponent. */
567 c = gfc_next_ascii_char ();
568 count++;
570 if (c == '+' || c == '-')
571 { /* optional sign */
572 c = gfc_next_ascii_char ();
573 count++;
576 if (!ISDIGIT (c))
578 gfc_error ("Missing exponent in real number at %C");
579 return MATCH_ERROR;
582 while (ISDIGIT (c))
584 c = gfc_next_ascii_char ();
585 count++;
588 done:
589 /* Check that we have a numeric constant. */
590 if (!seen_digits || (!seen_dp && exp_char == ' '))
592 gfc_current_locus = old_loc;
593 return MATCH_NO;
596 /* Convert the number. */
597 gfc_current_locus = old_loc;
598 gfc_gobble_whitespace ();
600 buffer = (char *) alloca (count + 1);
601 memset (buffer, '\0', count + 1);
603 p = buffer;
604 c = gfc_next_ascii_char ();
605 if (c == '+' || c == '-')
607 gfc_gobble_whitespace ();
608 c = gfc_next_ascii_char ();
611 /* Hack for mpfr_set_str(). */
612 for (;;)
614 if (c == 'd' || c == 'q')
615 *p = 'e';
616 else
617 *p = c;
618 p++;
619 if (--count == 0)
620 break;
622 c = gfc_next_ascii_char ();
625 kind = get_kind (&is_iso_c);
626 if (kind == -1)
627 goto cleanup;
629 switch (exp_char)
631 case 'd':
632 if (kind != -2)
634 gfc_error ("Real number at %C has a %<d%> exponent and an explicit "
635 "kind");
636 goto cleanup;
638 kind = gfc_default_double_kind;
640 if (kind == 4)
642 if (flag_real4_kind == 8)
643 kind = 8;
644 if (flag_real4_kind == 10)
645 kind = 10;
646 if (flag_real4_kind == 16)
647 kind = 16;
650 if (kind == 8)
652 if (flag_real8_kind == 4)
653 kind = 4;
654 if (flag_real8_kind == 10)
655 kind = 10;
656 if (flag_real8_kind == 16)
657 kind = 16;
659 break;
661 case 'q':
662 if (kind != -2)
664 gfc_error ("Real number at %C has a %<q%> exponent and an explicit "
665 "kind");
666 goto cleanup;
669 /* The maximum possible real kind type parameter is 16. First, try
670 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
671 extended precision. If neither value works, just given up. */
672 kind = 16;
673 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
675 kind = 10;
676 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
678 gfc_error ("Invalid exponent-letter %<q%> in "
679 "real-literal-constant at %C");
680 goto cleanup;
683 break;
685 default:
686 if (kind == -2)
687 kind = gfc_default_real_kind;
689 if (kind == 4)
691 if (flag_real4_kind == 8)
692 kind = 8;
693 if (flag_real4_kind == 10)
694 kind = 10;
695 if (flag_real4_kind == 16)
696 kind = 16;
699 if (kind == 8)
701 if (flag_real8_kind == 4)
702 kind = 4;
703 if (flag_real8_kind == 10)
704 kind = 10;
705 if (flag_real8_kind == 16)
706 kind = 16;
709 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
711 gfc_error ("Invalid real kind %d at %C", kind);
712 goto cleanup;
716 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
717 if (negate)
718 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
719 e->ts.is_c_interop = is_iso_c;
721 switch (gfc_range_check (e))
723 case ARITH_OK:
724 break;
725 case ARITH_OVERFLOW:
726 gfc_error ("Real constant overflows its kind at %C");
727 goto cleanup;
729 case ARITH_UNDERFLOW:
730 if (warn_underflow)
731 gfc_warning (OPT_Wunderflow, "Real constant underflows its kind at %C");
732 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
733 break;
735 default:
736 gfc_internal_error ("gfc_range_check() returned bad value");
739 /* Warn about trailing digits which suggest the user added too many
740 trailing digits, which may cause the appearance of higher pecision
741 than the kind kan support.
743 This is done by replacing the rightmost non-zero digit with zero
744 and comparing with the original value. If these are equal, we
745 assume the user supplied more digits than intended (or forgot to
746 convert to the correct kind).
749 if (warn_conversion_extra)
751 mpfr_t r;
752 char *c, *p;
753 bool did_break;
755 c = strchr (buffer, 'e');
756 if (c == NULL)
757 c = buffer + strlen(buffer);
759 did_break = false;
760 for (p = c - 1; p >= buffer; p--)
762 if (*p == '.')
763 continue;
765 if (*p != '0')
767 *p = '0';
768 did_break = true;
769 break;
773 if (did_break)
775 mpfr_init (r);
776 mpfr_set_str (r, buffer, 10, GFC_RND_MODE);
777 if (negate)
778 mpfr_neg (r, r, GFC_RND_MODE);
780 mpfr_sub (r, r, e->value.real, GFC_RND_MODE);
782 if (mpfr_cmp_ui (r, 0) == 0)
783 gfc_warning (OPT_Wconversion_extra, "Non-significant digits "
784 "in %qs number at %C, maybe incorrect KIND",
785 gfc_typename (&e->ts));
787 mpfr_clear (r);
791 *result = e;
792 return MATCH_YES;
794 cleanup:
795 gfc_free_expr (e);
796 return MATCH_ERROR;
800 /* Match a substring reference. */
802 static match
803 match_substring (gfc_charlen *cl, int init, gfc_ref **result, bool deferred)
805 gfc_expr *start, *end;
806 locus old_loc;
807 gfc_ref *ref;
808 match m;
810 start = NULL;
811 end = NULL;
813 old_loc = gfc_current_locus;
815 m = gfc_match_char ('(');
816 if (m != MATCH_YES)
817 return MATCH_NO;
819 if (gfc_match_char (':') != MATCH_YES)
821 if (init)
822 m = gfc_match_init_expr (&start);
823 else
824 m = gfc_match_expr (&start);
826 if (m != MATCH_YES)
828 m = MATCH_NO;
829 goto cleanup;
832 m = gfc_match_char (':');
833 if (m != MATCH_YES)
834 goto cleanup;
837 if (gfc_match_char (')') != MATCH_YES)
839 if (init)
840 m = gfc_match_init_expr (&end);
841 else
842 m = gfc_match_expr (&end);
844 if (m == MATCH_NO)
845 goto syntax;
846 if (m == MATCH_ERROR)
847 goto cleanup;
849 m = gfc_match_char (')');
850 if (m == MATCH_NO)
851 goto syntax;
854 /* Optimize away the (:) reference. */
855 if (start == NULL && end == NULL && !deferred)
856 ref = NULL;
857 else
859 ref = gfc_get_ref ();
861 ref->type = REF_SUBSTRING;
862 if (start == NULL)
863 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
864 ref->u.ss.start = start;
865 if (end == NULL && cl)
866 end = gfc_copy_expr (cl->length);
867 ref->u.ss.end = end;
868 ref->u.ss.length = cl;
871 *result = ref;
872 return MATCH_YES;
874 syntax:
875 gfc_error ("Syntax error in SUBSTRING specification at %C");
876 m = MATCH_ERROR;
878 cleanup:
879 gfc_free_expr (start);
880 gfc_free_expr (end);
882 gfc_current_locus = old_loc;
883 return m;
887 /* Reads the next character of a string constant, taking care to
888 return doubled delimiters on the input as a single instance of
889 the delimiter.
891 Special return values for "ret" argument are:
892 -1 End of the string, as determined by the delimiter
893 -2 Unterminated string detected
895 Backslash codes are also expanded at this time. */
897 static gfc_char_t
898 next_string_char (gfc_char_t delimiter, int *ret)
900 locus old_locus;
901 gfc_char_t c;
903 c = gfc_next_char_literal (INSTRING_WARN);
904 *ret = 0;
906 if (c == '\n')
908 *ret = -2;
909 return 0;
912 if (flag_backslash && c == '\\')
914 old_locus = gfc_current_locus;
916 if (gfc_match_special_char (&c) == MATCH_NO)
917 gfc_current_locus = old_locus;
919 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
920 gfc_warning (0, "Extension: backslash character at %C");
923 if (c != delimiter)
924 return c;
926 old_locus = gfc_current_locus;
927 c = gfc_next_char_literal (NONSTRING);
929 if (c == delimiter)
930 return c;
931 gfc_current_locus = old_locus;
933 *ret = -1;
934 return 0;
938 /* Special case of gfc_match_name() that matches a parameter kind name
939 before a string constant. This takes case of the weird but legal
940 case of:
942 kind_____'string'
944 where kind____ is a parameter. gfc_match_name() will happily slurp
945 up all the underscores, which leads to problems. If we return
946 MATCH_YES, the parse pointer points to the final underscore, which
947 is not part of the name. We never return MATCH_ERROR-- errors in
948 the name will be detected later. */
950 static match
951 match_charkind_name (char *name)
953 locus old_loc;
954 char c, peek;
955 int len;
957 gfc_gobble_whitespace ();
958 c = gfc_next_ascii_char ();
959 if (!ISALPHA (c))
960 return MATCH_NO;
962 *name++ = c;
963 len = 1;
965 for (;;)
967 old_loc = gfc_current_locus;
968 c = gfc_next_ascii_char ();
970 if (c == '_')
972 peek = gfc_peek_ascii_char ();
974 if (peek == '\'' || peek == '\"')
976 gfc_current_locus = old_loc;
977 *name = '\0';
978 return MATCH_YES;
982 if (!ISALNUM (c)
983 && c != '_'
984 && (c != '$' || !flag_dollar_ok))
985 break;
987 *name++ = c;
988 if (++len > GFC_MAX_SYMBOL_LEN)
989 break;
992 return MATCH_NO;
996 /* See if the current input matches a character constant. Lots of
997 contortions have to be done to match the kind parameter which comes
998 before the actual string. The main consideration is that we don't
999 want to error out too quickly. For example, we don't actually do
1000 any validation of the kinds until we have actually seen a legal
1001 delimiter. Using match_kind_param() generates errors too quickly. */
1003 static match
1004 match_string_constant (gfc_expr **result)
1006 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
1007 int i, kind, length, save_warn_ampersand, ret;
1008 locus old_locus, start_locus;
1009 gfc_symbol *sym;
1010 gfc_expr *e;
1011 const char *q;
1012 match m;
1013 gfc_char_t c, delimiter, *p;
1015 old_locus = gfc_current_locus;
1017 gfc_gobble_whitespace ();
1019 c = gfc_next_char ();
1020 if (c == '\'' || c == '"')
1022 kind = gfc_default_character_kind;
1023 start_locus = gfc_current_locus;
1024 goto got_delim;
1027 if (gfc_wide_is_digit (c))
1029 kind = 0;
1031 while (gfc_wide_is_digit (c))
1033 kind = kind * 10 + c - '0';
1034 if (kind > 9999999)
1035 goto no_match;
1036 c = gfc_next_char ();
1040 else
1042 gfc_current_locus = old_locus;
1044 m = match_charkind_name (name);
1045 if (m != MATCH_YES)
1046 goto no_match;
1048 if (gfc_find_symbol (name, NULL, 1, &sym)
1049 || sym == NULL
1050 || sym->attr.flavor != FL_PARAMETER)
1051 goto no_match;
1053 kind = -1;
1054 c = gfc_next_char ();
1057 if (c == ' ')
1059 gfc_gobble_whitespace ();
1060 c = gfc_next_char ();
1063 if (c != '_')
1064 goto no_match;
1066 gfc_gobble_whitespace ();
1068 c = gfc_next_char ();
1069 if (c != '\'' && c != '"')
1070 goto no_match;
1072 start_locus = gfc_current_locus;
1074 if (kind == -1)
1076 q = gfc_extract_int (sym->value, &kind);
1077 if (q != NULL)
1079 gfc_error (q);
1080 return MATCH_ERROR;
1082 gfc_set_sym_referenced (sym);
1085 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1087 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1088 return MATCH_ERROR;
1091 got_delim:
1092 /* Scan the string into a block of memory by first figuring out how
1093 long it is, allocating the structure, then re-reading it. This
1094 isn't particularly efficient, but string constants aren't that
1095 common in most code. TODO: Use obstacks? */
1097 delimiter = c;
1098 length = 0;
1100 for (;;)
1102 c = next_string_char (delimiter, &ret);
1103 if (ret == -1)
1104 break;
1105 if (ret == -2)
1107 gfc_current_locus = start_locus;
1108 gfc_error ("Unterminated character constant beginning at %C");
1109 return MATCH_ERROR;
1112 length++;
1115 /* Peek at the next character to see if it is a b, o, z, or x for the
1116 postfixed BOZ literal constants. */
1117 peek = gfc_peek_ascii_char ();
1118 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1119 goto no_match;
1121 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1123 gfc_current_locus = start_locus;
1125 /* We disable the warning for the following loop as the warning has already
1126 been printed in the loop above. */
1127 save_warn_ampersand = warn_ampersand;
1128 warn_ampersand = false;
1130 p = e->value.character.string;
1131 for (i = 0; i < length; i++)
1133 c = next_string_char (delimiter, &ret);
1135 if (!gfc_check_character_range (c, kind))
1137 gfc_free_expr (e);
1138 gfc_error ("Character %qs in string at %C is not representable "
1139 "in character kind %d", gfc_print_wide_char (c), kind);
1140 return MATCH_ERROR;
1143 *p++ = c;
1146 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1147 warn_ampersand = save_warn_ampersand;
1149 next_string_char (delimiter, &ret);
1150 if (ret != -1)
1151 gfc_internal_error ("match_string_constant(): Delimiter not found");
1153 if (match_substring (NULL, 0, &e->ref, false) != MATCH_NO)
1154 e->expr_type = EXPR_SUBSTRING;
1156 *result = e;
1158 return MATCH_YES;
1160 no_match:
1161 gfc_current_locus = old_locus;
1162 return MATCH_NO;
1166 /* Match a .true. or .false. Returns 1 if a .true. was found,
1167 0 if a .false. was found, and -1 otherwise. */
1168 static int
1169 match_logical_constant_string (void)
1171 locus orig_loc = gfc_current_locus;
1173 gfc_gobble_whitespace ();
1174 if (gfc_next_ascii_char () == '.')
1176 char ch = gfc_next_ascii_char ();
1177 if (ch == 'f')
1179 if (gfc_next_ascii_char () == 'a'
1180 && gfc_next_ascii_char () == 'l'
1181 && gfc_next_ascii_char () == 's'
1182 && gfc_next_ascii_char () == 'e'
1183 && gfc_next_ascii_char () == '.')
1184 /* Matched ".false.". */
1185 return 0;
1187 else if (ch == 't')
1189 if (gfc_next_ascii_char () == 'r'
1190 && gfc_next_ascii_char () == 'u'
1191 && gfc_next_ascii_char () == 'e'
1192 && gfc_next_ascii_char () == '.')
1193 /* Matched ".true.". */
1194 return 1;
1197 gfc_current_locus = orig_loc;
1198 return -1;
1201 /* Match a .true. or .false. */
1203 static match
1204 match_logical_constant (gfc_expr **result)
1206 gfc_expr *e;
1207 int i, kind, is_iso_c;
1209 i = match_logical_constant_string ();
1210 if (i == -1)
1211 return MATCH_NO;
1213 kind = get_kind (&is_iso_c);
1214 if (kind == -1)
1215 return MATCH_ERROR;
1216 if (kind == -2)
1217 kind = gfc_default_logical_kind;
1219 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1221 gfc_error ("Bad kind for logical constant at %C");
1222 return MATCH_ERROR;
1225 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1226 e->ts.is_c_interop = is_iso_c;
1228 *result = e;
1229 return MATCH_YES;
1233 /* Match a real or imaginary part of a complex constant that is a
1234 symbolic constant. */
1236 static match
1237 match_sym_complex_part (gfc_expr **result)
1239 char name[GFC_MAX_SYMBOL_LEN + 1];
1240 gfc_symbol *sym;
1241 gfc_expr *e;
1242 match m;
1244 m = gfc_match_name (name);
1245 if (m != MATCH_YES)
1246 return m;
1248 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1249 return MATCH_NO;
1251 if (sym->attr.flavor != FL_PARAMETER)
1253 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1254 return MATCH_ERROR;
1257 if (!sym->value)
1258 goto error;
1260 if (!gfc_numeric_ts (&sym->value->ts))
1262 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1263 return MATCH_ERROR;
1266 if (sym->value->rank != 0)
1268 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1269 return MATCH_ERROR;
1272 if (!gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1273 "complex constant at %C"))
1274 return MATCH_ERROR;
1276 switch (sym->value->ts.type)
1278 case BT_REAL:
1279 e = gfc_copy_expr (sym->value);
1280 break;
1282 case BT_COMPLEX:
1283 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1284 if (e == NULL)
1285 goto error;
1286 break;
1288 case BT_INTEGER:
1289 e = gfc_int2real (sym->value, gfc_default_real_kind);
1290 if (e == NULL)
1291 goto error;
1292 break;
1294 default:
1295 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1298 *result = e; /* e is a scalar, real, constant expression. */
1299 return MATCH_YES;
1301 error:
1302 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1303 return MATCH_ERROR;
1307 /* Match a real or imaginary part of a complex number. */
1309 static match
1310 match_complex_part (gfc_expr **result)
1312 match m;
1314 m = match_sym_complex_part (result);
1315 if (m != MATCH_NO)
1316 return m;
1318 m = match_real_constant (result, 1);
1319 if (m != MATCH_NO)
1320 return m;
1322 return match_integer_constant (result, 1);
1326 /* Try to match a complex constant. */
1328 static match
1329 match_complex_constant (gfc_expr **result)
1331 gfc_expr *e, *real, *imag;
1332 gfc_error_buffer old_error;
1333 gfc_typespec target;
1334 locus old_loc;
1335 int kind;
1336 match m;
1338 old_loc = gfc_current_locus;
1339 real = imag = e = NULL;
1341 m = gfc_match_char ('(');
1342 if (m != MATCH_YES)
1343 return m;
1345 gfc_push_error (&old_error);
1347 m = match_complex_part (&real);
1348 if (m == MATCH_NO)
1350 gfc_free_error (&old_error);
1351 goto cleanup;
1354 if (gfc_match_char (',') == MATCH_NO)
1356 gfc_pop_error (&old_error);
1357 m = MATCH_NO;
1358 goto cleanup;
1361 /* If m is error, then something was wrong with the real part and we
1362 assume we have a complex constant because we've seen the ','. An
1363 ambiguous case here is the start of an iterator list of some
1364 sort. These sort of lists are matched prior to coming here. */
1366 if (m == MATCH_ERROR)
1368 gfc_free_error (&old_error);
1369 goto cleanup;
1371 gfc_pop_error (&old_error);
1373 m = match_complex_part (&imag);
1374 if (m == MATCH_NO)
1375 goto syntax;
1376 if (m == MATCH_ERROR)
1377 goto cleanup;
1379 m = gfc_match_char (')');
1380 if (m == MATCH_NO)
1382 /* Give the matcher for implied do-loops a chance to run. This
1383 yields a much saner error message for (/ (i, 4=i, 6) /). */
1384 if (gfc_peek_ascii_char () == '=')
1386 m = MATCH_ERROR;
1387 goto cleanup;
1389 else
1390 goto syntax;
1393 if (m == MATCH_ERROR)
1394 goto cleanup;
1396 /* Decide on the kind of this complex number. */
1397 if (real->ts.type == BT_REAL)
1399 if (imag->ts.type == BT_REAL)
1400 kind = gfc_kind_max (real, imag);
1401 else
1402 kind = real->ts.kind;
1404 else
1406 if (imag->ts.type == BT_REAL)
1407 kind = imag->ts.kind;
1408 else
1409 kind = gfc_default_real_kind;
1411 gfc_clear_ts (&target);
1412 target.type = BT_REAL;
1413 target.kind = kind;
1415 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1416 gfc_convert_type (real, &target, 2);
1417 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1418 gfc_convert_type (imag, &target, 2);
1420 e = gfc_convert_complex (real, imag, kind);
1421 e->where = gfc_current_locus;
1423 gfc_free_expr (real);
1424 gfc_free_expr (imag);
1426 *result = e;
1427 return MATCH_YES;
1429 syntax:
1430 gfc_error ("Syntax error in COMPLEX constant at %C");
1431 m = MATCH_ERROR;
1433 cleanup:
1434 gfc_free_expr (e);
1435 gfc_free_expr (real);
1436 gfc_free_expr (imag);
1437 gfc_current_locus = old_loc;
1439 return m;
1443 /* Match constants in any of several forms. Returns nonzero for a
1444 match, zero for no match. */
1446 match
1447 gfc_match_literal_constant (gfc_expr **result, int signflag)
1449 match m;
1451 m = match_complex_constant (result);
1452 if (m != MATCH_NO)
1453 return m;
1455 m = match_string_constant (result);
1456 if (m != MATCH_NO)
1457 return m;
1459 m = match_boz_constant (result);
1460 if (m != MATCH_NO)
1461 return m;
1463 m = match_real_constant (result, signflag);
1464 if (m != MATCH_NO)
1465 return m;
1467 m = match_hollerith_constant (result);
1468 if (m != MATCH_NO)
1469 return m;
1471 m = match_integer_constant (result, signflag);
1472 if (m != MATCH_NO)
1473 return m;
1475 m = match_logical_constant (result);
1476 if (m != MATCH_NO)
1477 return m;
1479 return MATCH_NO;
1483 /* This checks if a symbol is the return value of an encompassing function.
1484 Function nesting can be maximally two levels deep, but we may have
1485 additional local namespaces like BLOCK etc. */
1487 bool
1488 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1490 if (!sym->attr.function || (sym->result != sym))
1491 return false;
1492 while (ns)
1494 if (ns->proc_name == sym)
1495 return true;
1496 ns = ns->parent;
1498 return false;
1502 /* Match a single actual argument value. An actual argument is
1503 usually an expression, but can also be a procedure name. If the
1504 argument is a single name, it is not always possible to tell
1505 whether the name is a dummy procedure or not. We treat these cases
1506 by creating an argument that looks like a dummy procedure and
1507 fixing things later during resolution. */
1509 static match
1510 match_actual_arg (gfc_expr **result)
1512 char name[GFC_MAX_SYMBOL_LEN + 1];
1513 gfc_symtree *symtree;
1514 locus where, w;
1515 gfc_expr *e;
1516 char c;
1518 gfc_gobble_whitespace ();
1519 where = gfc_current_locus;
1521 switch (gfc_match_name (name))
1523 case MATCH_ERROR:
1524 return MATCH_ERROR;
1526 case MATCH_NO:
1527 break;
1529 case MATCH_YES:
1530 w = gfc_current_locus;
1531 gfc_gobble_whitespace ();
1532 c = gfc_next_ascii_char ();
1533 gfc_current_locus = w;
1535 if (c != ',' && c != ')')
1536 break;
1538 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1539 break;
1540 /* Handle error elsewhere. */
1542 /* Eliminate a couple of common cases where we know we don't
1543 have a function argument. */
1544 if (symtree == NULL)
1546 gfc_get_sym_tree (name, NULL, &symtree, false);
1547 gfc_set_sym_referenced (symtree->n.sym);
1549 else
1551 gfc_symbol *sym;
1553 sym = symtree->n.sym;
1554 gfc_set_sym_referenced (sym);
1555 if (sym->attr.flavor == FL_NAMELIST)
1557 gfc_error ("Namelist '%s' can not be an argument at %L",
1558 sym->name, &where);
1559 break;
1561 if (sym->attr.flavor != FL_PROCEDURE
1562 && sym->attr.flavor != FL_UNKNOWN)
1563 break;
1565 if (sym->attr.in_common && !sym->attr.proc_pointer)
1567 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE,
1568 sym->name, &sym->declared_at))
1569 return MATCH_ERROR;
1570 break;
1573 /* If the symbol is a function with itself as the result and
1574 is being defined, then we have a variable. */
1575 if (sym->attr.function && sym->result == sym)
1577 if (gfc_is_function_return_value (sym, gfc_current_ns))
1578 break;
1580 if (sym->attr.entry
1581 && (sym->ns == gfc_current_ns
1582 || sym->ns == gfc_current_ns->parent))
1584 gfc_entry_list *el = NULL;
1586 for (el = sym->ns->entries; el; el = el->next)
1587 if (sym == el->sym)
1588 break;
1590 if (el)
1591 break;
1596 e = gfc_get_expr (); /* Leave it unknown for now */
1597 e->symtree = symtree;
1598 e->expr_type = EXPR_VARIABLE;
1599 e->ts.type = BT_PROCEDURE;
1600 e->where = where;
1602 *result = e;
1603 return MATCH_YES;
1606 gfc_current_locus = where;
1607 return gfc_match_expr (result);
1611 /* Match a keyword argument. */
1613 static match
1614 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1616 char name[GFC_MAX_SYMBOL_LEN + 1];
1617 gfc_actual_arglist *a;
1618 locus name_locus;
1619 match m;
1621 name_locus = gfc_current_locus;
1622 m = gfc_match_name (name);
1624 if (m != MATCH_YES)
1625 goto cleanup;
1626 if (gfc_match_char ('=') != MATCH_YES)
1628 m = MATCH_NO;
1629 goto cleanup;
1632 m = match_actual_arg (&actual->expr);
1633 if (m != MATCH_YES)
1634 goto cleanup;
1636 /* Make sure this name has not appeared yet. */
1638 if (name[0] != '\0')
1640 for (a = base; a; a = a->next)
1641 if (a->name != NULL && strcmp (a->name, name) == 0)
1643 gfc_error ("Keyword %qs at %C has already appeared in the "
1644 "current argument list", name);
1645 return MATCH_ERROR;
1649 actual->name = gfc_get_string (name);
1650 return MATCH_YES;
1652 cleanup:
1653 gfc_current_locus = name_locus;
1654 return m;
1658 /* Match an argument list function, such as %VAL. */
1660 static match
1661 match_arg_list_function (gfc_actual_arglist *result)
1663 char name[GFC_MAX_SYMBOL_LEN + 1];
1664 locus old_locus;
1665 match m;
1667 old_locus = gfc_current_locus;
1669 if (gfc_match_char ('%') != MATCH_YES)
1671 m = MATCH_NO;
1672 goto cleanup;
1675 m = gfc_match ("%n (", name);
1676 if (m != MATCH_YES)
1677 goto cleanup;
1679 if (name[0] != '\0')
1681 switch (name[0])
1683 case 'l':
1684 if (strncmp (name, "loc", 3) == 0)
1686 result->name = "%LOC";
1687 break;
1689 case 'r':
1690 if (strncmp (name, "ref", 3) == 0)
1692 result->name = "%REF";
1693 break;
1695 case 'v':
1696 if (strncmp (name, "val", 3) == 0)
1698 result->name = "%VAL";
1699 break;
1701 default:
1702 m = MATCH_ERROR;
1703 goto cleanup;
1707 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C"))
1709 m = MATCH_ERROR;
1710 goto cleanup;
1713 m = match_actual_arg (&result->expr);
1714 if (m != MATCH_YES)
1715 goto cleanup;
1717 if (gfc_match_char (')') != MATCH_YES)
1719 m = MATCH_NO;
1720 goto cleanup;
1723 return MATCH_YES;
1725 cleanup:
1726 gfc_current_locus = old_locus;
1727 return m;
1731 /* Matches an actual argument list of a function or subroutine, from
1732 the opening parenthesis to the closing parenthesis. The argument
1733 list is assumed to allow keyword arguments because we don't know if
1734 the symbol associated with the procedure has an implicit interface
1735 or not. We make sure keywords are unique. If sub_flag is set,
1736 we're matching the argument list of a subroutine. */
1738 match
1739 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1741 gfc_actual_arglist *head, *tail;
1742 int seen_keyword;
1743 gfc_st_label *label;
1744 locus old_loc;
1745 match m;
1747 *argp = tail = NULL;
1748 old_loc = gfc_current_locus;
1750 seen_keyword = 0;
1752 if (gfc_match_char ('(') == MATCH_NO)
1753 return (sub_flag) ? MATCH_YES : MATCH_NO;
1755 if (gfc_match_char (')') == MATCH_YES)
1756 return MATCH_YES;
1757 head = NULL;
1759 matching_actual_arglist++;
1761 for (;;)
1763 if (head == NULL)
1764 head = tail = gfc_get_actual_arglist ();
1765 else
1767 tail->next = gfc_get_actual_arglist ();
1768 tail = tail->next;
1771 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1773 m = gfc_match_st_label (&label);
1774 if (m == MATCH_NO)
1775 gfc_error ("Expected alternate return label at %C");
1776 if (m != MATCH_YES)
1777 goto cleanup;
1779 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1780 "at %C"))
1781 goto cleanup;
1783 tail->label = label;
1784 goto next;
1787 /* After the first keyword argument is seen, the following
1788 arguments must also have keywords. */
1789 if (seen_keyword)
1791 m = match_keyword_arg (tail, head);
1793 if (m == MATCH_ERROR)
1794 goto cleanup;
1795 if (m == MATCH_NO)
1797 gfc_error ("Missing keyword name in actual argument list at %C");
1798 goto cleanup;
1802 else
1804 /* Try an argument list function, like %VAL. */
1805 m = match_arg_list_function (tail);
1806 if (m == MATCH_ERROR)
1807 goto cleanup;
1809 /* See if we have the first keyword argument. */
1810 if (m == MATCH_NO)
1812 m = match_keyword_arg (tail, head);
1813 if (m == MATCH_YES)
1814 seen_keyword = 1;
1815 if (m == MATCH_ERROR)
1816 goto cleanup;
1819 if (m == MATCH_NO)
1821 /* Try for a non-keyword argument. */
1822 m = match_actual_arg (&tail->expr);
1823 if (m == MATCH_ERROR)
1824 goto cleanup;
1825 if (m == MATCH_NO)
1826 goto syntax;
1831 next:
1832 if (gfc_match_char (')') == MATCH_YES)
1833 break;
1834 if (gfc_match_char (',') != MATCH_YES)
1835 goto syntax;
1838 *argp = head;
1839 matching_actual_arglist--;
1840 return MATCH_YES;
1842 syntax:
1843 gfc_error ("Syntax error in argument list at %C");
1845 cleanup:
1846 gfc_free_actual_arglist (head);
1847 gfc_current_locus = old_loc;
1848 matching_actual_arglist--;
1849 return MATCH_ERROR;
1853 /* Used by gfc_match_varspec() to extend the reference list by one
1854 element. */
1856 static gfc_ref *
1857 extend_ref (gfc_expr *primary, gfc_ref *tail)
1859 if (primary->ref == NULL)
1860 primary->ref = tail = gfc_get_ref ();
1861 else
1863 if (tail == NULL)
1864 gfc_internal_error ("extend_ref(): Bad tail");
1865 tail->next = gfc_get_ref ();
1866 tail = tail->next;
1869 return tail;
1873 /* Match any additional specifications associated with the current
1874 variable like member references or substrings. If equiv_flag is
1875 set we only match stuff that is allowed inside an EQUIVALENCE
1876 statement. sub_flag tells whether we expect a type-bound procedure found
1877 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1878 components, 'ppc_arg' determines whether the PPC may be called (with an
1879 argument list), or whether it may just be referred to as a pointer. */
1881 match
1882 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1883 bool ppc_arg)
1885 char name[GFC_MAX_SYMBOL_LEN + 1];
1886 gfc_ref *substring, *tail, *tmp;
1887 gfc_component *component;
1888 gfc_symbol *sym = primary->symtree->n.sym;
1889 match m;
1890 bool unknown;
1891 char sep;
1893 tail = NULL;
1895 gfc_gobble_whitespace ();
1897 if (gfc_peek_ascii_char () == '[')
1899 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1900 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1901 && CLASS_DATA (sym)->attr.dimension))
1903 gfc_error ("Array section designator, e.g. '(:)', is required "
1904 "besides the coarray designator '[...]' at %C");
1905 return MATCH_ERROR;
1907 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1908 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1909 && !CLASS_DATA (sym)->attr.codimension))
1911 gfc_error ("Coarray designator at %C but %qs is not a coarray",
1912 sym->name);
1913 return MATCH_ERROR;
1917 /* For associate names, we may not yet know whether they are arrays or not.
1918 Thus if we have one and parentheses follow, we have to assume that it
1919 actually is one for now. The final decision will be made at
1920 resolution time, of course. */
1921 if (sym->assoc && gfc_peek_ascii_char () == '('
1922 && !(sym->assoc->dangling && sym->assoc->st
1923 && sym->assoc->st->n.sym
1924 && sym->assoc->st->n.sym->attr.dimension == 0)
1925 && sym->ts.type != BT_CLASS)
1926 sym->attr.dimension = 1;
1928 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1929 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1930 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1931 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
1932 && !(gfc_matching_procptr_assignment
1933 && sym->attr.flavor == FL_PROCEDURE))
1934 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1935 && (CLASS_DATA (sym)->attr.dimension
1936 || CLASS_DATA (sym)->attr.codimension)))
1938 gfc_array_spec *as;
1940 tail = extend_ref (primary, tail);
1941 tail->type = REF_ARRAY;
1943 /* In EQUIVALENCE, we don't know yet whether we are seeing
1944 an array, character variable or array of character
1945 variables. We'll leave the decision till resolve time. */
1947 if (equiv_flag)
1948 as = NULL;
1949 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1950 as = CLASS_DATA (sym)->as;
1951 else
1952 as = sym->as;
1954 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1955 as ? as->corank : 0);
1956 if (m != MATCH_YES)
1957 return m;
1959 gfc_gobble_whitespace ();
1960 if (equiv_flag && gfc_peek_ascii_char () == '(')
1962 tail = extend_ref (primary, tail);
1963 tail->type = REF_ARRAY;
1965 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1966 if (m != MATCH_YES)
1967 return m;
1971 primary->ts = sym->ts;
1973 if (equiv_flag)
1974 return MATCH_YES;
1976 /* With DEC extensions, member separator may be '.' or '%'. */
1977 sep = gfc_peek_ascii_char ();
1978 m = gfc_match_member_sep (sym);
1979 if (m == MATCH_ERROR)
1980 return MATCH_ERROR;
1982 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES
1983 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1984 gfc_set_default_type (sym, 0, sym->ns);
1986 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES)
1988 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name);
1989 return MATCH_ERROR;
1991 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1992 && m == MATCH_YES)
1994 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C",
1995 sep, sym->name);
1996 return MATCH_ERROR;
1999 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
2000 || m != MATCH_YES)
2001 goto check_substring;
2003 sym = sym->ts.u.derived;
2005 for (;;)
2007 bool t;
2008 gfc_symtree *tbp;
2010 m = gfc_match_name (name);
2011 if (m == MATCH_NO)
2012 gfc_error ("Expected structure component name at %C");
2013 if (m != MATCH_YES)
2014 return MATCH_ERROR;
2016 if (sym->f2k_derived)
2017 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
2018 else
2019 tbp = NULL;
2021 if (tbp)
2023 gfc_symbol* tbp_sym;
2025 if (!t)
2026 return MATCH_ERROR;
2028 gcc_assert (!tail || !tail->next);
2030 if (!(primary->expr_type == EXPR_VARIABLE
2031 || (primary->expr_type == EXPR_STRUCTURE
2032 && primary->symtree && primary->symtree->n.sym
2033 && primary->symtree->n.sym->attr.flavor)))
2034 return MATCH_ERROR;
2036 if (tbp->n.tb->is_generic)
2037 tbp_sym = NULL;
2038 else
2039 tbp_sym = tbp->n.tb->u.specific->n.sym;
2041 primary->expr_type = EXPR_COMPCALL;
2042 primary->value.compcall.tbp = tbp->n.tb;
2043 primary->value.compcall.name = tbp->name;
2044 primary->value.compcall.ignore_pass = 0;
2045 primary->value.compcall.assign = 0;
2046 primary->value.compcall.base_object = NULL;
2047 gcc_assert (primary->symtree->n.sym->attr.referenced);
2048 if (tbp_sym)
2049 primary->ts = tbp_sym->ts;
2050 else
2051 gfc_clear_ts (&primary->ts);
2053 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
2054 &primary->value.compcall.actual);
2055 if (m == MATCH_ERROR)
2056 return MATCH_ERROR;
2057 if (m == MATCH_NO)
2059 if (sub_flag)
2060 primary->value.compcall.actual = NULL;
2061 else
2063 gfc_error ("Expected argument list at %C");
2064 return MATCH_ERROR;
2068 break;
2071 component = gfc_find_component (sym, name, false, false, &tmp);
2072 if (component == NULL)
2073 return MATCH_ERROR;
2075 /* Extend the reference chain determined by gfc_find_component. */
2076 if (primary->ref == NULL)
2077 primary->ref = tmp;
2078 else
2080 /* Set by the for loop below for the last component ref. */
2081 gcc_assert (tail != NULL);
2082 tail->next = tmp;
2085 /* The reference chain may be longer than one hop for union
2086 subcomponents; find the new tail. */
2087 for (tail = tmp; tail->next; tail = tail->next)
2090 primary->ts = component->ts;
2092 if (component->attr.proc_pointer && ppc_arg)
2094 /* Procedure pointer component call: Look for argument list. */
2095 m = gfc_match_actual_arglist (sub_flag,
2096 &primary->value.compcall.actual);
2097 if (m == MATCH_ERROR)
2098 return MATCH_ERROR;
2100 if (m == MATCH_NO && !gfc_matching_ptr_assignment
2101 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
2103 gfc_error ("Procedure pointer component %qs requires an "
2104 "argument list at %C", component->name);
2105 return MATCH_ERROR;
2108 if (m == MATCH_YES)
2109 primary->expr_type = EXPR_PPC;
2111 break;
2114 if (component->as != NULL && !component->attr.proc_pointer)
2116 tail = extend_ref (primary, tail);
2117 tail->type = REF_ARRAY;
2119 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2120 component->as->corank);
2121 if (m != MATCH_YES)
2122 return m;
2124 else if (component->ts.type == BT_CLASS && component->attr.class_ok
2125 && CLASS_DATA (component)->as && !component->attr.proc_pointer)
2127 tail = extend_ref (primary, tail);
2128 tail->type = REF_ARRAY;
2130 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2131 equiv_flag,
2132 CLASS_DATA (component)->as->corank);
2133 if (m != MATCH_YES)
2134 return m;
2137 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2138 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES)
2139 break;
2141 sym = component->ts.u.derived;
2144 check_substring:
2145 unknown = false;
2146 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor))
2148 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2150 gfc_set_default_type (sym, 0, sym->ns);
2151 primary->ts = sym->ts;
2152 unknown = true;
2156 if (primary->ts.type == BT_CHARACTER)
2158 bool def = primary->ts.deferred == 1;
2159 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def))
2161 case MATCH_YES:
2162 if (tail == NULL)
2163 primary->ref = substring;
2164 else
2165 tail->next = substring;
2167 if (primary->expr_type == EXPR_CONSTANT)
2168 primary->expr_type = EXPR_SUBSTRING;
2170 if (substring)
2171 primary->ts.u.cl = NULL;
2173 break;
2175 case MATCH_NO:
2176 if (unknown)
2178 gfc_clear_ts (&primary->ts);
2179 gfc_clear_ts (&sym->ts);
2181 break;
2183 case MATCH_ERROR:
2184 return MATCH_ERROR;
2188 /* F2008, C727. */
2189 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2191 gfc_error ("Coindexed procedure-pointer component at %C");
2192 return MATCH_ERROR;
2195 return MATCH_YES;
2199 /* Given an expression that is a variable, figure out what the
2200 ultimate variable's type and attribute is, traversing the reference
2201 structures if necessary.
2203 This subroutine is trickier than it looks. We start at the base
2204 symbol and store the attribute. Component references load a
2205 completely new attribute.
2207 A couple of rules come into play. Subobjects of targets are always
2208 targets themselves. If we see a component that goes through a
2209 pointer, then the expression must also be a target, since the
2210 pointer is associated with something (if it isn't core will soon be
2211 dumped). If we see a full part or section of an array, the
2212 expression is also an array.
2214 We can have at most one full array reference. */
2216 symbol_attribute
2217 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2219 int dimension, codimension, pointer, allocatable, target;
2220 symbol_attribute attr;
2221 gfc_ref *ref;
2222 gfc_symbol *sym;
2223 gfc_component *comp;
2225 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2226 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2228 sym = expr->symtree->n.sym;
2229 attr = sym->attr;
2231 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2233 dimension = CLASS_DATA (sym)->attr.dimension;
2234 codimension = CLASS_DATA (sym)->attr.codimension;
2235 pointer = CLASS_DATA (sym)->attr.class_pointer;
2236 allocatable = CLASS_DATA (sym)->attr.allocatable;
2238 else
2240 dimension = attr.dimension;
2241 codimension = attr.codimension;
2242 pointer = attr.pointer;
2243 allocatable = attr.allocatable;
2246 target = attr.target;
2247 if (pointer || attr.proc_pointer)
2248 target = 1;
2250 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2251 *ts = sym->ts;
2253 for (ref = expr->ref; ref; ref = ref->next)
2254 switch (ref->type)
2256 case REF_ARRAY:
2258 switch (ref->u.ar.type)
2260 case AR_FULL:
2261 dimension = 1;
2262 break;
2264 case AR_SECTION:
2265 allocatable = pointer = 0;
2266 dimension = 1;
2267 break;
2269 case AR_ELEMENT:
2270 /* Handle coarrays. */
2271 if (ref->u.ar.dimen > 0)
2272 allocatable = pointer = 0;
2273 break;
2275 case AR_UNKNOWN:
2276 /* If any of start, end or stride is not integer, there will
2277 already have been an error issued. */
2278 int errors;
2279 gfc_get_errors (NULL, &errors);
2280 if (errors == 0)
2281 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2284 break;
2286 case REF_COMPONENT:
2287 comp = ref->u.c.component;
2288 attr = comp->attr;
2289 if (ts != NULL)
2291 *ts = comp->ts;
2292 /* Don't set the string length if a substring reference
2293 follows. */
2294 if (ts->type == BT_CHARACTER
2295 && ref->next && ref->next->type == REF_SUBSTRING)
2296 ts->u.cl = NULL;
2299 if (comp->ts.type == BT_CLASS)
2301 codimension = CLASS_DATA (comp)->attr.codimension;
2302 pointer = CLASS_DATA (comp)->attr.class_pointer;
2303 allocatable = CLASS_DATA (comp)->attr.allocatable;
2305 else
2307 codimension = comp->attr.codimension;
2308 pointer = comp->attr.pointer;
2309 allocatable = comp->attr.allocatable;
2311 if (pointer || attr.proc_pointer)
2312 target = 1;
2314 break;
2316 case REF_SUBSTRING:
2317 allocatable = pointer = 0;
2318 break;
2321 attr.dimension = dimension;
2322 attr.codimension = codimension;
2323 attr.pointer = pointer;
2324 attr.allocatable = allocatable;
2325 attr.target = target;
2326 attr.save = sym->attr.save;
2328 return attr;
2332 /* Return the attribute from a general expression. */
2334 symbol_attribute
2335 gfc_expr_attr (gfc_expr *e)
2337 symbol_attribute attr;
2339 switch (e->expr_type)
2341 case EXPR_VARIABLE:
2342 attr = gfc_variable_attr (e, NULL);
2343 break;
2345 case EXPR_FUNCTION:
2346 gfc_clear_attr (&attr);
2348 if (e->value.function.esym && e->value.function.esym->result)
2350 gfc_symbol *sym = e->value.function.esym->result;
2351 attr = sym->attr;
2352 if (sym->ts.type == BT_CLASS)
2354 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2355 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2356 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2359 else
2360 attr = gfc_variable_attr (e, NULL);
2362 /* TODO: NULL() returns pointers. May have to take care of this
2363 here. */
2365 break;
2367 default:
2368 gfc_clear_attr (&attr);
2369 break;
2372 return attr;
2376 /* Match a structure constructor. The initial symbol has already been
2377 seen. */
2379 typedef struct gfc_structure_ctor_component
2381 char* name;
2382 gfc_expr* val;
2383 locus where;
2384 struct gfc_structure_ctor_component* next;
2386 gfc_structure_ctor_component;
2388 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2390 static void
2391 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2393 free (comp->name);
2394 gfc_free_expr (comp->val);
2395 free (comp);
2399 /* Translate the component list into the actual constructor by sorting it in
2400 the order required; this also checks along the way that each and every
2401 component actually has an initializer and handles default initializers
2402 for components without explicit value given. */
2403 static bool
2404 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2405 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2407 gfc_structure_ctor_component *comp_iter;
2408 gfc_component *comp;
2410 for (comp = sym->components; comp; comp = comp->next)
2412 gfc_structure_ctor_component **next_ptr;
2413 gfc_expr *value = NULL;
2415 /* Try to find the initializer for the current component by name. */
2416 next_ptr = comp_head;
2417 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2419 if (!strcmp (comp_iter->name, comp->name))
2420 break;
2421 next_ptr = &comp_iter->next;
2424 /* If an extension, try building the parent derived type by building
2425 a value expression for the parent derived type and calling self. */
2426 if (!comp_iter && comp == sym->components && sym->attr.extension)
2428 value = gfc_get_structure_constructor_expr (comp->ts.type,
2429 comp->ts.kind,
2430 &gfc_current_locus);
2431 value->ts = comp->ts;
2433 if (!build_actual_constructor (comp_head,
2434 &value->value.constructor,
2435 comp->ts.u.derived))
2437 gfc_free_expr (value);
2438 return false;
2441 gfc_constructor_append_expr (ctor_head, value, NULL);
2442 continue;
2445 /* If it was not found, try the default initializer if there's any;
2446 otherwise, it's an error unless this is a deferred parameter. */
2447 if (!comp_iter)
2449 if (comp->initializer)
2451 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor "
2452 "with missing optional arguments at %C"))
2453 return false;
2454 value = gfc_copy_expr (comp->initializer);
2456 else if (comp->attr.allocatable
2457 || (comp->ts.type == BT_CLASS
2458 && CLASS_DATA (comp)->attr.allocatable))
2460 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for "
2461 "allocatable component '%qs' given in the "
2462 "structure constructor at %C", comp->name))
2463 return false;
2465 else if (!comp->attr.artificial)
2467 gfc_error ("No initializer for component %qs given in the"
2468 " structure constructor at %C!", comp->name);
2469 return false;
2472 else
2473 value = comp_iter->val;
2475 /* Add the value to the constructor chain built. */
2476 gfc_constructor_append_expr (ctor_head, value, NULL);
2478 /* Remove the entry from the component list. We don't want the expression
2479 value to be free'd, so set it to NULL. */
2480 if (comp_iter)
2482 *next_ptr = comp_iter->next;
2483 comp_iter->val = NULL;
2484 gfc_free_structure_ctor_component (comp_iter);
2487 return true;
2491 bool
2492 gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2493 gfc_actual_arglist **arglist,
2494 bool parent)
2496 gfc_actual_arglist *actual;
2497 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2498 gfc_constructor_base ctor_head = NULL;
2499 gfc_component *comp; /* Is set NULL when named component is first seen */
2500 const char* last_name = NULL;
2501 locus old_locus;
2502 gfc_expr *expr;
2504 expr = parent ? *cexpr : e;
2505 old_locus = gfc_current_locus;
2506 if (parent)
2507 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2508 else
2509 gfc_current_locus = expr->where;
2511 comp_tail = comp_head = NULL;
2513 if (!parent && sym->attr.abstract)
2515 gfc_error ("Can't construct ABSTRACT type %qs at %L",
2516 sym->name, &expr->where);
2517 goto cleanup;
2520 comp = sym->components;
2521 actual = parent ? *arglist : expr->value.function.actual;
2522 for ( ; actual; )
2524 gfc_component *this_comp = NULL;
2526 if (!comp_head)
2527 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2528 else
2530 comp_tail->next = gfc_get_structure_ctor_component ();
2531 comp_tail = comp_tail->next;
2533 if (actual->name)
2535 if (!gfc_notify_std (GFC_STD_F2003, "Structure"
2536 " constructor with named arguments at %C"))
2537 goto cleanup;
2539 comp_tail->name = xstrdup (actual->name);
2540 last_name = comp_tail->name;
2541 comp = NULL;
2543 else
2545 /* Components without name are not allowed after the first named
2546 component initializer! */
2547 if (!comp || comp->attr.artificial)
2549 if (last_name)
2550 gfc_error ("Component initializer without name after component"
2551 " named %s at %L!", last_name,
2552 actual->expr ? &actual->expr->where
2553 : &gfc_current_locus);
2554 else
2555 gfc_error ("Too many components in structure constructor at "
2556 "%L!", actual->expr ? &actual->expr->where
2557 : &gfc_current_locus);
2558 goto cleanup;
2561 comp_tail->name = xstrdup (comp->name);
2564 /* Find the current component in the structure definition and check
2565 its access is not private. */
2566 if (comp)
2567 this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
2568 else
2570 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2571 false, false, NULL);
2572 comp = NULL; /* Reset needed! */
2575 /* Here we can check if a component name is given which does not
2576 correspond to any component of the defined structure. */
2577 if (!this_comp)
2578 goto cleanup;
2580 comp_tail->val = actual->expr;
2581 if (actual->expr != NULL)
2582 comp_tail->where = actual->expr->where;
2583 actual->expr = NULL;
2585 /* Check if this component is already given a value. */
2586 for (comp_iter = comp_head; comp_iter != comp_tail;
2587 comp_iter = comp_iter->next)
2589 gcc_assert (comp_iter);
2590 if (!strcmp (comp_iter->name, comp_tail->name))
2592 gfc_error ("Component %qs is initialized twice in the structure"
2593 " constructor at %L!", comp_tail->name,
2594 comp_tail->val ? &comp_tail->where
2595 : &gfc_current_locus);
2596 goto cleanup;
2600 /* F2008, R457/C725, for PURE C1283. */
2601 if (this_comp->attr.pointer && comp_tail->val
2602 && gfc_is_coindexed (comp_tail->val))
2604 gfc_error ("Coindexed expression to pointer component %qs in "
2605 "structure constructor at %L!", comp_tail->name,
2606 &comp_tail->where);
2607 goto cleanup;
2610 /* If not explicitly a parent constructor, gather up the components
2611 and build one. */
2612 if (comp && comp == sym->components
2613 && sym->attr.extension
2614 && comp_tail->val
2615 && (!gfc_bt_struct (comp_tail->val->ts.type)
2617 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2619 bool m;
2620 gfc_actual_arglist *arg_null = NULL;
2622 actual->expr = comp_tail->val;
2623 comp_tail->val = NULL;
2625 m = gfc_convert_to_structure_constructor (NULL,
2626 comp->ts.u.derived, &comp_tail->val,
2627 comp->ts.u.derived->attr.zero_comp
2628 ? &arg_null : &actual, true);
2629 if (!m)
2630 goto cleanup;
2632 if (comp->ts.u.derived->attr.zero_comp)
2634 comp = comp->next;
2635 continue;
2639 if (comp)
2640 comp = comp->next;
2641 if (parent && !comp)
2642 break;
2644 if (actual)
2645 actual = actual->next;
2648 if (!build_actual_constructor (&comp_head, &ctor_head, sym))
2649 goto cleanup;
2651 /* No component should be left, as this should have caused an error in the
2652 loop constructing the component-list (name that does not correspond to any
2653 component in the structure definition). */
2654 if (comp_head && sym->attr.extension)
2656 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2658 gfc_error ("component %qs at %L has already been set by a "
2659 "parent derived type constructor", comp_iter->name,
2660 &comp_iter->where);
2662 goto cleanup;
2664 else
2665 gcc_assert (!comp_head);
2667 if (parent)
2669 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2670 expr->ts.u.derived = sym;
2671 expr->value.constructor = ctor_head;
2672 *cexpr = expr;
2674 else
2676 expr->ts.u.derived = sym;
2677 expr->ts.kind = 0;
2678 expr->ts.type = BT_DERIVED;
2679 expr->value.constructor = ctor_head;
2680 expr->expr_type = EXPR_STRUCTURE;
2683 gfc_current_locus = old_locus;
2684 if (parent)
2685 *arglist = actual;
2686 return true;
2688 cleanup:
2689 gfc_current_locus = old_locus;
2691 for (comp_iter = comp_head; comp_iter; )
2693 gfc_structure_ctor_component *next = comp_iter->next;
2694 gfc_free_structure_ctor_component (comp_iter);
2695 comp_iter = next;
2697 gfc_constructor_free (ctor_head);
2699 return false;
2703 match
2704 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2706 match m;
2707 gfc_expr *e;
2708 gfc_symtree *symtree;
2710 gfc_get_ha_sym_tree (sym->name, &symtree);
2712 e = gfc_get_expr ();
2713 e->symtree = symtree;
2714 e->expr_type = EXPR_FUNCTION;
2716 gcc_assert (gfc_fl_struct (sym->attr.flavor)
2717 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2718 e->value.function.esym = sym;
2719 e->symtree->n.sym->attr.generic = 1;
2721 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2722 if (m != MATCH_YES)
2724 gfc_free_expr (e);
2725 return m;
2728 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false))
2730 gfc_free_expr (e);
2731 return MATCH_ERROR;
2734 /* If a structure constructor is in a DATA statement, then each entity
2735 in the structure constructor must be a constant. Try to reduce the
2736 expression here. */
2737 if (gfc_in_match_data ())
2738 gfc_reduce_init_expr (e);
2740 *result = e;
2741 return MATCH_YES;
2745 /* If the symbol is an implicit do loop index and implicitly typed,
2746 it should not be host associated. Provide a symtree from the
2747 current namespace. */
2748 static match
2749 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2751 if ((*sym)->attr.flavor == FL_VARIABLE
2752 && (*sym)->ns != gfc_current_ns
2753 && (*sym)->attr.implied_index
2754 && (*sym)->attr.implicit_type
2755 && !(*sym)->attr.use_assoc)
2757 int i;
2758 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2759 if (i)
2760 return MATCH_ERROR;
2761 *sym = (*st)->n.sym;
2763 return MATCH_YES;
2767 /* Procedure pointer as function result: Replace the function symbol by the
2768 auto-generated hidden result variable named "ppr@". */
2770 static bool
2771 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2773 /* Check for procedure pointer result variable. */
2774 if ((*sym)->attr.function && !(*sym)->attr.external
2775 && (*sym)->result && (*sym)->result != *sym
2776 && (*sym)->result->attr.proc_pointer
2777 && (*sym) == gfc_current_ns->proc_name
2778 && (*sym) == (*sym)->result->ns->proc_name
2779 && strcmp ("ppr@", (*sym)->result->name) == 0)
2781 /* Automatic replacement with "hidden" result variable. */
2782 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2783 *sym = (*sym)->result;
2784 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2785 return true;
2787 return false;
2791 /* Matches a variable name followed by anything that might follow it--
2792 array reference, argument list of a function, etc. */
2794 match
2795 gfc_match_rvalue (gfc_expr **result)
2797 gfc_actual_arglist *actual_arglist;
2798 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2799 gfc_state_data *st;
2800 gfc_symbol *sym;
2801 gfc_symtree *symtree;
2802 locus where, old_loc;
2803 gfc_expr *e;
2804 match m, m2;
2805 int i;
2806 gfc_typespec *ts;
2807 bool implicit_char;
2808 gfc_ref *ref;
2810 m = gfc_match_name (name);
2811 if (m != MATCH_YES)
2812 return m;
2814 /* Check if the symbol exists. */
2815 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
2816 return MATCH_ERROR;
2818 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT
2819 type. For derived types we create a generic symbol which links to the
2820 derived type symbol; STRUCTUREs are simpler and must not conflict with
2821 variables. */
2822 if (!symtree)
2823 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree))
2824 return MATCH_ERROR;
2825 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
2827 if (gfc_find_state (COMP_INTERFACE)
2828 && !gfc_current_ns->has_import_set)
2829 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2830 else
2831 i = gfc_get_ha_sym_tree (name, &symtree);
2832 if (i)
2833 return MATCH_ERROR;
2837 sym = symtree->n.sym;
2838 e = NULL;
2839 where = gfc_current_locus;
2841 replace_hidden_procptr_result (&sym, &symtree);
2843 /* If this is an implicit do loop index and implicitly typed,
2844 it should not be host associated. */
2845 m = check_for_implicit_index (&symtree, &sym);
2846 if (m != MATCH_YES)
2847 return m;
2849 gfc_set_sym_referenced (sym);
2850 sym->attr.implied_index = 0;
2852 if (sym->attr.function && sym->result == sym)
2854 /* See if this is a directly recursive function call. */
2855 gfc_gobble_whitespace ();
2856 if (sym->attr.recursive
2857 && gfc_peek_ascii_char () == '('
2858 && gfc_current_ns->proc_name == sym
2859 && !sym->attr.dimension)
2861 gfc_error ("%qs at %C is the name of a recursive function "
2862 "and so refers to the result variable. Use an "
2863 "explicit RESULT variable for direct recursion "
2864 "(12.5.2.1)", sym->name);
2865 return MATCH_ERROR;
2868 if (gfc_is_function_return_value (sym, gfc_current_ns))
2869 goto variable;
2871 if (sym->attr.entry
2872 && (sym->ns == gfc_current_ns
2873 || sym->ns == gfc_current_ns->parent))
2875 gfc_entry_list *el = NULL;
2877 for (el = sym->ns->entries; el; el = el->next)
2878 if (sym == el->sym)
2879 goto variable;
2883 if (gfc_matching_procptr_assignment)
2884 goto procptr0;
2886 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2887 goto function0;
2889 if (sym->attr.generic)
2890 goto generic_function;
2892 switch (sym->attr.flavor)
2894 case FL_VARIABLE:
2895 variable:
2896 e = gfc_get_expr ();
2898 e->expr_type = EXPR_VARIABLE;
2899 e->symtree = symtree;
2901 m = gfc_match_varspec (e, 0, false, true);
2902 break;
2904 case FL_PARAMETER:
2905 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2906 end up here. Unfortunately, sym->value->expr_type is set to
2907 EXPR_CONSTANT, and so the if () branch would be followed without
2908 the !sym->as check. */
2909 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2910 e = gfc_copy_expr (sym->value);
2911 else
2913 e = gfc_get_expr ();
2914 e->expr_type = EXPR_VARIABLE;
2917 e->symtree = symtree;
2918 m = gfc_match_varspec (e, 0, false, true);
2920 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2921 break;
2923 /* Variable array references to derived type parameters cause
2924 all sorts of headaches in simplification. Treating such
2925 expressions as variable works just fine for all array
2926 references. */
2927 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2929 for (ref = e->ref; ref; ref = ref->next)
2930 if (ref->type == REF_ARRAY)
2931 break;
2933 if (ref == NULL || ref->u.ar.type == AR_FULL)
2934 break;
2936 ref = e->ref;
2937 e->ref = NULL;
2938 gfc_free_expr (e);
2939 e = gfc_get_expr ();
2940 e->expr_type = EXPR_VARIABLE;
2941 e->symtree = symtree;
2942 e->ref = ref;
2945 break;
2947 case FL_STRUCT:
2948 case FL_DERIVED:
2949 sym = gfc_use_derived (sym);
2950 if (sym == NULL)
2951 m = MATCH_ERROR;
2952 else
2953 goto generic_function;
2954 break;
2956 /* If we're here, then the name is known to be the name of a
2957 procedure, yet it is not sure to be the name of a function. */
2958 case FL_PROCEDURE:
2960 /* Procedure Pointer Assignments. */
2961 procptr0:
2962 if (gfc_matching_procptr_assignment)
2964 gfc_gobble_whitespace ();
2965 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2966 /* Parse functions returning a procptr. */
2967 goto function0;
2969 e = gfc_get_expr ();
2970 e->expr_type = EXPR_VARIABLE;
2971 e->symtree = symtree;
2972 m = gfc_match_varspec (e, 0, false, true);
2973 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
2974 && sym->ts.type == BT_UNKNOWN
2975 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
2977 m = MATCH_ERROR;
2978 break;
2980 break;
2983 if (sym->attr.subroutine)
2985 gfc_error ("Unexpected use of subroutine name %qs at %C",
2986 sym->name);
2987 m = MATCH_ERROR;
2988 break;
2991 /* At this point, the name has to be a non-statement function.
2992 If the name is the same as the current function being
2993 compiled, then we have a variable reference (to the function
2994 result) if the name is non-recursive. */
2996 st = gfc_enclosing_unit (NULL);
2998 if (st != NULL
2999 && st->state == COMP_FUNCTION
3000 && st->sym == sym
3001 && !sym->attr.recursive)
3003 e = gfc_get_expr ();
3004 e->symtree = symtree;
3005 e->expr_type = EXPR_VARIABLE;
3007 m = gfc_match_varspec (e, 0, false, true);
3008 break;
3011 /* Match a function reference. */
3012 function0:
3013 m = gfc_match_actual_arglist (0, &actual_arglist);
3014 if (m == MATCH_NO)
3016 if (sym->attr.proc == PROC_ST_FUNCTION)
3017 gfc_error ("Statement function %qs requires argument list at %C",
3018 sym->name);
3019 else
3020 gfc_error ("Function %qs requires an argument list at %C",
3021 sym->name);
3023 m = MATCH_ERROR;
3024 break;
3027 if (m != MATCH_YES)
3029 m = MATCH_ERROR;
3030 break;
3033 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
3034 sym = symtree->n.sym;
3036 replace_hidden_procptr_result (&sym, &symtree);
3038 e = gfc_get_expr ();
3039 e->symtree = symtree;
3040 e->expr_type = EXPR_FUNCTION;
3041 e->value.function.actual = actual_arglist;
3042 e->where = gfc_current_locus;
3044 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3045 && CLASS_DATA (sym)->as)
3046 e->rank = CLASS_DATA (sym)->as->rank;
3047 else if (sym->as != NULL)
3048 e->rank = sym->as->rank;
3050 if (!sym->attr.function
3051 && !gfc_add_function (&sym->attr, sym->name, NULL))
3053 m = MATCH_ERROR;
3054 break;
3057 /* Check here for the existence of at least one argument for the
3058 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
3059 argument(s) given will be checked in gfc_iso_c_func_interface,
3060 during resolution of the function call. */
3061 if (sym->attr.is_iso_c == 1
3062 && (sym->from_intmod == INTMOD_ISO_C_BINDING
3063 && (sym->intmod_sym_id == ISOCBINDING_LOC
3064 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
3065 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
3067 /* make sure we were given a param */
3068 if (actual_arglist == NULL)
3070 gfc_error ("Missing argument to %qs at %C", sym->name);
3071 m = MATCH_ERROR;
3072 break;
3076 if (sym->result == NULL)
3077 sym->result = sym;
3079 m = MATCH_YES;
3080 break;
3082 case FL_UNKNOWN:
3084 /* Special case for derived type variables that get their types
3085 via an IMPLICIT statement. This can't wait for the
3086 resolution phase. */
3088 old_loc = gfc_current_locus;
3089 if (gfc_match_member_sep (sym) == MATCH_YES
3090 && sym->ts.type == BT_UNKNOWN
3091 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
3092 gfc_set_default_type (sym, 0, sym->ns);
3093 gfc_current_locus = old_loc;
3095 /* If the symbol has a (co)dimension attribute, the expression is a
3096 variable. */
3098 if (sym->attr.dimension || sym->attr.codimension)
3100 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3102 m = MATCH_ERROR;
3103 break;
3106 e = gfc_get_expr ();
3107 e->symtree = symtree;
3108 e->expr_type = EXPR_VARIABLE;
3109 m = gfc_match_varspec (e, 0, false, true);
3110 break;
3113 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3114 && (CLASS_DATA (sym)->attr.dimension
3115 || CLASS_DATA (sym)->attr.codimension))
3117 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3119 m = MATCH_ERROR;
3120 break;
3123 e = gfc_get_expr ();
3124 e->symtree = symtree;
3125 e->expr_type = EXPR_VARIABLE;
3126 m = gfc_match_varspec (e, 0, false, true);
3127 break;
3130 /* Name is not an array, so we peek to see if a '(' implies a
3131 function call or a substring reference. Otherwise the
3132 variable is just a scalar. */
3134 gfc_gobble_whitespace ();
3135 if (gfc_peek_ascii_char () != '(')
3137 /* Assume a scalar variable */
3138 e = gfc_get_expr ();
3139 e->symtree = symtree;
3140 e->expr_type = EXPR_VARIABLE;
3142 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
3144 m = MATCH_ERROR;
3145 break;
3148 /*FIXME:??? gfc_match_varspec does set this for us: */
3149 e->ts = sym->ts;
3150 m = gfc_match_varspec (e, 0, false, true);
3151 break;
3154 /* See if this is a function reference with a keyword argument
3155 as first argument. We do this because otherwise a spurious
3156 symbol would end up in the symbol table. */
3158 old_loc = gfc_current_locus;
3159 m2 = gfc_match (" ( %n =", argname);
3160 gfc_current_locus = old_loc;
3162 e = gfc_get_expr ();
3163 e->symtree = symtree;
3165 if (m2 != MATCH_YES)
3167 /* Try to figure out whether we're dealing with a character type.
3168 We're peeking ahead here, because we don't want to call
3169 match_substring if we're dealing with an implicitly typed
3170 non-character variable. */
3171 implicit_char = false;
3172 if (sym->ts.type == BT_UNKNOWN)
3174 ts = gfc_get_default_type (sym->name, NULL);
3175 if (ts->type == BT_CHARACTER)
3176 implicit_char = true;
3179 /* See if this could possibly be a substring reference of a name
3180 that we're not sure is a variable yet. */
3182 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3183 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES)
3186 e->expr_type = EXPR_VARIABLE;
3188 if (sym->attr.flavor != FL_VARIABLE
3189 && !gfc_add_flavor (&sym->attr, FL_VARIABLE,
3190 sym->name, NULL))
3192 m = MATCH_ERROR;
3193 break;
3196 if (sym->ts.type == BT_UNKNOWN
3197 && !gfc_set_default_type (sym, 1, NULL))
3199 m = MATCH_ERROR;
3200 break;
3203 e->ts = sym->ts;
3204 if (e->ref)
3205 e->ts.u.cl = NULL;
3206 m = MATCH_YES;
3207 break;
3211 /* Give up, assume we have a function. */
3213 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3214 sym = symtree->n.sym;
3215 e->expr_type = EXPR_FUNCTION;
3217 if (!sym->attr.function
3218 && !gfc_add_function (&sym->attr, sym->name, NULL))
3220 m = MATCH_ERROR;
3221 break;
3224 sym->result = sym;
3226 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3227 if (m == MATCH_NO)
3228 gfc_error ("Missing argument list in function %qs at %C", sym->name);
3230 if (m != MATCH_YES)
3232 m = MATCH_ERROR;
3233 break;
3236 /* If our new function returns a character, array or structure
3237 type, it might have subsequent references. */
3239 m = gfc_match_varspec (e, 0, false, true);
3240 if (m == MATCH_NO)
3241 m = MATCH_YES;
3243 break;
3245 generic_function:
3246 /* Look for symbol first; if not found, look for STRUCTURE type symbol
3247 specially. Creates a generic symbol for derived types. */
3248 gfc_find_sym_tree (name, NULL, 1, &symtree);
3249 if (!symtree)
3250 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree);
3251 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3252 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3254 e = gfc_get_expr ();
3255 e->symtree = symtree;
3256 e->expr_type = EXPR_FUNCTION;
3258 if (gfc_fl_struct (sym->attr.flavor))
3260 e->value.function.esym = sym;
3261 e->symtree->n.sym->attr.generic = 1;
3264 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3265 break;
3267 case FL_NAMELIST:
3268 m = MATCH_ERROR;
3269 break;
3271 default:
3272 gfc_error ("Symbol at %C is not appropriate for an expression");
3273 return MATCH_ERROR;
3276 if (m == MATCH_YES)
3278 e->where = where;
3279 *result = e;
3281 else
3282 gfc_free_expr (e);
3284 return m;
3288 /* Match a variable, i.e. something that can be assigned to. This
3289 starts as a symbol, can be a structure component or an array
3290 reference. It can be a function if the function doesn't have a
3291 separate RESULT variable. If the symbol has not been previously
3292 seen, we assume it is a variable.
3294 This function is called by two interface functions:
3295 gfc_match_variable, which has host_flag = 1, and
3296 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3297 match of the symbol to the local scope. */
3299 static match
3300 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3302 gfc_symbol *sym, *dt_sym;
3303 gfc_symtree *st;
3304 gfc_expr *expr;
3305 locus where, old_loc;
3306 match m;
3308 /* Since nothing has any business being an lvalue in a module
3309 specification block, an interface block or a contains section,
3310 we force the changed_symbols mechanism to work by setting
3311 host_flag to 0. This prevents valid symbols that have the name
3312 of keywords, such as 'end', being turned into variables by
3313 failed matching to assignments for, e.g., END INTERFACE. */
3314 if (gfc_current_state () == COMP_MODULE
3315 || gfc_current_state () == COMP_SUBMODULE
3316 || gfc_current_state () == COMP_INTERFACE
3317 || gfc_current_state () == COMP_CONTAINS)
3318 host_flag = 0;
3320 where = gfc_current_locus;
3321 m = gfc_match_sym_tree (&st, host_flag);
3322 if (m != MATCH_YES)
3323 return m;
3325 sym = st->n.sym;
3327 /* If this is an implicit do loop index and implicitly typed,
3328 it should not be host associated. */
3329 m = check_for_implicit_index (&st, &sym);
3330 if (m != MATCH_YES)
3331 return m;
3333 sym->attr.implied_index = 0;
3335 gfc_set_sym_referenced (sym);
3337 /* STRUCTUREs may share names with variables, but derived types may not. */
3338 if (sym->attr.flavor == FL_PROCEDURE && sym->generic
3339 && (dt_sym = gfc_find_dt_in_generic (sym)))
3341 if (dt_sym->attr.flavor == FL_DERIVED)
3342 gfc_error ("Derived type '%s' cannot be used as a variable at %C",
3343 sym->name);
3344 return MATCH_ERROR;
3347 switch (sym->attr.flavor)
3349 case FL_VARIABLE:
3350 /* Everything is alright. */
3351 break;
3353 case FL_UNKNOWN:
3355 sym_flavor flavor = FL_UNKNOWN;
3357 gfc_gobble_whitespace ();
3359 if (sym->attr.external || sym->attr.procedure
3360 || sym->attr.function || sym->attr.subroutine)
3361 flavor = FL_PROCEDURE;
3363 /* If it is not a procedure, is not typed and is host associated,
3364 we cannot give it a flavor yet. */
3365 else if (sym->ns == gfc_current_ns->parent
3366 && sym->ts.type == BT_UNKNOWN)
3367 break;
3369 /* These are definitive indicators that this is a variable. */
3370 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3371 || sym->attr.pointer || sym->as != NULL)
3372 flavor = FL_VARIABLE;
3374 if (flavor != FL_UNKNOWN
3375 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL))
3376 return MATCH_ERROR;
3378 break;
3380 case FL_PARAMETER:
3381 if (equiv_flag)
3383 gfc_error ("Named constant at %C in an EQUIVALENCE");
3384 return MATCH_ERROR;
3386 /* Otherwise this is checked for and an error given in the
3387 variable definition context checks. */
3388 break;
3390 case FL_PROCEDURE:
3391 /* Check for a nonrecursive function result variable. */
3392 if (sym->attr.function
3393 && !sym->attr.external
3394 && sym->result == sym
3395 && (gfc_is_function_return_value (sym, gfc_current_ns)
3396 || (sym->attr.entry
3397 && sym->ns == gfc_current_ns)
3398 || (sym->attr.entry
3399 && sym->ns == gfc_current_ns->parent)))
3401 /* If a function result is a derived type, then the derived
3402 type may still have to be resolved. */
3404 if (sym->ts.type == BT_DERIVED
3405 && gfc_use_derived (sym->ts.u.derived) == NULL)
3406 return MATCH_ERROR;
3407 break;
3410 if (sym->attr.proc_pointer
3411 || replace_hidden_procptr_result (&sym, &st))
3412 break;
3414 /* Fall through to error */
3416 default:
3417 gfc_error ("%qs at %C is not a variable", sym->name);
3418 return MATCH_ERROR;
3421 /* Special case for derived type variables that get their types
3422 via an IMPLICIT statement. This can't wait for the
3423 resolution phase. */
3426 gfc_namespace * implicit_ns;
3428 if (gfc_current_ns->proc_name == sym)
3429 implicit_ns = gfc_current_ns;
3430 else
3431 implicit_ns = sym->ns;
3433 old_loc = gfc_current_locus;
3434 if (gfc_match_member_sep (sym) == MATCH_YES
3435 && sym->ts.type == BT_UNKNOWN
3436 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3437 gfc_set_default_type (sym, 0, implicit_ns);
3438 gfc_current_locus = old_loc;
3441 expr = gfc_get_expr ();
3443 expr->expr_type = EXPR_VARIABLE;
3444 expr->symtree = st;
3445 expr->ts = sym->ts;
3446 expr->where = where;
3448 /* Now see if we have to do more. */
3449 m = gfc_match_varspec (expr, equiv_flag, false, false);
3450 if (m != MATCH_YES)
3452 gfc_free_expr (expr);
3453 return m;
3456 *result = expr;
3457 return MATCH_YES;
3461 match
3462 gfc_match_variable (gfc_expr **result, int equiv_flag)
3464 return match_variable (result, equiv_flag, 1);
3468 match
3469 gfc_match_equiv_variable (gfc_expr **result)
3471 return match_variable (result, 1, 0);