2011-01-29 Tobias Burnus <burnus@net-b.de>
[official-gcc.git] / gcc / fortran / primary.c
blob360176edfdbd1b094d63c7aaf2a4ea034d9d6ea9
1 /* Primary expression subroutines
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 #include "config.h"
23 #include "system.h"
24 #include "flags.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. */
37 static match
38 match_kind_param (int *kind)
40 char name[GFC_MAX_SYMBOL_LEN + 1];
41 gfc_symbol *sym;
42 const char *p;
43 match m;
45 m = gfc_match_small_literal_int (kind, NULL);
46 if (m != MATCH_NO)
47 return m;
49 m = gfc_match_name (name);
50 if (m != MATCH_YES)
51 return m;
53 if (gfc_find_symbol (name, NULL, 1, &sym))
54 return MATCH_ERROR;
56 if (sym == NULL)
57 return MATCH_NO;
59 if (sym->attr.flavor != FL_PARAMETER)
60 return MATCH_NO;
62 if (sym->value == NULL)
63 return MATCH_NO;
65 p = gfc_extract_int (sym->value, kind);
66 if (p != NULL)
67 return MATCH_NO;
69 gfc_set_sym_referenced (sym);
71 if (*kind < 0)
72 return MATCH_NO;
74 return MATCH_YES;
78 /* Get a trailing kind-specification for non-character variables.
79 Returns:
80 the integer kind value or:
81 -1 if an error was generated
82 -2 if no kind was found */
84 static int
85 get_kind (void)
87 int kind;
88 match m;
90 if (gfc_match_char ('_') != MATCH_YES)
91 return -2;
93 m = match_kind_param (&kind);
94 if (m == MATCH_NO)
95 gfc_error ("Missing kind-parameter at %C");
97 return (m == MATCH_YES) ? kind : -1;
101 /* Given a character and a radix, see if the character is a valid
102 digit in that radix. */
105 gfc_check_digit (char c, int radix)
107 int r;
109 switch (radix)
111 case 2:
112 r = ('0' <= c && c <= '1');
113 break;
115 case 8:
116 r = ('0' <= c && c <= '7');
117 break;
119 case 10:
120 r = ('0' <= c && c <= '9');
121 break;
123 case 16:
124 r = ISXDIGIT (c);
125 break;
127 default:
128 gfc_internal_error ("gfc_check_digit(): bad radix");
131 return r;
135 /* Match the digit string part of an integer if signflag is not set,
136 the signed digit string part if signflag is set. If the buffer
137 is NULL, we just count characters for the resolution pass. Returns
138 the number of characters matched, -1 for no match. */
140 static int
141 match_digits (int signflag, int radix, char *buffer)
143 locus old_loc;
144 int length;
145 char c;
147 length = 0;
148 c = gfc_next_ascii_char ();
150 if (signflag && (c == '+' || c == '-'))
152 if (buffer != NULL)
153 *buffer++ = c;
154 gfc_gobble_whitespace ();
155 c = gfc_next_ascii_char ();
156 length++;
159 if (!gfc_check_digit (c, radix))
160 return -1;
162 length++;
163 if (buffer != NULL)
164 *buffer++ = c;
166 for (;;)
168 old_loc = gfc_current_locus;
169 c = gfc_next_ascii_char ();
171 if (!gfc_check_digit (c, radix))
172 break;
174 if (buffer != NULL)
175 *buffer++ = c;
176 length++;
179 gfc_current_locus = old_loc;
181 return length;
185 /* Match an integer (digit string and optional kind).
186 A sign will be accepted if signflag is set. */
188 static match
189 match_integer_constant (gfc_expr **result, int signflag)
191 int length, kind;
192 locus old_loc;
193 char *buffer;
194 gfc_expr *e;
196 old_loc = gfc_current_locus;
197 gfc_gobble_whitespace ();
199 length = match_digits (signflag, 10, NULL);
200 gfc_current_locus = old_loc;
201 if (length == -1)
202 return MATCH_NO;
204 buffer = (char *) alloca (length + 1);
205 memset (buffer, '\0', length + 1);
207 gfc_gobble_whitespace ();
209 match_digits (signflag, 10, buffer);
211 kind = get_kind ();
212 if (kind == -2)
213 kind = gfc_default_integer_kind;
214 if (kind == -1)
215 return MATCH_ERROR;
217 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
219 gfc_error ("Integer kind %d at %C not available", kind);
220 return MATCH_ERROR;
223 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
225 if (gfc_range_check (e) != ARITH_OK)
227 gfc_error ("Integer too big for its kind at %C. This check can be "
228 "disabled with the option -fno-range-check");
230 gfc_free_expr (e);
231 return MATCH_ERROR;
234 *result = e;
235 return MATCH_YES;
239 /* Match a Hollerith constant. */
241 static match
242 match_hollerith_constant (gfc_expr **result)
244 locus old_loc;
245 gfc_expr *e = NULL;
246 const char *msg;
247 int num, pad;
248 int i;
250 old_loc = gfc_current_locus;
251 gfc_gobble_whitespace ();
253 if (match_integer_constant (&e, 0) == MATCH_YES
254 && gfc_match_char ('h') == MATCH_YES)
256 if (gfc_notify_std (GFC_STD_LEGACY, "Extension: Hollerith constant "
257 "at %C") == FAILURE)
258 goto cleanup;
260 msg = gfc_extract_int (e, &num);
261 if (msg != NULL)
263 gfc_error (msg);
264 goto cleanup;
266 if (num == 0)
268 gfc_error ("Invalid Hollerith constant: %L must contain at least "
269 "one character", &old_loc);
270 goto cleanup;
272 if (e->ts.kind != gfc_default_integer_kind)
274 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
275 "should be default", &old_loc);
276 goto cleanup;
278 else
280 gfc_free_expr (e);
281 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
282 &gfc_current_locus);
284 /* Calculate padding needed to fit default integer memory. */
285 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
287 e->representation.string = XCNEWVEC (char, num + pad + 1);
289 for (i = 0; i < num; i++)
291 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
292 if (! gfc_wide_fits_in_byte (c))
294 gfc_error ("Invalid Hollerith constant at %L contains a "
295 "wide character", &old_loc);
296 goto cleanup;
299 e->representation.string[i] = (unsigned char) c;
302 /* Now pad with blanks and end with a null char. */
303 for (i = 0; i < pad; i++)
304 e->representation.string[num + i] = ' ';
306 e->representation.string[num + i] = '\0';
307 e->representation.length = num + pad;
308 e->ts.u.pad = pad;
310 *result = e;
311 return MATCH_YES;
315 gfc_free_expr (e);
316 gfc_current_locus = old_loc;
317 return MATCH_NO;
319 cleanup:
320 gfc_free_expr (e);
321 return MATCH_ERROR;
325 /* Match a binary, octal or hexadecimal constant that can be found in
326 a DATA statement. The standard permits b'010...', o'73...', and
327 z'a1...' where b, o, and z can be capital letters. This function
328 also accepts postfixed forms of the constants: '01...'b, '73...'o,
329 and 'a1...'z. An additional extension is the use of x for z. */
331 static match
332 match_boz_constant (gfc_expr **result)
334 int radix, length, x_hex, kind;
335 locus old_loc, start_loc;
336 char *buffer, post, delim;
337 gfc_expr *e;
339 start_loc = old_loc = gfc_current_locus;
340 gfc_gobble_whitespace ();
342 x_hex = 0;
343 switch (post = gfc_next_ascii_char ())
345 case 'b':
346 radix = 2;
347 post = 0;
348 break;
349 case 'o':
350 radix = 8;
351 post = 0;
352 break;
353 case 'x':
354 x_hex = 1;
355 /* Fall through. */
356 case 'z':
357 radix = 16;
358 post = 0;
359 break;
360 case '\'':
361 /* Fall through. */
362 case '\"':
363 delim = post;
364 post = 1;
365 radix = 16; /* Set to accept any valid digit string. */
366 break;
367 default:
368 goto backup;
371 /* No whitespace allowed here. */
373 if (post == 0)
374 delim = gfc_next_ascii_char ();
376 if (delim != '\'' && delim != '\"')
377 goto backup;
379 if (x_hex
380 && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
381 "constant at %C uses non-standard syntax")
382 == FAILURE))
383 return MATCH_ERROR;
385 old_loc = gfc_current_locus;
387 length = match_digits (0, radix, NULL);
388 if (length == -1)
390 gfc_error ("Empty set of digits in BOZ constant at %C");
391 return MATCH_ERROR;
394 if (gfc_next_ascii_char () != delim)
396 gfc_error ("Illegal character in BOZ constant at %C");
397 return MATCH_ERROR;
400 if (post == 1)
402 switch (gfc_next_ascii_char ())
404 case 'b':
405 radix = 2;
406 break;
407 case 'o':
408 radix = 8;
409 break;
410 case 'x':
411 /* Fall through. */
412 case 'z':
413 radix = 16;
414 break;
415 default:
416 goto backup;
419 if (gfc_notify_std (GFC_STD_GNU, "Extension: BOZ constant "
420 "at %C uses non-standard postfix syntax")
421 == FAILURE)
422 return MATCH_ERROR;
425 gfc_current_locus = old_loc;
427 buffer = (char *) alloca (length + 1);
428 memset (buffer, '\0', length + 1);
430 match_digits (0, radix, buffer);
431 gfc_next_ascii_char (); /* Eat delimiter. */
432 if (post == 1)
433 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
435 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
436 "If a data-stmt-constant is a boz-literal-constant, the corresponding
437 variable shall be of type integer. The boz-literal-constant is treated
438 as if it were an int-literal-constant with a kind-param that specifies
439 the representation method with the largest decimal exponent range
440 supported by the processor." */
442 kind = gfc_max_integer_kind;
443 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
445 /* Mark as boz variable. */
446 e->is_boz = 1;
448 if (gfc_range_check (e) != ARITH_OK)
450 gfc_error ("Integer too big for integer kind %i at %C", kind);
451 gfc_free_expr (e);
452 return MATCH_ERROR;
455 if (!gfc_in_match_data ()
456 && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BOZ used outside a DATA "
457 "statement at %C")
458 == FAILURE))
459 return MATCH_ERROR;
461 *result = e;
462 return MATCH_YES;
464 backup:
465 gfc_current_locus = start_loc;
466 return MATCH_NO;
470 /* Match a real constant of some sort. Allow a signed constant if signflag
471 is nonzero. */
473 static match
474 match_real_constant (gfc_expr **result, int signflag)
476 int kind, count, seen_dp, seen_digits;
477 locus old_loc, temp_loc;
478 char *p, *buffer, c, exp_char;
479 gfc_expr *e;
480 bool negate;
482 old_loc = gfc_current_locus;
483 gfc_gobble_whitespace ();
485 e = NULL;
487 count = 0;
488 seen_dp = 0;
489 seen_digits = 0;
490 exp_char = ' ';
491 negate = FALSE;
493 c = gfc_next_ascii_char ();
494 if (signflag && (c == '+' || c == '-'))
496 if (c == '-')
497 negate = TRUE;
499 gfc_gobble_whitespace ();
500 c = gfc_next_ascii_char ();
503 /* Scan significand. */
504 for (;; c = gfc_next_ascii_char (), count++)
506 if (c == '.')
508 if (seen_dp)
509 goto done;
511 /* Check to see if "." goes with a following operator like
512 ".eq.". */
513 temp_loc = gfc_current_locus;
514 c = gfc_next_ascii_char ();
516 if (c == 'e' || c == 'd' || c == 'q')
518 c = gfc_next_ascii_char ();
519 if (c == '.')
520 goto done; /* Operator named .e. or .d. */
523 if (ISALPHA (c))
524 goto done; /* Distinguish 1.e9 from 1.eq.2 */
526 gfc_current_locus = temp_loc;
527 seen_dp = 1;
528 continue;
531 if (ISDIGIT (c))
533 seen_digits = 1;
534 continue;
537 break;
540 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
541 goto done;
542 exp_char = c;
544 /* Scan exponent. */
545 c = gfc_next_ascii_char ();
546 count++;
548 if (c == '+' || c == '-')
549 { /* optional sign */
550 c = gfc_next_ascii_char ();
551 count++;
554 if (!ISDIGIT (c))
556 gfc_error ("Missing exponent in real number at %C");
557 return MATCH_ERROR;
560 while (ISDIGIT (c))
562 c = gfc_next_ascii_char ();
563 count++;
566 done:
567 /* Check that we have a numeric constant. */
568 if (!seen_digits || (!seen_dp && exp_char == ' '))
570 gfc_current_locus = old_loc;
571 return MATCH_NO;
574 /* Convert the number. */
575 gfc_current_locus = old_loc;
576 gfc_gobble_whitespace ();
578 buffer = (char *) alloca (count + 1);
579 memset (buffer, '\0', count + 1);
581 p = buffer;
582 c = gfc_next_ascii_char ();
583 if (c == '+' || c == '-')
585 gfc_gobble_whitespace ();
586 c = gfc_next_ascii_char ();
589 /* Hack for mpfr_set_str(). */
590 for (;;)
592 if (c == 'd' || c == 'q')
593 *p = 'e';
594 else
595 *p = c;
596 p++;
597 if (--count == 0)
598 break;
600 c = gfc_next_ascii_char ();
603 kind = get_kind ();
604 if (kind == -1)
605 goto cleanup;
607 switch (exp_char)
609 case 'd':
610 if (kind != -2)
612 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
613 "kind");
614 goto cleanup;
616 kind = gfc_default_double_kind;
617 break;
619 default:
620 if (kind == -2)
621 kind = gfc_default_real_kind;
623 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
625 gfc_error ("Invalid real kind %d at %C", kind);
626 goto cleanup;
630 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
631 if (negate)
632 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
634 switch (gfc_range_check (e))
636 case ARITH_OK:
637 break;
638 case ARITH_OVERFLOW:
639 gfc_error ("Real constant overflows its kind at %C");
640 goto cleanup;
642 case ARITH_UNDERFLOW:
643 if (gfc_option.warn_underflow)
644 gfc_warning ("Real constant underflows its kind at %C");
645 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
646 break;
648 default:
649 gfc_internal_error ("gfc_range_check() returned bad value");
652 *result = e;
653 return MATCH_YES;
655 cleanup:
656 gfc_free_expr (e);
657 return MATCH_ERROR;
661 /* Match a substring reference. */
663 static match
664 match_substring (gfc_charlen *cl, int init, gfc_ref **result)
666 gfc_expr *start, *end;
667 locus old_loc;
668 gfc_ref *ref;
669 match m;
671 start = NULL;
672 end = NULL;
674 old_loc = gfc_current_locus;
676 m = gfc_match_char ('(');
677 if (m != MATCH_YES)
678 return MATCH_NO;
680 if (gfc_match_char (':') != MATCH_YES)
682 if (init)
683 m = gfc_match_init_expr (&start);
684 else
685 m = gfc_match_expr (&start);
687 if (m != MATCH_YES)
689 m = MATCH_NO;
690 goto cleanup;
693 m = gfc_match_char (':');
694 if (m != MATCH_YES)
695 goto cleanup;
698 if (gfc_match_char (')') != MATCH_YES)
700 if (init)
701 m = gfc_match_init_expr (&end);
702 else
703 m = gfc_match_expr (&end);
705 if (m == MATCH_NO)
706 goto syntax;
707 if (m == MATCH_ERROR)
708 goto cleanup;
710 m = gfc_match_char (')');
711 if (m == MATCH_NO)
712 goto syntax;
715 /* Optimize away the (:) reference. */
716 if (start == NULL && end == NULL)
717 ref = NULL;
718 else
720 ref = gfc_get_ref ();
722 ref->type = REF_SUBSTRING;
723 if (start == NULL)
724 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
725 ref->u.ss.start = start;
726 if (end == NULL && cl)
727 end = gfc_copy_expr (cl->length);
728 ref->u.ss.end = end;
729 ref->u.ss.length = cl;
732 *result = ref;
733 return MATCH_YES;
735 syntax:
736 gfc_error ("Syntax error in SUBSTRING specification at %C");
737 m = MATCH_ERROR;
739 cleanup:
740 gfc_free_expr (start);
741 gfc_free_expr (end);
743 gfc_current_locus = old_loc;
744 return m;
748 /* Reads the next character of a string constant, taking care to
749 return doubled delimiters on the input as a single instance of
750 the delimiter.
752 Special return values for "ret" argument are:
753 -1 End of the string, as determined by the delimiter
754 -2 Unterminated string detected
756 Backslash codes are also expanded at this time. */
758 static gfc_char_t
759 next_string_char (gfc_char_t delimiter, int *ret)
761 locus old_locus;
762 gfc_char_t c;
764 c = gfc_next_char_literal (INSTRING_WARN);
765 *ret = 0;
767 if (c == '\n')
769 *ret = -2;
770 return 0;
773 if (gfc_option.flag_backslash && c == '\\')
775 old_locus = gfc_current_locus;
777 if (gfc_match_special_char (&c) == MATCH_NO)
778 gfc_current_locus = old_locus;
780 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
781 gfc_warning ("Extension: backslash character at %C");
784 if (c != delimiter)
785 return c;
787 old_locus = gfc_current_locus;
788 c = gfc_next_char_literal (NONSTRING);
790 if (c == delimiter)
791 return c;
792 gfc_current_locus = old_locus;
794 *ret = -1;
795 return 0;
799 /* Special case of gfc_match_name() that matches a parameter kind name
800 before a string constant. This takes case of the weird but legal
801 case of:
803 kind_____'string'
805 where kind____ is a parameter. gfc_match_name() will happily slurp
806 up all the underscores, which leads to problems. If we return
807 MATCH_YES, the parse pointer points to the final underscore, which
808 is not part of the name. We never return MATCH_ERROR-- errors in
809 the name will be detected later. */
811 static match
812 match_charkind_name (char *name)
814 locus old_loc;
815 char c, peek;
816 int len;
818 gfc_gobble_whitespace ();
819 c = gfc_next_ascii_char ();
820 if (!ISALPHA (c))
821 return MATCH_NO;
823 *name++ = c;
824 len = 1;
826 for (;;)
828 old_loc = gfc_current_locus;
829 c = gfc_next_ascii_char ();
831 if (c == '_')
833 peek = gfc_peek_ascii_char ();
835 if (peek == '\'' || peek == '\"')
837 gfc_current_locus = old_loc;
838 *name = '\0';
839 return MATCH_YES;
843 if (!ISALNUM (c)
844 && c != '_'
845 && (c != '$' || !gfc_option.flag_dollar_ok))
846 break;
848 *name++ = c;
849 if (++len > GFC_MAX_SYMBOL_LEN)
850 break;
853 return MATCH_NO;
857 /* See if the current input matches a character constant. Lots of
858 contortions have to be done to match the kind parameter which comes
859 before the actual string. The main consideration is that we don't
860 want to error out too quickly. For example, we don't actually do
861 any validation of the kinds until we have actually seen a legal
862 delimiter. Using match_kind_param() generates errors too quickly. */
864 static match
865 match_string_constant (gfc_expr **result)
867 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
868 int i, kind, length, warn_ampersand, ret;
869 locus old_locus, start_locus;
870 gfc_symbol *sym;
871 gfc_expr *e;
872 const char *q;
873 match m;
874 gfc_char_t c, delimiter, *p;
876 old_locus = gfc_current_locus;
878 gfc_gobble_whitespace ();
880 c = gfc_next_char ();
881 if (c == '\'' || c == '"')
883 kind = gfc_default_character_kind;
884 start_locus = gfc_current_locus;
885 goto got_delim;
888 if (gfc_wide_is_digit (c))
890 kind = 0;
892 while (gfc_wide_is_digit (c))
894 kind = kind * 10 + c - '0';
895 if (kind > 9999999)
896 goto no_match;
897 c = gfc_next_char ();
901 else
903 gfc_current_locus = old_locus;
905 m = match_charkind_name (name);
906 if (m != MATCH_YES)
907 goto no_match;
909 if (gfc_find_symbol (name, NULL, 1, &sym)
910 || sym == NULL
911 || sym->attr.flavor != FL_PARAMETER)
912 goto no_match;
914 kind = -1;
915 c = gfc_next_char ();
918 if (c == ' ')
920 gfc_gobble_whitespace ();
921 c = gfc_next_char ();
924 if (c != '_')
925 goto no_match;
927 gfc_gobble_whitespace ();
929 c = gfc_next_char ();
930 if (c != '\'' && c != '"')
931 goto no_match;
933 start_locus = gfc_current_locus;
935 if (kind == -1)
937 q = gfc_extract_int (sym->value, &kind);
938 if (q != NULL)
940 gfc_error (q);
941 return MATCH_ERROR;
943 gfc_set_sym_referenced (sym);
946 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
948 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
949 return MATCH_ERROR;
952 got_delim:
953 /* Scan the string into a block of memory by first figuring out how
954 long it is, allocating the structure, then re-reading it. This
955 isn't particularly efficient, but string constants aren't that
956 common in most code. TODO: Use obstacks? */
958 delimiter = c;
959 length = 0;
961 for (;;)
963 c = next_string_char (delimiter, &ret);
964 if (ret == -1)
965 break;
966 if (ret == -2)
968 gfc_current_locus = start_locus;
969 gfc_error ("Unterminated character constant beginning at %C");
970 return MATCH_ERROR;
973 length++;
976 /* Peek at the next character to see if it is a b, o, z, or x for the
977 postfixed BOZ literal constants. */
978 peek = gfc_peek_ascii_char ();
979 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
980 goto no_match;
982 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
983 e->ref = NULL;
984 e->ts.is_c_interop = 0;
985 e->ts.is_iso_c = 0;
987 gfc_current_locus = start_locus;
989 /* We disable the warning for the following loop as the warning has already
990 been printed in the loop above. */
991 warn_ampersand = gfc_option.warn_ampersand;
992 gfc_option.warn_ampersand = 0;
994 p = e->value.character.string;
995 for (i = 0; i < length; i++)
997 c = next_string_char (delimiter, &ret);
999 if (!gfc_check_character_range (c, kind))
1001 gfc_error ("Character '%s' in string at %C is not representable "
1002 "in character kind %d", gfc_print_wide_char (c), kind);
1003 return MATCH_ERROR;
1006 *p++ = c;
1009 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1010 gfc_option.warn_ampersand = warn_ampersand;
1012 next_string_char (delimiter, &ret);
1013 if (ret != -1)
1014 gfc_internal_error ("match_string_constant(): Delimiter not found");
1016 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1017 e->expr_type = EXPR_SUBSTRING;
1019 *result = e;
1021 return MATCH_YES;
1023 no_match:
1024 gfc_current_locus = old_locus;
1025 return MATCH_NO;
1029 /* Match a .true. or .false. Returns 1 if a .true. was found,
1030 0 if a .false. was found, and -1 otherwise. */
1031 static int
1032 match_logical_constant_string (void)
1034 locus orig_loc = gfc_current_locus;
1036 gfc_gobble_whitespace ();
1037 if (gfc_next_ascii_char () == '.')
1039 char ch = gfc_next_ascii_char ();
1040 if (ch == 'f')
1042 if (gfc_next_ascii_char () == 'a'
1043 && gfc_next_ascii_char () == 'l'
1044 && gfc_next_ascii_char () == 's'
1045 && gfc_next_ascii_char () == 'e'
1046 && gfc_next_ascii_char () == '.')
1047 /* Matched ".false.". */
1048 return 0;
1050 else if (ch == 't')
1052 if (gfc_next_ascii_char () == 'r'
1053 && gfc_next_ascii_char () == 'u'
1054 && gfc_next_ascii_char () == 'e'
1055 && gfc_next_ascii_char () == '.')
1056 /* Matched ".true.". */
1057 return 1;
1060 gfc_current_locus = orig_loc;
1061 return -1;
1064 /* Match a .true. or .false. */
1066 static match
1067 match_logical_constant (gfc_expr **result)
1069 gfc_expr *e;
1070 int i, kind;
1072 i = match_logical_constant_string ();
1073 if (i == -1)
1074 return MATCH_NO;
1076 kind = get_kind ();
1077 if (kind == -1)
1078 return MATCH_ERROR;
1079 if (kind == -2)
1080 kind = gfc_default_logical_kind;
1082 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1084 gfc_error ("Bad kind for logical constant at %C");
1085 return MATCH_ERROR;
1088 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1089 e->ts.is_c_interop = 0;
1090 e->ts.is_iso_c = 0;
1092 *result = e;
1093 return MATCH_YES;
1097 /* Match a real or imaginary part of a complex constant that is a
1098 symbolic constant. */
1100 static match
1101 match_sym_complex_part (gfc_expr **result)
1103 char name[GFC_MAX_SYMBOL_LEN + 1];
1104 gfc_symbol *sym;
1105 gfc_expr *e;
1106 match m;
1108 m = gfc_match_name (name);
1109 if (m != MATCH_YES)
1110 return m;
1112 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1113 return MATCH_NO;
1115 if (sym->attr.flavor != FL_PARAMETER)
1117 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1118 return MATCH_ERROR;
1121 if (!gfc_numeric_ts (&sym->value->ts))
1123 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1124 return MATCH_ERROR;
1127 if (sym->value->rank != 0)
1129 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1130 return MATCH_ERROR;
1133 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PARAMETER symbol in "
1134 "complex constant at %C") == FAILURE)
1135 return MATCH_ERROR;
1137 switch (sym->value->ts.type)
1139 case BT_REAL:
1140 e = gfc_copy_expr (sym->value);
1141 break;
1143 case BT_COMPLEX:
1144 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1145 if (e == NULL)
1146 goto error;
1147 break;
1149 case BT_INTEGER:
1150 e = gfc_int2real (sym->value, gfc_default_real_kind);
1151 if (e == NULL)
1152 goto error;
1153 break;
1155 default:
1156 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1159 *result = e; /* e is a scalar, real, constant expression. */
1160 return MATCH_YES;
1162 error:
1163 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1164 return MATCH_ERROR;
1168 /* Match a real or imaginary part of a complex number. */
1170 static match
1171 match_complex_part (gfc_expr **result)
1173 match m;
1175 m = match_sym_complex_part (result);
1176 if (m != MATCH_NO)
1177 return m;
1179 m = match_real_constant (result, 1);
1180 if (m != MATCH_NO)
1181 return m;
1183 return match_integer_constant (result, 1);
1187 /* Try to match a complex constant. */
1189 static match
1190 match_complex_constant (gfc_expr **result)
1192 gfc_expr *e, *real, *imag;
1193 gfc_error_buf old_error;
1194 gfc_typespec target;
1195 locus old_loc;
1196 int kind;
1197 match m;
1199 old_loc = gfc_current_locus;
1200 real = imag = e = NULL;
1202 m = gfc_match_char ('(');
1203 if (m != MATCH_YES)
1204 return m;
1206 gfc_push_error (&old_error);
1208 m = match_complex_part (&real);
1209 if (m == MATCH_NO)
1211 gfc_free_error (&old_error);
1212 goto cleanup;
1215 if (gfc_match_char (',') == MATCH_NO)
1217 gfc_pop_error (&old_error);
1218 m = MATCH_NO;
1219 goto cleanup;
1222 /* If m is error, then something was wrong with the real part and we
1223 assume we have a complex constant because we've seen the ','. An
1224 ambiguous case here is the start of an iterator list of some
1225 sort. These sort of lists are matched prior to coming here. */
1227 if (m == MATCH_ERROR)
1229 gfc_free_error (&old_error);
1230 goto cleanup;
1232 gfc_pop_error (&old_error);
1234 m = match_complex_part (&imag);
1235 if (m == MATCH_NO)
1236 goto syntax;
1237 if (m == MATCH_ERROR)
1238 goto cleanup;
1240 m = gfc_match_char (')');
1241 if (m == MATCH_NO)
1243 /* Give the matcher for implied do-loops a chance to run. This
1244 yields a much saner error message for (/ (i, 4=i, 6) /). */
1245 if (gfc_peek_ascii_char () == '=')
1247 m = MATCH_ERROR;
1248 goto cleanup;
1250 else
1251 goto syntax;
1254 if (m == MATCH_ERROR)
1255 goto cleanup;
1257 /* Decide on the kind of this complex number. */
1258 if (real->ts.type == BT_REAL)
1260 if (imag->ts.type == BT_REAL)
1261 kind = gfc_kind_max (real, imag);
1262 else
1263 kind = real->ts.kind;
1265 else
1267 if (imag->ts.type == BT_REAL)
1268 kind = imag->ts.kind;
1269 else
1270 kind = gfc_default_real_kind;
1272 target.type = BT_REAL;
1273 target.kind = kind;
1274 target.is_c_interop = 0;
1275 target.is_iso_c = 0;
1277 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1278 gfc_convert_type (real, &target, 2);
1279 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1280 gfc_convert_type (imag, &target, 2);
1282 e = gfc_convert_complex (real, imag, kind);
1283 e->where = gfc_current_locus;
1285 gfc_free_expr (real);
1286 gfc_free_expr (imag);
1288 *result = e;
1289 return MATCH_YES;
1291 syntax:
1292 gfc_error ("Syntax error in COMPLEX constant at %C");
1293 m = MATCH_ERROR;
1295 cleanup:
1296 gfc_free_expr (e);
1297 gfc_free_expr (real);
1298 gfc_free_expr (imag);
1299 gfc_current_locus = old_loc;
1301 return m;
1305 /* Match constants in any of several forms. Returns nonzero for a
1306 match, zero for no match. */
1308 match
1309 gfc_match_literal_constant (gfc_expr **result, int signflag)
1311 match m;
1313 m = match_complex_constant (result);
1314 if (m != MATCH_NO)
1315 return m;
1317 m = match_string_constant (result);
1318 if (m != MATCH_NO)
1319 return m;
1321 m = match_boz_constant (result);
1322 if (m != MATCH_NO)
1323 return m;
1325 m = match_real_constant (result, signflag);
1326 if (m != MATCH_NO)
1327 return m;
1329 m = match_hollerith_constant (result);
1330 if (m != MATCH_NO)
1331 return m;
1333 m = match_integer_constant (result, signflag);
1334 if (m != MATCH_NO)
1335 return m;
1337 m = match_logical_constant (result);
1338 if (m != MATCH_NO)
1339 return m;
1341 return MATCH_NO;
1345 /* This checks if a symbol is the return value of an encompassing function.
1346 Function nesting can be maximally two levels deep, but we may have
1347 additional local namespaces like BLOCK etc. */
1349 bool
1350 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1352 if (!sym->attr.function || (sym->result != sym))
1353 return false;
1354 while (ns)
1356 if (ns->proc_name == sym)
1357 return true;
1358 ns = ns->parent;
1360 return false;
1364 /* Match a single actual argument value. An actual argument is
1365 usually an expression, but can also be a procedure name. If the
1366 argument is a single name, it is not always possible to tell
1367 whether the name is a dummy procedure or not. We treat these cases
1368 by creating an argument that looks like a dummy procedure and
1369 fixing things later during resolution. */
1371 static match
1372 match_actual_arg (gfc_expr **result)
1374 char name[GFC_MAX_SYMBOL_LEN + 1];
1375 gfc_symtree *symtree;
1376 locus where, w;
1377 gfc_expr *e;
1378 char c;
1380 gfc_gobble_whitespace ();
1381 where = gfc_current_locus;
1383 switch (gfc_match_name (name))
1385 case MATCH_ERROR:
1386 return MATCH_ERROR;
1388 case MATCH_NO:
1389 break;
1391 case MATCH_YES:
1392 w = gfc_current_locus;
1393 gfc_gobble_whitespace ();
1394 c = gfc_next_ascii_char ();
1395 gfc_current_locus = w;
1397 if (c != ',' && c != ')')
1398 break;
1400 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1401 break;
1402 /* Handle error elsewhere. */
1404 /* Eliminate a couple of common cases where we know we don't
1405 have a function argument. */
1406 if (symtree == NULL)
1408 gfc_get_sym_tree (name, NULL, &symtree, false);
1409 gfc_set_sym_referenced (symtree->n.sym);
1411 else
1413 gfc_symbol *sym;
1415 sym = symtree->n.sym;
1416 gfc_set_sym_referenced (sym);
1417 if (sym->attr.flavor != FL_PROCEDURE
1418 && sym->attr.flavor != FL_UNKNOWN)
1419 break;
1421 if (sym->attr.in_common && !sym->attr.proc_pointer)
1423 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1424 &sym->declared_at);
1425 break;
1428 /* If the symbol is a function with itself as the result and
1429 is being defined, then we have a variable. */
1430 if (sym->attr.function && sym->result == sym)
1432 if (gfc_is_function_return_value (sym, gfc_current_ns))
1433 break;
1435 if (sym->attr.entry
1436 && (sym->ns == gfc_current_ns
1437 || sym->ns == gfc_current_ns->parent))
1439 gfc_entry_list *el = NULL;
1441 for (el = sym->ns->entries; el; el = el->next)
1442 if (sym == el->sym)
1443 break;
1445 if (el)
1446 break;
1451 e = gfc_get_expr (); /* Leave it unknown for now */
1452 e->symtree = symtree;
1453 e->expr_type = EXPR_VARIABLE;
1454 e->ts.type = BT_PROCEDURE;
1455 e->where = where;
1457 *result = e;
1458 return MATCH_YES;
1461 gfc_current_locus = where;
1462 return gfc_match_expr (result);
1466 /* Match a keyword argument. */
1468 static match
1469 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1471 char name[GFC_MAX_SYMBOL_LEN + 1];
1472 gfc_actual_arglist *a;
1473 locus name_locus;
1474 match m;
1476 name_locus = gfc_current_locus;
1477 m = gfc_match_name (name);
1479 if (m != MATCH_YES)
1480 goto cleanup;
1481 if (gfc_match_char ('=') != MATCH_YES)
1483 m = MATCH_NO;
1484 goto cleanup;
1487 m = match_actual_arg (&actual->expr);
1488 if (m != MATCH_YES)
1489 goto cleanup;
1491 /* Make sure this name has not appeared yet. */
1493 if (name[0] != '\0')
1495 for (a = base; a; a = a->next)
1496 if (a->name != NULL && strcmp (a->name, name) == 0)
1498 gfc_error ("Keyword '%s' at %C has already appeared in the "
1499 "current argument list", name);
1500 return MATCH_ERROR;
1504 actual->name = gfc_get_string (name);
1505 return MATCH_YES;
1507 cleanup:
1508 gfc_current_locus = name_locus;
1509 return m;
1513 /* Match an argument list function, such as %VAL. */
1515 static match
1516 match_arg_list_function (gfc_actual_arglist *result)
1518 char name[GFC_MAX_SYMBOL_LEN + 1];
1519 locus old_locus;
1520 match m;
1522 old_locus = gfc_current_locus;
1524 if (gfc_match_char ('%') != MATCH_YES)
1526 m = MATCH_NO;
1527 goto cleanup;
1530 m = gfc_match ("%n (", name);
1531 if (m != MATCH_YES)
1532 goto cleanup;
1534 if (name[0] != '\0')
1536 switch (name[0])
1538 case 'l':
1539 if (strncmp (name, "loc", 3) == 0)
1541 result->name = "%LOC";
1542 break;
1544 case 'r':
1545 if (strncmp (name, "ref", 3) == 0)
1547 result->name = "%REF";
1548 break;
1550 case 'v':
1551 if (strncmp (name, "val", 3) == 0)
1553 result->name = "%VAL";
1554 break;
1556 default:
1557 m = MATCH_ERROR;
1558 goto cleanup;
1562 if (gfc_notify_std (GFC_STD_GNU, "Extension: argument list "
1563 "function at %C") == FAILURE)
1565 m = MATCH_ERROR;
1566 goto cleanup;
1569 m = match_actual_arg (&result->expr);
1570 if (m != MATCH_YES)
1571 goto cleanup;
1573 if (gfc_match_char (')') != MATCH_YES)
1575 m = MATCH_NO;
1576 goto cleanup;
1579 return MATCH_YES;
1581 cleanup:
1582 gfc_current_locus = old_locus;
1583 return m;
1587 /* Matches an actual argument list of a function or subroutine, from
1588 the opening parenthesis to the closing parenthesis. The argument
1589 list is assumed to allow keyword arguments because we don't know if
1590 the symbol associated with the procedure has an implicit interface
1591 or not. We make sure keywords are unique. If sub_flag is set,
1592 we're matching the argument list of a subroutine. */
1594 match
1595 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1597 gfc_actual_arglist *head, *tail;
1598 int seen_keyword;
1599 gfc_st_label *label;
1600 locus old_loc;
1601 match m;
1603 *argp = tail = NULL;
1604 old_loc = gfc_current_locus;
1606 seen_keyword = 0;
1608 if (gfc_match_char ('(') == MATCH_NO)
1609 return (sub_flag) ? MATCH_YES : MATCH_NO;
1611 if (gfc_match_char (')') == MATCH_YES)
1612 return MATCH_YES;
1613 head = NULL;
1615 matching_actual_arglist++;
1617 for (;;)
1619 if (head == NULL)
1620 head = tail = gfc_get_actual_arglist ();
1621 else
1623 tail->next = gfc_get_actual_arglist ();
1624 tail = tail->next;
1627 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1629 m = gfc_match_st_label (&label);
1630 if (m == MATCH_NO)
1631 gfc_error ("Expected alternate return label at %C");
1632 if (m != MATCH_YES)
1633 goto cleanup;
1635 tail->label = label;
1636 goto next;
1639 /* After the first keyword argument is seen, the following
1640 arguments must also have keywords. */
1641 if (seen_keyword)
1643 m = match_keyword_arg (tail, head);
1645 if (m == MATCH_ERROR)
1646 goto cleanup;
1647 if (m == MATCH_NO)
1649 gfc_error ("Missing keyword name in actual argument list at %C");
1650 goto cleanup;
1654 else
1656 /* Try an argument list function, like %VAL. */
1657 m = match_arg_list_function (tail);
1658 if (m == MATCH_ERROR)
1659 goto cleanup;
1661 /* See if we have the first keyword argument. */
1662 if (m == MATCH_NO)
1664 m = match_keyword_arg (tail, head);
1665 if (m == MATCH_YES)
1666 seen_keyword = 1;
1667 if (m == MATCH_ERROR)
1668 goto cleanup;
1671 if (m == MATCH_NO)
1673 /* Try for a non-keyword argument. */
1674 m = match_actual_arg (&tail->expr);
1675 if (m == MATCH_ERROR)
1676 goto cleanup;
1677 if (m == MATCH_NO)
1678 goto syntax;
1683 next:
1684 if (gfc_match_char (')') == MATCH_YES)
1685 break;
1686 if (gfc_match_char (',') != MATCH_YES)
1687 goto syntax;
1690 *argp = head;
1691 matching_actual_arglist--;
1692 return MATCH_YES;
1694 syntax:
1695 gfc_error ("Syntax error in argument list at %C");
1697 cleanup:
1698 gfc_free_actual_arglist (head);
1699 gfc_current_locus = old_loc;
1700 matching_actual_arglist--;
1701 return MATCH_ERROR;
1705 /* Used by gfc_match_varspec() to extend the reference list by one
1706 element. */
1708 static gfc_ref *
1709 extend_ref (gfc_expr *primary, gfc_ref *tail)
1711 if (primary->ref == NULL)
1712 primary->ref = tail = gfc_get_ref ();
1713 else
1715 if (tail == NULL)
1716 gfc_internal_error ("extend_ref(): Bad tail");
1717 tail->next = gfc_get_ref ();
1718 tail = tail->next;
1721 return tail;
1725 /* Match any additional specifications associated with the current
1726 variable like member references or substrings. If equiv_flag is
1727 set we only match stuff that is allowed inside an EQUIVALENCE
1728 statement. sub_flag tells whether we expect a type-bound procedure found
1729 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1730 components, 'ppc_arg' determines whether the PPC may be called (with an
1731 argument list), or whether it may just be referred to as a pointer. */
1733 match
1734 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1735 bool ppc_arg)
1737 char name[GFC_MAX_SYMBOL_LEN + 1];
1738 gfc_ref *substring, *tail;
1739 gfc_component *component;
1740 gfc_symbol *sym = primary->symtree->n.sym;
1741 match m;
1742 bool unknown;
1744 tail = NULL;
1746 gfc_gobble_whitespace ();
1748 if (gfc_peek_ascii_char () == '[')
1750 if (sym->attr.dimension)
1752 gfc_error ("Array section designator, e.g. '(:)', is required "
1753 "besides the coarray designator '[...]' at %C");
1754 return MATCH_ERROR;
1756 if (!sym->attr.codimension)
1758 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1759 sym->name);
1760 return MATCH_ERROR;
1764 /* For associate names, we may not yet know whether they are arrays or not.
1765 Thus if we have one and parentheses follow, we have to assume that it
1766 actually is one for now. The final decision will be made at
1767 resolution time, of course. */
1768 if (sym->assoc && gfc_peek_ascii_char () == '(')
1769 sym->attr.dimension = 1;
1771 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1772 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1773 || (sym->attr.dimension && !sym->attr.proc_pointer
1774 && !gfc_is_proc_ptr_comp (primary, NULL)
1775 && !(gfc_matching_procptr_assignment
1776 && sym->attr.flavor == FL_PROCEDURE))
1777 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1778 && CLASS_DATA (sym)->attr.dimension))
1780 /* In EQUIVALENCE, we don't know yet whether we are seeing
1781 an array, character variable or array of character
1782 variables. We'll leave the decision till resolve time. */
1783 tail = extend_ref (primary, tail);
1784 tail->type = REF_ARRAY;
1786 m = gfc_match_array_ref (&tail->u.ar, equiv_flag ? NULL : sym->as,
1787 equiv_flag,
1788 sym->ts.type == BT_CLASS
1789 ? (CLASS_DATA (sym)->as
1790 ? CLASS_DATA (sym)->as->corank : 0)
1791 : (sym->as ? sym->as->corank : 0));
1792 if (m != MATCH_YES)
1793 return m;
1795 gfc_gobble_whitespace ();
1796 if (equiv_flag && gfc_peek_ascii_char () == '(')
1798 tail = extend_ref (primary, tail);
1799 tail->type = REF_ARRAY;
1801 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1802 if (m != MATCH_YES)
1803 return m;
1807 primary->ts = sym->ts;
1809 if (equiv_flag)
1810 return MATCH_YES;
1812 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
1813 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1814 gfc_set_default_type (sym, 0, sym->ns);
1816 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1817 || gfc_match_char ('%') != MATCH_YES)
1818 goto check_substring;
1820 sym = sym->ts.u.derived;
1822 for (;;)
1824 gfc_try t;
1825 gfc_symtree *tbp;
1827 m = gfc_match_name (name);
1828 if (m == MATCH_NO)
1829 gfc_error ("Expected structure component name at %C");
1830 if (m != MATCH_YES)
1831 return MATCH_ERROR;
1833 if (sym->f2k_derived)
1834 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1835 else
1836 tbp = NULL;
1838 if (tbp)
1840 gfc_symbol* tbp_sym;
1842 if (t == FAILURE)
1843 return MATCH_ERROR;
1845 gcc_assert (!tail || !tail->next);
1846 gcc_assert (primary->expr_type == EXPR_VARIABLE
1847 || (primary->expr_type == EXPR_STRUCTURE
1848 && primary->symtree && primary->symtree->n.sym
1849 && primary->symtree->n.sym->attr.flavor));
1851 if (tbp->n.tb->is_generic)
1852 tbp_sym = NULL;
1853 else
1854 tbp_sym = tbp->n.tb->u.specific->n.sym;
1856 primary->expr_type = EXPR_COMPCALL;
1857 primary->value.compcall.tbp = tbp->n.tb;
1858 primary->value.compcall.name = tbp->name;
1859 primary->value.compcall.ignore_pass = 0;
1860 primary->value.compcall.assign = 0;
1861 primary->value.compcall.base_object = NULL;
1862 gcc_assert (primary->symtree->n.sym->attr.referenced);
1863 if (tbp_sym)
1864 primary->ts = tbp_sym->ts;
1866 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
1867 &primary->value.compcall.actual);
1868 if (m == MATCH_ERROR)
1869 return MATCH_ERROR;
1870 if (m == MATCH_NO)
1872 if (sub_flag)
1873 primary->value.compcall.actual = NULL;
1874 else
1876 gfc_error ("Expected argument list at %C");
1877 return MATCH_ERROR;
1881 break;
1884 component = gfc_find_component (sym, name, false, false);
1885 if (component == NULL)
1886 return MATCH_ERROR;
1888 tail = extend_ref (primary, tail);
1889 tail->type = REF_COMPONENT;
1891 tail->u.c.component = component;
1892 tail->u.c.sym = sym;
1894 primary->ts = component->ts;
1896 if (component->attr.proc_pointer && ppc_arg
1897 && !gfc_matching_procptr_assignment)
1899 /* Procedure pointer component call: Look for argument list. */
1900 m = gfc_match_actual_arglist (sub_flag,
1901 &primary->value.compcall.actual);
1902 if (m == MATCH_ERROR)
1903 return MATCH_ERROR;
1905 if (m == MATCH_NO && !gfc_matching_ptr_assignment
1906 && !matching_actual_arglist)
1908 gfc_error ("Procedure pointer component '%s' requires an "
1909 "argument list at %C", component->name);
1910 return MATCH_ERROR;
1913 if (m == MATCH_YES)
1914 primary->expr_type = EXPR_PPC;
1916 break;
1919 if (component->as != NULL && !component->attr.proc_pointer)
1921 tail = extend_ref (primary, tail);
1922 tail->type = REF_ARRAY;
1924 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
1925 component->as->corank);
1926 if (m != MATCH_YES)
1927 return m;
1929 else if (component->ts.type == BT_CLASS
1930 && CLASS_DATA (component)->as != NULL
1931 && !component->attr.proc_pointer)
1933 tail = extend_ref (primary, tail);
1934 tail->type = REF_ARRAY;
1936 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
1937 equiv_flag,
1938 CLASS_DATA (component)->as->corank);
1939 if (m != MATCH_YES)
1940 return m;
1943 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
1944 || gfc_match_char ('%') != MATCH_YES)
1945 break;
1947 sym = component->ts.u.derived;
1950 check_substring:
1951 unknown = false;
1952 if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED)
1954 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
1956 gfc_set_default_type (sym, 0, sym->ns);
1957 primary->ts = sym->ts;
1958 unknown = true;
1962 if (primary->ts.type == BT_CHARACTER)
1964 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring))
1966 case MATCH_YES:
1967 if (tail == NULL)
1968 primary->ref = substring;
1969 else
1970 tail->next = substring;
1972 if (primary->expr_type == EXPR_CONSTANT)
1973 primary->expr_type = EXPR_SUBSTRING;
1975 if (substring)
1976 primary->ts.u.cl = NULL;
1978 break;
1980 case MATCH_NO:
1981 if (unknown)
1983 gfc_clear_ts (&primary->ts);
1984 gfc_clear_ts (&sym->ts);
1986 break;
1988 case MATCH_ERROR:
1989 return MATCH_ERROR;
1993 /* F2008, C727. */
1994 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
1996 gfc_error ("Coindexed procedure-pointer component at %C");
1997 return MATCH_ERROR;
2000 return MATCH_YES;
2004 /* Given an expression that is a variable, figure out what the
2005 ultimate variable's type and attribute is, traversing the reference
2006 structures if necessary.
2008 This subroutine is trickier than it looks. We start at the base
2009 symbol and store the attribute. Component references load a
2010 completely new attribute.
2012 A couple of rules come into play. Subobjects of targets are always
2013 targets themselves. If we see a component that goes through a
2014 pointer, then the expression must also be a target, since the
2015 pointer is associated with something (if it isn't core will soon be
2016 dumped). If we see a full part or section of an array, the
2017 expression is also an array.
2019 We can have at most one full array reference. */
2021 symbol_attribute
2022 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2024 int dimension, pointer, allocatable, target;
2025 symbol_attribute attr;
2026 gfc_ref *ref;
2027 gfc_symbol *sym;
2028 gfc_component *comp;
2030 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2031 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2033 sym = expr->symtree->n.sym;
2034 attr = sym->attr;
2036 if (sym->ts.type == BT_CLASS)
2038 dimension = CLASS_DATA (sym)->attr.dimension;
2039 pointer = CLASS_DATA (sym)->attr.class_pointer;
2040 allocatable = CLASS_DATA (sym)->attr.allocatable;
2042 else
2044 dimension = attr.dimension;
2045 pointer = attr.pointer;
2046 allocatable = attr.allocatable;
2049 target = attr.target;
2050 if (pointer || attr.proc_pointer)
2051 target = 1;
2053 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2054 *ts = sym->ts;
2056 for (ref = expr->ref; ref; ref = ref->next)
2057 switch (ref->type)
2059 case REF_ARRAY:
2061 switch (ref->u.ar.type)
2063 case AR_FULL:
2064 dimension = 1;
2065 break;
2067 case AR_SECTION:
2068 allocatable = pointer = 0;
2069 dimension = 1;
2070 break;
2072 case AR_ELEMENT:
2073 /* Handle coarrays. */
2074 if (ref->u.ar.dimen > 0)
2075 allocatable = pointer = 0;
2076 break;
2078 case AR_UNKNOWN:
2079 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2082 break;
2084 case REF_COMPONENT:
2085 comp = ref->u.c.component;
2086 attr = comp->attr;
2087 if (ts != NULL)
2089 *ts = comp->ts;
2090 /* Don't set the string length if a substring reference
2091 follows. */
2092 if (ts->type == BT_CHARACTER
2093 && ref->next && ref->next->type == REF_SUBSTRING)
2094 ts->u.cl = NULL;
2097 if (comp->ts.type == BT_CLASS)
2099 pointer = CLASS_DATA (comp)->attr.class_pointer;
2100 allocatable = CLASS_DATA (comp)->attr.allocatable;
2102 else
2104 pointer = comp->attr.pointer;
2105 allocatable = comp->attr.allocatable;
2107 if (pointer || attr.proc_pointer)
2108 target = 1;
2110 break;
2112 case REF_SUBSTRING:
2113 allocatable = pointer = 0;
2114 break;
2117 attr.dimension = dimension;
2118 attr.pointer = pointer;
2119 attr.allocatable = allocatable;
2120 attr.target = target;
2121 attr.save = sym->attr.save;
2123 return attr;
2127 /* Return the attribute from a general expression. */
2129 symbol_attribute
2130 gfc_expr_attr (gfc_expr *e)
2132 symbol_attribute attr;
2134 switch (e->expr_type)
2136 case EXPR_VARIABLE:
2137 attr = gfc_variable_attr (e, NULL);
2138 break;
2140 case EXPR_FUNCTION:
2141 gfc_clear_attr (&attr);
2143 if (e->value.function.esym != NULL)
2145 gfc_symbol *sym = e->value.function.esym->result;
2146 attr = sym->attr;
2147 if (sym->ts.type == BT_CLASS)
2149 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2150 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2151 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2154 else
2155 attr = gfc_variable_attr (e, NULL);
2157 /* TODO: NULL() returns pointers. May have to take care of this
2158 here. */
2160 break;
2162 default:
2163 gfc_clear_attr (&attr);
2164 break;
2167 return attr;
2171 /* Match a structure constructor. The initial symbol has already been
2172 seen. */
2174 typedef struct gfc_structure_ctor_component
2176 char* name;
2177 gfc_expr* val;
2178 locus where;
2179 struct gfc_structure_ctor_component* next;
2181 gfc_structure_ctor_component;
2183 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2185 static void
2186 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2188 gfc_free (comp->name);
2189 gfc_free_expr (comp->val);
2190 gfc_free (comp);
2194 /* Translate the component list into the actual constructor by sorting it in
2195 the order required; this also checks along the way that each and every
2196 component actually has an initializer and handles default initializers
2197 for components without explicit value given. */
2198 static gfc_try
2199 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2200 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2202 gfc_structure_ctor_component *comp_iter;
2203 gfc_component *comp;
2205 for (comp = sym->components; comp; comp = comp->next)
2207 gfc_structure_ctor_component **next_ptr;
2208 gfc_expr *value = NULL;
2210 /* Try to find the initializer for the current component by name. */
2211 next_ptr = comp_head;
2212 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2214 if (!strcmp (comp_iter->name, comp->name))
2215 break;
2216 next_ptr = &comp_iter->next;
2219 /* If an extension, try building the parent derived type by building
2220 a value expression for the parent derived type and calling self. */
2221 if (!comp_iter && comp == sym->components && sym->attr.extension)
2223 value = gfc_get_structure_constructor_expr (comp->ts.type,
2224 comp->ts.kind,
2225 &gfc_current_locus);
2226 value->ts = comp->ts;
2228 if (build_actual_constructor (comp_head, &value->value.constructor,
2229 comp->ts.u.derived) == FAILURE)
2231 gfc_free_expr (value);
2232 return FAILURE;
2235 gfc_constructor_append_expr (ctor_head, value, NULL);
2236 continue;
2239 /* If it was not found, try the default initializer if there's any;
2240 otherwise, it's an error. */
2241 if (!comp_iter)
2243 if (comp->initializer)
2245 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure"
2246 " constructor with missing optional arguments"
2247 " at %C") == FAILURE)
2248 return FAILURE;
2249 value = gfc_copy_expr (comp->initializer);
2251 else
2253 gfc_error ("No initializer for component '%s' given in the"
2254 " structure constructor at %C!", comp->name);
2255 return FAILURE;
2258 else
2259 value = comp_iter->val;
2261 /* Add the value to the constructor chain built. */
2262 gfc_constructor_append_expr (ctor_head, value, NULL);
2264 /* Remove the entry from the component list. We don't want the expression
2265 value to be free'd, so set it to NULL. */
2266 if (comp_iter)
2268 *next_ptr = comp_iter->next;
2269 comp_iter->val = NULL;
2270 gfc_free_structure_ctor_component (comp_iter);
2273 return SUCCESS;
2276 match
2277 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result,
2278 bool parent)
2280 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2281 gfc_constructor_base ctor_head = NULL;
2282 gfc_component *comp; /* Is set NULL when named component is first seen */
2283 gfc_expr *e;
2284 locus where;
2285 match m;
2286 const char* last_name = NULL;
2288 comp_tail = comp_head = NULL;
2290 if (!parent && gfc_match_char ('(') != MATCH_YES)
2291 goto syntax;
2293 where = gfc_current_locus;
2295 gfc_find_component (sym, NULL, false, true);
2297 /* Check that we're not about to construct an ABSTRACT type. */
2298 if (!parent && sym->attr.abstract)
2300 gfc_error ("Can't construct ABSTRACT type '%s' at %C", sym->name);
2301 return MATCH_ERROR;
2304 /* Match the component list and store it in a list together with the
2305 corresponding component names. Check for empty argument list first. */
2306 if (gfc_match_char (')') != MATCH_YES)
2308 comp = sym->components;
2311 gfc_component *this_comp = NULL;
2313 if (!comp_head)
2314 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2315 else
2317 comp_tail->next = gfc_get_structure_ctor_component ();
2318 comp_tail = comp_tail->next;
2320 comp_tail->name = XCNEWVEC (char, GFC_MAX_SYMBOL_LEN + 1);
2321 comp_tail->val = NULL;
2322 comp_tail->where = gfc_current_locus;
2324 /* Try matching a component name. */
2325 if (gfc_match_name (comp_tail->name) == MATCH_YES
2326 && gfc_match_char ('=') == MATCH_YES)
2328 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure"
2329 " constructor with named arguments at %C")
2330 == FAILURE)
2331 goto cleanup;
2333 last_name = comp_tail->name;
2334 comp = NULL;
2336 else
2338 /* Components without name are not allowed after the first named
2339 component initializer! */
2340 if (!comp)
2342 if (last_name)
2343 gfc_error ("Component initializer without name after"
2344 " component named %s at %C!", last_name);
2345 else if (!parent)
2346 gfc_error ("Too many components in structure constructor at"
2347 " %C!");
2348 goto cleanup;
2351 gfc_current_locus = comp_tail->where;
2352 strncpy (comp_tail->name, comp->name, GFC_MAX_SYMBOL_LEN + 1);
2355 /* Find the current component in the structure definition and check
2356 its access is not private. */
2357 if (comp)
2358 this_comp = gfc_find_component (sym, comp->name, false, false);
2359 else
2361 this_comp = gfc_find_component (sym,
2362 (const char *)comp_tail->name,
2363 false, false);
2364 comp = NULL; /* Reset needed! */
2367 /* Here we can check if a component name is given which does not
2368 correspond to any component of the defined structure. */
2369 if (!this_comp)
2370 goto cleanup;
2372 /* Check if this component is already given a value. */
2373 for (comp_iter = comp_head; comp_iter != comp_tail;
2374 comp_iter = comp_iter->next)
2376 gcc_assert (comp_iter);
2377 if (!strcmp (comp_iter->name, comp_tail->name))
2379 gfc_error ("Component '%s' is initialized twice in the"
2380 " structure constructor at %C!", comp_tail->name);
2381 goto cleanup;
2385 /* Match the current initializer expression. */
2386 m = gfc_match_expr (&comp_tail->val);
2387 if (m == MATCH_NO)
2388 goto syntax;
2389 if (m == MATCH_ERROR)
2390 goto cleanup;
2392 /* F2008, R457/C725, for PURE C1283. */
2393 if (this_comp->attr.pointer && gfc_is_coindexed (comp_tail->val))
2395 gfc_error ("Coindexed expression to pointer component '%s' in "
2396 "structure constructor at %C!", comp_tail->name);
2397 goto cleanup;
2401 /* If not explicitly a parent constructor, gather up the components
2402 and build one. */
2403 if (comp && comp == sym->components
2404 && sym->attr.extension
2405 && (comp_tail->val->ts.type != BT_DERIVED
2407 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2409 gfc_current_locus = where;
2410 gfc_free_expr (comp_tail->val);
2411 comp_tail->val = NULL;
2413 m = gfc_match_structure_constructor (comp->ts.u.derived,
2414 &comp_tail->val, true);
2415 if (m == MATCH_NO)
2416 goto syntax;
2417 if (m == MATCH_ERROR)
2418 goto cleanup;
2421 if (comp)
2422 comp = comp->next;
2424 if (parent && !comp)
2425 break;
2428 while (gfc_match_char (',') == MATCH_YES);
2430 if (!parent && gfc_match_char (')') != MATCH_YES)
2431 goto syntax;
2434 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2435 goto cleanup;
2437 /* No component should be left, as this should have caused an error in the
2438 loop constructing the component-list (name that does not correspond to any
2439 component in the structure definition). */
2440 if (comp_head)
2442 gcc_assert (sym->attr.extension);
2443 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2445 gfc_error ("component '%s' at %L has already been set by a "
2446 "parent derived type constructor", comp_iter->name,
2447 &comp_iter->where);
2449 goto cleanup;
2452 e = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &where);
2453 e->ts.u.derived = sym;
2454 e->value.constructor = ctor_head;
2456 *result = e;
2457 return MATCH_YES;
2459 syntax:
2460 gfc_error ("Syntax error in structure constructor at %C");
2462 cleanup:
2463 for (comp_iter = comp_head; comp_iter; )
2465 gfc_structure_ctor_component *next = comp_iter->next;
2466 gfc_free_structure_ctor_component (comp_iter);
2467 comp_iter = next;
2469 gfc_constructor_free (ctor_head);
2470 return MATCH_ERROR;
2474 /* If the symbol is an implicit do loop index and implicitly typed,
2475 it should not be host associated. Provide a symtree from the
2476 current namespace. */
2477 static match
2478 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2480 if ((*sym)->attr.flavor == FL_VARIABLE
2481 && (*sym)->ns != gfc_current_ns
2482 && (*sym)->attr.implied_index
2483 && (*sym)->attr.implicit_type
2484 && !(*sym)->attr.use_assoc)
2486 int i;
2487 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2488 if (i)
2489 return MATCH_ERROR;
2490 *sym = (*st)->n.sym;
2492 return MATCH_YES;
2496 /* Procedure pointer as function result: Replace the function symbol by the
2497 auto-generated hidden result variable named "ppr@". */
2499 static gfc_try
2500 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2502 /* Check for procedure pointer result variable. */
2503 if ((*sym)->attr.function && !(*sym)->attr.external
2504 && (*sym)->result && (*sym)->result != *sym
2505 && (*sym)->result->attr.proc_pointer
2506 && (*sym) == gfc_current_ns->proc_name
2507 && (*sym) == (*sym)->result->ns->proc_name
2508 && strcmp ("ppr@", (*sym)->result->name) == 0)
2510 /* Automatic replacement with "hidden" result variable. */
2511 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2512 *sym = (*sym)->result;
2513 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2514 return SUCCESS;
2516 return FAILURE;
2520 /* Matches a variable name followed by anything that might follow it--
2521 array reference, argument list of a function, etc. */
2523 match
2524 gfc_match_rvalue (gfc_expr **result)
2526 gfc_actual_arglist *actual_arglist;
2527 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2528 gfc_state_data *st;
2529 gfc_symbol *sym;
2530 gfc_symtree *symtree;
2531 locus where, old_loc;
2532 gfc_expr *e;
2533 match m, m2;
2534 int i;
2535 gfc_typespec *ts;
2536 bool implicit_char;
2537 gfc_ref *ref;
2539 m = gfc_match_name (name);
2540 if (m != MATCH_YES)
2541 return m;
2543 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2544 && !gfc_current_ns->has_import_set)
2545 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2546 else
2547 i = gfc_get_ha_sym_tree (name, &symtree);
2549 if (i)
2550 return MATCH_ERROR;
2552 sym = symtree->n.sym;
2553 e = NULL;
2554 where = gfc_current_locus;
2556 replace_hidden_procptr_result (&sym, &symtree);
2558 /* If this is an implicit do loop index and implicitly typed,
2559 it should not be host associated. */
2560 m = check_for_implicit_index (&symtree, &sym);
2561 if (m != MATCH_YES)
2562 return m;
2564 gfc_set_sym_referenced (sym);
2565 sym->attr.implied_index = 0;
2567 if (sym->attr.function && sym->result == sym)
2569 /* See if this is a directly recursive function call. */
2570 gfc_gobble_whitespace ();
2571 if (sym->attr.recursive
2572 && gfc_peek_ascii_char () == '('
2573 && gfc_current_ns->proc_name == sym
2574 && !sym->attr.dimension)
2576 gfc_error ("'%s' at %C is the name of a recursive function "
2577 "and so refers to the result variable. Use an "
2578 "explicit RESULT variable for direct recursion "
2579 "(12.5.2.1)", sym->name);
2580 return MATCH_ERROR;
2583 if (gfc_is_function_return_value (sym, gfc_current_ns))
2584 goto variable;
2586 if (sym->attr.entry
2587 && (sym->ns == gfc_current_ns
2588 || sym->ns == gfc_current_ns->parent))
2590 gfc_entry_list *el = NULL;
2592 for (el = sym->ns->entries; el; el = el->next)
2593 if (sym == el->sym)
2594 goto variable;
2598 if (gfc_matching_procptr_assignment)
2599 goto procptr0;
2601 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2602 goto function0;
2604 if (sym->attr.generic)
2605 goto generic_function;
2607 switch (sym->attr.flavor)
2609 case FL_VARIABLE:
2610 variable:
2611 e = gfc_get_expr ();
2613 e->expr_type = EXPR_VARIABLE;
2614 e->symtree = symtree;
2616 m = gfc_match_varspec (e, 0, false, true);
2617 break;
2619 case FL_PARAMETER:
2620 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2621 end up here. Unfortunately, sym->value->expr_type is set to
2622 EXPR_CONSTANT, and so the if () branch would be followed without
2623 the !sym->as check. */
2624 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2625 e = gfc_copy_expr (sym->value);
2626 else
2628 e = gfc_get_expr ();
2629 e->expr_type = EXPR_VARIABLE;
2632 e->symtree = symtree;
2633 m = gfc_match_varspec (e, 0, false, true);
2635 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2636 break;
2638 /* Variable array references to derived type parameters cause
2639 all sorts of headaches in simplification. Treating such
2640 expressions as variable works just fine for all array
2641 references. */
2642 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2644 for (ref = e->ref; ref; ref = ref->next)
2645 if (ref->type == REF_ARRAY)
2646 break;
2648 if (ref == NULL || ref->u.ar.type == AR_FULL)
2649 break;
2651 ref = e->ref;
2652 e->ref = NULL;
2653 gfc_free_expr (e);
2654 e = gfc_get_expr ();
2655 e->expr_type = EXPR_VARIABLE;
2656 e->symtree = symtree;
2657 e->ref = ref;
2660 break;
2662 case FL_DERIVED:
2663 sym = gfc_use_derived (sym);
2664 if (sym == NULL)
2665 m = MATCH_ERROR;
2666 else
2667 m = gfc_match_structure_constructor (sym, &e, false);
2668 break;
2670 /* If we're here, then the name is known to be the name of a
2671 procedure, yet it is not sure to be the name of a function. */
2672 case FL_PROCEDURE:
2674 /* Procedure Pointer Assignments. */
2675 procptr0:
2676 if (gfc_matching_procptr_assignment)
2678 gfc_gobble_whitespace ();
2679 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2680 /* Parse functions returning a procptr. */
2681 goto function0;
2683 if (gfc_is_intrinsic (sym, 0, gfc_current_locus)
2684 || gfc_is_intrinsic (sym, 1, gfc_current_locus))
2685 sym->attr.intrinsic = 1;
2686 e = gfc_get_expr ();
2687 e->expr_type = EXPR_VARIABLE;
2688 e->symtree = symtree;
2689 m = gfc_match_varspec (e, 0, false, true);
2690 break;
2693 if (sym->attr.subroutine)
2695 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2696 sym->name);
2697 m = MATCH_ERROR;
2698 break;
2701 /* At this point, the name has to be a non-statement function.
2702 If the name is the same as the current function being
2703 compiled, then we have a variable reference (to the function
2704 result) if the name is non-recursive. */
2706 st = gfc_enclosing_unit (NULL);
2708 if (st != NULL && st->state == COMP_FUNCTION
2709 && st->sym == sym
2710 && !sym->attr.recursive)
2712 e = gfc_get_expr ();
2713 e->symtree = symtree;
2714 e->expr_type = EXPR_VARIABLE;
2716 m = gfc_match_varspec (e, 0, false, true);
2717 break;
2720 /* Match a function reference. */
2721 function0:
2722 m = gfc_match_actual_arglist (0, &actual_arglist);
2723 if (m == MATCH_NO)
2725 if (sym->attr.proc == PROC_ST_FUNCTION)
2726 gfc_error ("Statement function '%s' requires argument list at %C",
2727 sym->name);
2728 else
2729 gfc_error ("Function '%s' requires an argument list at %C",
2730 sym->name);
2732 m = MATCH_ERROR;
2733 break;
2736 if (m != MATCH_YES)
2738 m = MATCH_ERROR;
2739 break;
2742 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2743 sym = symtree->n.sym;
2745 replace_hidden_procptr_result (&sym, &symtree);
2747 e = gfc_get_expr ();
2748 e->symtree = symtree;
2749 e->expr_type = EXPR_FUNCTION;
2750 e->value.function.actual = actual_arglist;
2751 e->where = gfc_current_locus;
2753 if (sym->as != NULL)
2754 e->rank = sym->as->rank;
2756 if (!sym->attr.function
2757 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2759 m = MATCH_ERROR;
2760 break;
2763 /* Check here for the existence of at least one argument for the
2764 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2765 argument(s) given will be checked in gfc_iso_c_func_interface,
2766 during resolution of the function call. */
2767 if (sym->attr.is_iso_c == 1
2768 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2769 && (sym->intmod_sym_id == ISOCBINDING_LOC
2770 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2771 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2773 /* make sure we were given a param */
2774 if (actual_arglist == NULL)
2776 gfc_error ("Missing argument to '%s' at %C", sym->name);
2777 m = MATCH_ERROR;
2778 break;
2782 if (sym->result == NULL)
2783 sym->result = sym;
2785 m = MATCH_YES;
2786 break;
2788 case FL_UNKNOWN:
2790 /* Special case for derived type variables that get their types
2791 via an IMPLICIT statement. This can't wait for the
2792 resolution phase. */
2794 if (gfc_peek_ascii_char () == '%'
2795 && sym->ts.type == BT_UNKNOWN
2796 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2797 gfc_set_default_type (sym, 0, sym->ns);
2799 /* If the symbol has a dimension attribute, the expression is a
2800 variable. */
2802 if (sym->attr.dimension)
2804 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2805 sym->name, NULL) == FAILURE)
2807 m = MATCH_ERROR;
2808 break;
2811 e = gfc_get_expr ();
2812 e->symtree = symtree;
2813 e->expr_type = EXPR_VARIABLE;
2814 m = gfc_match_varspec (e, 0, false, true);
2815 break;
2818 /* Name is not an array, so we peek to see if a '(' implies a
2819 function call or a substring reference. Otherwise the
2820 variable is just a scalar. */
2822 gfc_gobble_whitespace ();
2823 if (gfc_peek_ascii_char () != '(')
2825 /* Assume a scalar variable */
2826 e = gfc_get_expr ();
2827 e->symtree = symtree;
2828 e->expr_type = EXPR_VARIABLE;
2830 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2831 sym->name, NULL) == FAILURE)
2833 m = MATCH_ERROR;
2834 break;
2837 /*FIXME:??? gfc_match_varspec does set this for us: */
2838 e->ts = sym->ts;
2839 m = gfc_match_varspec (e, 0, false, true);
2840 break;
2843 /* See if this is a function reference with a keyword argument
2844 as first argument. We do this because otherwise a spurious
2845 symbol would end up in the symbol table. */
2847 old_loc = gfc_current_locus;
2848 m2 = gfc_match (" ( %n =", argname);
2849 gfc_current_locus = old_loc;
2851 e = gfc_get_expr ();
2852 e->symtree = symtree;
2854 if (m2 != MATCH_YES)
2856 /* Try to figure out whether we're dealing with a character type.
2857 We're peeking ahead here, because we don't want to call
2858 match_substring if we're dealing with an implicitly typed
2859 non-character variable. */
2860 implicit_char = false;
2861 if (sym->ts.type == BT_UNKNOWN)
2863 ts = gfc_get_default_type (sym->name, NULL);
2864 if (ts->type == BT_CHARACTER)
2865 implicit_char = true;
2868 /* See if this could possibly be a substring reference of a name
2869 that we're not sure is a variable yet. */
2871 if ((implicit_char || sym->ts.type == BT_CHARACTER)
2872 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
2875 e->expr_type = EXPR_VARIABLE;
2877 if (sym->attr.flavor != FL_VARIABLE
2878 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
2879 sym->name, NULL) == FAILURE)
2881 m = MATCH_ERROR;
2882 break;
2885 if (sym->ts.type == BT_UNKNOWN
2886 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2888 m = MATCH_ERROR;
2889 break;
2892 e->ts = sym->ts;
2893 if (e->ref)
2894 e->ts.u.cl = NULL;
2895 m = MATCH_YES;
2896 break;
2900 /* Give up, assume we have a function. */
2902 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2903 sym = symtree->n.sym;
2904 e->expr_type = EXPR_FUNCTION;
2906 if (!sym->attr.function
2907 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2909 m = MATCH_ERROR;
2910 break;
2913 sym->result = sym;
2915 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2916 if (m == MATCH_NO)
2917 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2919 if (m != MATCH_YES)
2921 m = MATCH_ERROR;
2922 break;
2925 /* If our new function returns a character, array or structure
2926 type, it might have subsequent references. */
2928 m = gfc_match_varspec (e, 0, false, true);
2929 if (m == MATCH_NO)
2930 m = MATCH_YES;
2932 break;
2934 generic_function:
2935 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2937 e = gfc_get_expr ();
2938 e->symtree = symtree;
2939 e->expr_type = EXPR_FUNCTION;
2941 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2942 break;
2944 default:
2945 gfc_error ("Symbol at %C is not appropriate for an expression");
2946 return MATCH_ERROR;
2949 if (m == MATCH_YES)
2951 e->where = where;
2952 *result = e;
2954 else
2955 gfc_free_expr (e);
2957 return m;
2961 /* Match a variable, i.e. something that can be assigned to. This
2962 starts as a symbol, can be a structure component or an array
2963 reference. It can be a function if the function doesn't have a
2964 separate RESULT variable. If the symbol has not been previously
2965 seen, we assume it is a variable.
2967 This function is called by two interface functions:
2968 gfc_match_variable, which has host_flag = 1, and
2969 gfc_match_equiv_variable, with host_flag = 0, to restrict the
2970 match of the symbol to the local scope. */
2972 static match
2973 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
2975 gfc_symbol *sym;
2976 gfc_symtree *st;
2977 gfc_expr *expr;
2978 locus where;
2979 match m;
2981 /* Since nothing has any business being an lvalue in a module
2982 specification block, an interface block or a contains section,
2983 we force the changed_symbols mechanism to work by setting
2984 host_flag to 0. This prevents valid symbols that have the name
2985 of keywords, such as 'end', being turned into variables by
2986 failed matching to assignments for, e.g., END INTERFACE. */
2987 if (gfc_current_state () == COMP_MODULE
2988 || gfc_current_state () == COMP_INTERFACE
2989 || gfc_current_state () == COMP_CONTAINS)
2990 host_flag = 0;
2992 where = gfc_current_locus;
2993 m = gfc_match_sym_tree (&st, host_flag);
2994 if (m != MATCH_YES)
2995 return m;
2997 sym = st->n.sym;
2999 /* If this is an implicit do loop index and implicitly typed,
3000 it should not be host associated. */
3001 m = check_for_implicit_index (&st, &sym);
3002 if (m != MATCH_YES)
3003 return m;
3005 sym->attr.implied_index = 0;
3007 gfc_set_sym_referenced (sym);
3008 switch (sym->attr.flavor)
3010 case FL_VARIABLE:
3011 /* Everything is alright. */
3012 break;
3014 case FL_UNKNOWN:
3016 sym_flavor flavor = FL_UNKNOWN;
3018 gfc_gobble_whitespace ();
3020 if (sym->attr.external || sym->attr.procedure
3021 || sym->attr.function || sym->attr.subroutine)
3022 flavor = FL_PROCEDURE;
3024 /* If it is not a procedure, is not typed and is host associated,
3025 we cannot give it a flavor yet. */
3026 else if (sym->ns == gfc_current_ns->parent
3027 && sym->ts.type == BT_UNKNOWN)
3028 break;
3030 /* These are definitive indicators that this is a variable. */
3031 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3032 || sym->attr.pointer || sym->as != NULL)
3033 flavor = FL_VARIABLE;
3035 if (flavor != FL_UNKNOWN
3036 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3037 return MATCH_ERROR;
3039 break;
3041 case FL_PARAMETER:
3042 if (equiv_flag)
3044 gfc_error ("Named constant at %C in an EQUIVALENCE");
3045 return MATCH_ERROR;
3047 /* Otherwise this is checked for and an error given in the
3048 variable definition context checks. */
3049 break;
3051 case FL_PROCEDURE:
3052 /* Check for a nonrecursive function result variable. */
3053 if (sym->attr.function
3054 && !sym->attr.external
3055 && sym->result == sym
3056 && (gfc_is_function_return_value (sym, gfc_current_ns)
3057 || (sym->attr.entry
3058 && sym->ns == gfc_current_ns)
3059 || (sym->attr.entry
3060 && sym->ns == gfc_current_ns->parent)))
3062 /* If a function result is a derived type, then the derived
3063 type may still have to be resolved. */
3065 if (sym->ts.type == BT_DERIVED
3066 && gfc_use_derived (sym->ts.u.derived) == NULL)
3067 return MATCH_ERROR;
3068 break;
3071 if (sym->attr.proc_pointer
3072 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3073 break;
3075 /* Fall through to error */
3077 default:
3078 gfc_error ("'%s' at %C is not a variable", sym->name);
3079 return MATCH_ERROR;
3082 /* Special case for derived type variables that get their types
3083 via an IMPLICIT statement. This can't wait for the
3084 resolution phase. */
3087 gfc_namespace * implicit_ns;
3089 if (gfc_current_ns->proc_name == sym)
3090 implicit_ns = gfc_current_ns;
3091 else
3092 implicit_ns = sym->ns;
3094 if (gfc_peek_ascii_char () == '%'
3095 && sym->ts.type == BT_UNKNOWN
3096 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3097 gfc_set_default_type (sym, 0, implicit_ns);
3100 expr = gfc_get_expr ();
3102 expr->expr_type = EXPR_VARIABLE;
3103 expr->symtree = st;
3104 expr->ts = sym->ts;
3105 expr->where = where;
3107 /* Now see if we have to do more. */
3108 m = gfc_match_varspec (expr, equiv_flag, false, false);
3109 if (m != MATCH_YES)
3111 gfc_free_expr (expr);
3112 return m;
3115 *result = expr;
3116 return MATCH_YES;
3120 match
3121 gfc_match_variable (gfc_expr **result, int equiv_flag)
3123 return match_variable (result, equiv_flag, 1);
3127 match
3128 gfc_match_equiv_variable (gfc_expr **result)
3130 return match_variable (result, 1, 0);