First stab at getting namespaces working with PPH. This change will
[official-gcc.git] / gcc / fortran / primary.c
blob4cda7a183d8ac585d37e10d45e694a43f49bcb76
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->ts.type != BT_CLASS
1774 && !sym->attr.proc_pointer && !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 && sym->attr.class_ok)
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 == sym->components && sym->attr.extension
2314 && comp->ts.type == BT_DERIVED
2315 && comp->ts.u.derived->attr.zero_comp)
2316 /* Skip empty parents. */
2317 comp = comp->next;
2319 if (!comp_head)
2320 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2321 else
2323 comp_tail->next = gfc_get_structure_ctor_component ();
2324 comp_tail = comp_tail->next;
2326 comp_tail->name = XCNEWVEC (char, GFC_MAX_SYMBOL_LEN + 1);
2327 comp_tail->val = NULL;
2328 comp_tail->where = gfc_current_locus;
2330 /* Try matching a component name. */
2331 if (gfc_match_name (comp_tail->name) == MATCH_YES
2332 && gfc_match_char ('=') == MATCH_YES)
2334 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure"
2335 " constructor with named arguments at %C")
2336 == FAILURE)
2337 goto cleanup;
2339 last_name = comp_tail->name;
2340 comp = NULL;
2342 else
2344 /* Components without name are not allowed after the first named
2345 component initializer! */
2346 if (!comp)
2348 if (last_name)
2349 gfc_error ("Component initializer without name after"
2350 " component named %s at %C!", last_name);
2351 else if (!parent)
2352 gfc_error ("Too many components in structure constructor at"
2353 " %C!");
2354 goto cleanup;
2357 gfc_current_locus = comp_tail->where;
2358 strncpy (comp_tail->name, comp->name, GFC_MAX_SYMBOL_LEN + 1);
2361 /* Find the current component in the structure definition and check
2362 its access is not private. */
2363 if (comp)
2364 this_comp = gfc_find_component (sym, comp->name, false, false);
2365 else
2367 this_comp = gfc_find_component (sym,
2368 (const char *)comp_tail->name,
2369 false, false);
2370 comp = NULL; /* Reset needed! */
2373 /* Here we can check if a component name is given which does not
2374 correspond to any component of the defined structure. */
2375 if (!this_comp)
2376 goto cleanup;
2378 /* Check if this component is already given a value. */
2379 for (comp_iter = comp_head; comp_iter != comp_tail;
2380 comp_iter = comp_iter->next)
2382 gcc_assert (comp_iter);
2383 if (!strcmp (comp_iter->name, comp_tail->name))
2385 gfc_error ("Component '%s' is initialized twice in the"
2386 " structure constructor at %C!", comp_tail->name);
2387 goto cleanup;
2391 /* Match the current initializer expression. */
2392 m = gfc_match_expr (&comp_tail->val);
2393 if (m == MATCH_NO)
2394 goto syntax;
2395 if (m == MATCH_ERROR)
2396 goto cleanup;
2398 /* F2008, R457/C725, for PURE C1283. */
2399 if (this_comp->attr.pointer && gfc_is_coindexed (comp_tail->val))
2401 gfc_error ("Coindexed expression to pointer component '%s' in "
2402 "structure constructor at %C!", comp_tail->name);
2403 goto cleanup;
2407 /* If not explicitly a parent constructor, gather up the components
2408 and build one. */
2409 if (comp && comp == sym->components
2410 && sym->attr.extension
2411 && (comp_tail->val->ts.type != BT_DERIVED
2413 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2415 gfc_current_locus = where;
2416 gfc_free_expr (comp_tail->val);
2417 comp_tail->val = NULL;
2419 m = gfc_match_structure_constructor (comp->ts.u.derived,
2420 &comp_tail->val, true);
2421 if (m == MATCH_NO)
2422 goto syntax;
2423 if (m == MATCH_ERROR)
2424 goto cleanup;
2427 if (comp)
2428 comp = comp->next;
2430 if (parent && !comp)
2431 break;
2434 while (gfc_match_char (',') == MATCH_YES);
2436 if (!parent && gfc_match_char (')') != MATCH_YES)
2437 goto syntax;
2440 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2441 goto cleanup;
2443 /* No component should be left, as this should have caused an error in the
2444 loop constructing the component-list (name that does not correspond to any
2445 component in the structure definition). */
2446 if (comp_head)
2448 gcc_assert (sym->attr.extension);
2449 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2451 gfc_error ("component '%s' at %L has already been set by a "
2452 "parent derived type constructor", comp_iter->name,
2453 &comp_iter->where);
2455 goto cleanup;
2458 e = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &where);
2459 e->ts.u.derived = sym;
2460 e->value.constructor = ctor_head;
2462 *result = e;
2463 return MATCH_YES;
2465 syntax:
2466 gfc_error ("Syntax error in structure constructor at %C");
2468 cleanup:
2469 for (comp_iter = comp_head; comp_iter; )
2471 gfc_structure_ctor_component *next = comp_iter->next;
2472 gfc_free_structure_ctor_component (comp_iter);
2473 comp_iter = next;
2475 gfc_constructor_free (ctor_head);
2476 return MATCH_ERROR;
2480 /* If the symbol is an implicit do loop index and implicitly typed,
2481 it should not be host associated. Provide a symtree from the
2482 current namespace. */
2483 static match
2484 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2486 if ((*sym)->attr.flavor == FL_VARIABLE
2487 && (*sym)->ns != gfc_current_ns
2488 && (*sym)->attr.implied_index
2489 && (*sym)->attr.implicit_type
2490 && !(*sym)->attr.use_assoc)
2492 int i;
2493 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2494 if (i)
2495 return MATCH_ERROR;
2496 *sym = (*st)->n.sym;
2498 return MATCH_YES;
2502 /* Procedure pointer as function result: Replace the function symbol by the
2503 auto-generated hidden result variable named "ppr@". */
2505 static gfc_try
2506 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2508 /* Check for procedure pointer result variable. */
2509 if ((*sym)->attr.function && !(*sym)->attr.external
2510 && (*sym)->result && (*sym)->result != *sym
2511 && (*sym)->result->attr.proc_pointer
2512 && (*sym) == gfc_current_ns->proc_name
2513 && (*sym) == (*sym)->result->ns->proc_name
2514 && strcmp ("ppr@", (*sym)->result->name) == 0)
2516 /* Automatic replacement with "hidden" result variable. */
2517 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2518 *sym = (*sym)->result;
2519 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2520 return SUCCESS;
2522 return FAILURE;
2526 /* Matches a variable name followed by anything that might follow it--
2527 array reference, argument list of a function, etc. */
2529 match
2530 gfc_match_rvalue (gfc_expr **result)
2532 gfc_actual_arglist *actual_arglist;
2533 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2534 gfc_state_data *st;
2535 gfc_symbol *sym;
2536 gfc_symtree *symtree;
2537 locus where, old_loc;
2538 gfc_expr *e;
2539 match m, m2;
2540 int i;
2541 gfc_typespec *ts;
2542 bool implicit_char;
2543 gfc_ref *ref;
2545 m = gfc_match_name (name);
2546 if (m != MATCH_YES)
2547 return m;
2549 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2550 && !gfc_current_ns->has_import_set)
2551 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2552 else
2553 i = gfc_get_ha_sym_tree (name, &symtree);
2555 if (i)
2556 return MATCH_ERROR;
2558 sym = symtree->n.sym;
2559 e = NULL;
2560 where = gfc_current_locus;
2562 replace_hidden_procptr_result (&sym, &symtree);
2564 /* If this is an implicit do loop index and implicitly typed,
2565 it should not be host associated. */
2566 m = check_for_implicit_index (&symtree, &sym);
2567 if (m != MATCH_YES)
2568 return m;
2570 gfc_set_sym_referenced (sym);
2571 sym->attr.implied_index = 0;
2573 if (sym->attr.function && sym->result == sym)
2575 /* See if this is a directly recursive function call. */
2576 gfc_gobble_whitespace ();
2577 if (sym->attr.recursive
2578 && gfc_peek_ascii_char () == '('
2579 && gfc_current_ns->proc_name == sym
2580 && !sym->attr.dimension)
2582 gfc_error ("'%s' at %C is the name of a recursive function "
2583 "and so refers to the result variable. Use an "
2584 "explicit RESULT variable for direct recursion "
2585 "(12.5.2.1)", sym->name);
2586 return MATCH_ERROR;
2589 if (gfc_is_function_return_value (sym, gfc_current_ns))
2590 goto variable;
2592 if (sym->attr.entry
2593 && (sym->ns == gfc_current_ns
2594 || sym->ns == gfc_current_ns->parent))
2596 gfc_entry_list *el = NULL;
2598 for (el = sym->ns->entries; el; el = el->next)
2599 if (sym == el->sym)
2600 goto variable;
2604 if (gfc_matching_procptr_assignment)
2605 goto procptr0;
2607 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2608 goto function0;
2610 if (sym->attr.generic)
2611 goto generic_function;
2613 switch (sym->attr.flavor)
2615 case FL_VARIABLE:
2616 variable:
2617 e = gfc_get_expr ();
2619 e->expr_type = EXPR_VARIABLE;
2620 e->symtree = symtree;
2622 m = gfc_match_varspec (e, 0, false, true);
2623 break;
2625 case FL_PARAMETER:
2626 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2627 end up here. Unfortunately, sym->value->expr_type is set to
2628 EXPR_CONSTANT, and so the if () branch would be followed without
2629 the !sym->as check. */
2630 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2631 e = gfc_copy_expr (sym->value);
2632 else
2634 e = gfc_get_expr ();
2635 e->expr_type = EXPR_VARIABLE;
2638 e->symtree = symtree;
2639 m = gfc_match_varspec (e, 0, false, true);
2641 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2642 break;
2644 /* Variable array references to derived type parameters cause
2645 all sorts of headaches in simplification. Treating such
2646 expressions as variable works just fine for all array
2647 references. */
2648 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2650 for (ref = e->ref; ref; ref = ref->next)
2651 if (ref->type == REF_ARRAY)
2652 break;
2654 if (ref == NULL || ref->u.ar.type == AR_FULL)
2655 break;
2657 ref = e->ref;
2658 e->ref = NULL;
2659 gfc_free_expr (e);
2660 e = gfc_get_expr ();
2661 e->expr_type = EXPR_VARIABLE;
2662 e->symtree = symtree;
2663 e->ref = ref;
2666 break;
2668 case FL_DERIVED:
2669 sym = gfc_use_derived (sym);
2670 if (sym == NULL)
2671 m = MATCH_ERROR;
2672 else
2673 m = gfc_match_structure_constructor (sym, &e, false);
2674 break;
2676 /* If we're here, then the name is known to be the name of a
2677 procedure, yet it is not sure to be the name of a function. */
2678 case FL_PROCEDURE:
2680 /* Procedure Pointer Assignments. */
2681 procptr0:
2682 if (gfc_matching_procptr_assignment)
2684 gfc_gobble_whitespace ();
2685 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2686 /* Parse functions returning a procptr. */
2687 goto function0;
2689 if (gfc_is_intrinsic (sym, 0, gfc_current_locus)
2690 || gfc_is_intrinsic (sym, 1, gfc_current_locus))
2691 sym->attr.intrinsic = 1;
2692 e = gfc_get_expr ();
2693 e->expr_type = EXPR_VARIABLE;
2694 e->symtree = symtree;
2695 m = gfc_match_varspec (e, 0, false, true);
2696 break;
2699 if (sym->attr.subroutine)
2701 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2702 sym->name);
2703 m = MATCH_ERROR;
2704 break;
2707 /* At this point, the name has to be a non-statement function.
2708 If the name is the same as the current function being
2709 compiled, then we have a variable reference (to the function
2710 result) if the name is non-recursive. */
2712 st = gfc_enclosing_unit (NULL);
2714 if (st != NULL && st->state == COMP_FUNCTION
2715 && st->sym == sym
2716 && !sym->attr.recursive)
2718 e = gfc_get_expr ();
2719 e->symtree = symtree;
2720 e->expr_type = EXPR_VARIABLE;
2722 m = gfc_match_varspec (e, 0, false, true);
2723 break;
2726 /* Match a function reference. */
2727 function0:
2728 m = gfc_match_actual_arglist (0, &actual_arglist);
2729 if (m == MATCH_NO)
2731 if (sym->attr.proc == PROC_ST_FUNCTION)
2732 gfc_error ("Statement function '%s' requires argument list at %C",
2733 sym->name);
2734 else
2735 gfc_error ("Function '%s' requires an argument list at %C",
2736 sym->name);
2738 m = MATCH_ERROR;
2739 break;
2742 if (m != MATCH_YES)
2744 m = MATCH_ERROR;
2745 break;
2748 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2749 sym = symtree->n.sym;
2751 replace_hidden_procptr_result (&sym, &symtree);
2753 e = gfc_get_expr ();
2754 e->symtree = symtree;
2755 e->expr_type = EXPR_FUNCTION;
2756 e->value.function.actual = actual_arglist;
2757 e->where = gfc_current_locus;
2759 if (sym->as != NULL)
2760 e->rank = sym->as->rank;
2762 if (!sym->attr.function
2763 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2765 m = MATCH_ERROR;
2766 break;
2769 /* Check here for the existence of at least one argument for the
2770 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2771 argument(s) given will be checked in gfc_iso_c_func_interface,
2772 during resolution of the function call. */
2773 if (sym->attr.is_iso_c == 1
2774 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2775 && (sym->intmod_sym_id == ISOCBINDING_LOC
2776 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2777 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2779 /* make sure we were given a param */
2780 if (actual_arglist == NULL)
2782 gfc_error ("Missing argument to '%s' at %C", sym->name);
2783 m = MATCH_ERROR;
2784 break;
2788 if (sym->result == NULL)
2789 sym->result = sym;
2791 m = MATCH_YES;
2792 break;
2794 case FL_UNKNOWN:
2796 /* Special case for derived type variables that get their types
2797 via an IMPLICIT statement. This can't wait for the
2798 resolution phase. */
2800 if (gfc_peek_ascii_char () == '%'
2801 && sym->ts.type == BT_UNKNOWN
2802 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2803 gfc_set_default_type (sym, 0, sym->ns);
2805 /* If the symbol has a dimension attribute, the expression is a
2806 variable. */
2808 if (sym->attr.dimension)
2810 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2811 sym->name, NULL) == FAILURE)
2813 m = MATCH_ERROR;
2814 break;
2817 e = gfc_get_expr ();
2818 e->symtree = symtree;
2819 e->expr_type = EXPR_VARIABLE;
2820 m = gfc_match_varspec (e, 0, false, true);
2821 break;
2824 /* Name is not an array, so we peek to see if a '(' implies a
2825 function call or a substring reference. Otherwise the
2826 variable is just a scalar. */
2828 gfc_gobble_whitespace ();
2829 if (gfc_peek_ascii_char () != '(')
2831 /* Assume a scalar variable */
2832 e = gfc_get_expr ();
2833 e->symtree = symtree;
2834 e->expr_type = EXPR_VARIABLE;
2836 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2837 sym->name, NULL) == FAILURE)
2839 m = MATCH_ERROR;
2840 break;
2843 /*FIXME:??? gfc_match_varspec does set this for us: */
2844 e->ts = sym->ts;
2845 m = gfc_match_varspec (e, 0, false, true);
2846 break;
2849 /* See if this is a function reference with a keyword argument
2850 as first argument. We do this because otherwise a spurious
2851 symbol would end up in the symbol table. */
2853 old_loc = gfc_current_locus;
2854 m2 = gfc_match (" ( %n =", argname);
2855 gfc_current_locus = old_loc;
2857 e = gfc_get_expr ();
2858 e->symtree = symtree;
2860 if (m2 != MATCH_YES)
2862 /* Try to figure out whether we're dealing with a character type.
2863 We're peeking ahead here, because we don't want to call
2864 match_substring if we're dealing with an implicitly typed
2865 non-character variable. */
2866 implicit_char = false;
2867 if (sym->ts.type == BT_UNKNOWN)
2869 ts = gfc_get_default_type (sym->name, NULL);
2870 if (ts->type == BT_CHARACTER)
2871 implicit_char = true;
2874 /* See if this could possibly be a substring reference of a name
2875 that we're not sure is a variable yet. */
2877 if ((implicit_char || sym->ts.type == BT_CHARACTER)
2878 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
2881 e->expr_type = EXPR_VARIABLE;
2883 if (sym->attr.flavor != FL_VARIABLE
2884 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
2885 sym->name, NULL) == FAILURE)
2887 m = MATCH_ERROR;
2888 break;
2891 if (sym->ts.type == BT_UNKNOWN
2892 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2894 m = MATCH_ERROR;
2895 break;
2898 e->ts = sym->ts;
2899 if (e->ref)
2900 e->ts.u.cl = NULL;
2901 m = MATCH_YES;
2902 break;
2906 /* Give up, assume we have a function. */
2908 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2909 sym = symtree->n.sym;
2910 e->expr_type = EXPR_FUNCTION;
2912 if (!sym->attr.function
2913 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2915 m = MATCH_ERROR;
2916 break;
2919 sym->result = sym;
2921 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2922 if (m == MATCH_NO)
2923 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2925 if (m != MATCH_YES)
2927 m = MATCH_ERROR;
2928 break;
2931 /* If our new function returns a character, array or structure
2932 type, it might have subsequent references. */
2934 m = gfc_match_varspec (e, 0, false, true);
2935 if (m == MATCH_NO)
2936 m = MATCH_YES;
2938 break;
2940 generic_function:
2941 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2943 e = gfc_get_expr ();
2944 e->symtree = symtree;
2945 e->expr_type = EXPR_FUNCTION;
2947 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2948 break;
2950 default:
2951 gfc_error ("Symbol at %C is not appropriate for an expression");
2952 return MATCH_ERROR;
2955 if (m == MATCH_YES)
2957 e->where = where;
2958 *result = e;
2960 else
2961 gfc_free_expr (e);
2963 return m;
2967 /* Match a variable, i.e. something that can be assigned to. This
2968 starts as a symbol, can be a structure component or an array
2969 reference. It can be a function if the function doesn't have a
2970 separate RESULT variable. If the symbol has not been previously
2971 seen, we assume it is a variable.
2973 This function is called by two interface functions:
2974 gfc_match_variable, which has host_flag = 1, and
2975 gfc_match_equiv_variable, with host_flag = 0, to restrict the
2976 match of the symbol to the local scope. */
2978 static match
2979 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
2981 gfc_symbol *sym;
2982 gfc_symtree *st;
2983 gfc_expr *expr;
2984 locus where;
2985 match m;
2987 /* Since nothing has any business being an lvalue in a module
2988 specification block, an interface block or a contains section,
2989 we force the changed_symbols mechanism to work by setting
2990 host_flag to 0. This prevents valid symbols that have the name
2991 of keywords, such as 'end', being turned into variables by
2992 failed matching to assignments for, e.g., END INTERFACE. */
2993 if (gfc_current_state () == COMP_MODULE
2994 || gfc_current_state () == COMP_INTERFACE
2995 || gfc_current_state () == COMP_CONTAINS)
2996 host_flag = 0;
2998 where = gfc_current_locus;
2999 m = gfc_match_sym_tree (&st, host_flag);
3000 if (m != MATCH_YES)
3001 return m;
3003 sym = st->n.sym;
3005 /* If this is an implicit do loop index and implicitly typed,
3006 it should not be host associated. */
3007 m = check_for_implicit_index (&st, &sym);
3008 if (m != MATCH_YES)
3009 return m;
3011 sym->attr.implied_index = 0;
3013 gfc_set_sym_referenced (sym);
3014 switch (sym->attr.flavor)
3016 case FL_VARIABLE:
3017 /* Everything is alright. */
3018 break;
3020 case FL_UNKNOWN:
3022 sym_flavor flavor = FL_UNKNOWN;
3024 gfc_gobble_whitespace ();
3026 if (sym->attr.external || sym->attr.procedure
3027 || sym->attr.function || sym->attr.subroutine)
3028 flavor = FL_PROCEDURE;
3030 /* If it is not a procedure, is not typed and is host associated,
3031 we cannot give it a flavor yet. */
3032 else if (sym->ns == gfc_current_ns->parent
3033 && sym->ts.type == BT_UNKNOWN)
3034 break;
3036 /* These are definitive indicators that this is a variable. */
3037 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3038 || sym->attr.pointer || sym->as != NULL)
3039 flavor = FL_VARIABLE;
3041 if (flavor != FL_UNKNOWN
3042 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3043 return MATCH_ERROR;
3045 break;
3047 case FL_PARAMETER:
3048 if (equiv_flag)
3050 gfc_error ("Named constant at %C in an EQUIVALENCE");
3051 return MATCH_ERROR;
3053 /* Otherwise this is checked for and an error given in the
3054 variable definition context checks. */
3055 break;
3057 case FL_PROCEDURE:
3058 /* Check for a nonrecursive function result variable. */
3059 if (sym->attr.function
3060 && !sym->attr.external
3061 && sym->result == sym
3062 && (gfc_is_function_return_value (sym, gfc_current_ns)
3063 || (sym->attr.entry
3064 && sym->ns == gfc_current_ns)
3065 || (sym->attr.entry
3066 && sym->ns == gfc_current_ns->parent)))
3068 /* If a function result is a derived type, then the derived
3069 type may still have to be resolved. */
3071 if (sym->ts.type == BT_DERIVED
3072 && gfc_use_derived (sym->ts.u.derived) == NULL)
3073 return MATCH_ERROR;
3074 break;
3077 if (sym->attr.proc_pointer
3078 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3079 break;
3081 /* Fall through to error */
3083 default:
3084 gfc_error ("'%s' at %C is not a variable", sym->name);
3085 return MATCH_ERROR;
3088 /* Special case for derived type variables that get their types
3089 via an IMPLICIT statement. This can't wait for the
3090 resolution phase. */
3093 gfc_namespace * implicit_ns;
3095 if (gfc_current_ns->proc_name == sym)
3096 implicit_ns = gfc_current_ns;
3097 else
3098 implicit_ns = sym->ns;
3100 if (gfc_peek_ascii_char () == '%'
3101 && sym->ts.type == BT_UNKNOWN
3102 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3103 gfc_set_default_type (sym, 0, implicit_ns);
3106 expr = gfc_get_expr ();
3108 expr->expr_type = EXPR_VARIABLE;
3109 expr->symtree = st;
3110 expr->ts = sym->ts;
3111 expr->where = where;
3113 /* Now see if we have to do more. */
3114 m = gfc_match_varspec (expr, equiv_flag, false, false);
3115 if (m != MATCH_YES)
3117 gfc_free_expr (expr);
3118 return m;
3121 *result = expr;
3122 return MATCH_YES;
3126 match
3127 gfc_match_variable (gfc_expr **result, int equiv_flag)
3129 return match_variable (result, equiv_flag, 1);
3133 match
3134 gfc_match_equiv_variable (gfc_expr **result)
3136 return match_variable (result, 1, 0);