2011-06-14 Zdenek Dvorak <ook@ucw.cz>
[official-gcc.git] / gcc / fortran / primary.c
blob8f3c7e51cefbec1bcb1cb48bed0db3848a118487
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;
545 if (c == 'q')
547 if (gfc_notify_std (GFC_STD_GNU, "Extension: exponent-letter 'q' in "
548 "real-literal-constant at %C") == FAILURE)
549 return MATCH_ERROR;
550 else if (gfc_option.warn_real_q_constant)
551 gfc_warning("Extension: exponent-letter 'q' in real-literal-constant "
552 "at %C");
555 /* Scan exponent. */
556 c = gfc_next_ascii_char ();
557 count++;
559 if (c == '+' || c == '-')
560 { /* optional sign */
561 c = gfc_next_ascii_char ();
562 count++;
565 if (!ISDIGIT (c))
567 gfc_error ("Missing exponent in real number at %C");
568 return MATCH_ERROR;
571 while (ISDIGIT (c))
573 c = gfc_next_ascii_char ();
574 count++;
577 done:
578 /* Check that we have a numeric constant. */
579 if (!seen_digits || (!seen_dp && exp_char == ' '))
581 gfc_current_locus = old_loc;
582 return MATCH_NO;
585 /* Convert the number. */
586 gfc_current_locus = old_loc;
587 gfc_gobble_whitespace ();
589 buffer = (char *) alloca (count + 1);
590 memset (buffer, '\0', count + 1);
592 p = buffer;
593 c = gfc_next_ascii_char ();
594 if (c == '+' || c == '-')
596 gfc_gobble_whitespace ();
597 c = gfc_next_ascii_char ();
600 /* Hack for mpfr_set_str(). */
601 for (;;)
603 if (c == 'd' || c == 'q')
604 *p = 'e';
605 else
606 *p = c;
607 p++;
608 if (--count == 0)
609 break;
611 c = gfc_next_ascii_char ();
614 kind = get_kind ();
615 if (kind == -1)
616 goto cleanup;
618 switch (exp_char)
620 case 'd':
621 if (kind != -2)
623 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
624 "kind");
625 goto cleanup;
627 kind = gfc_default_double_kind;
628 break;
630 case 'q':
631 if (kind != -2)
633 gfc_error ("Real number at %C has a 'q' exponent and an explicit "
634 "kind");
635 goto cleanup;
638 /* The maximum possible real kind type parameter is 16. First, try
639 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
640 extended precision. If neither value works, just given up. */
641 kind = 16;
642 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
644 kind = 10;
645 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
647 gfc_error ("Invalid exponent-letter 'q' in "
648 "real-literal-constant at %C");
649 goto cleanup;
652 break;
654 default:
655 if (kind == -2)
656 kind = gfc_default_real_kind;
658 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
660 gfc_error ("Invalid real kind %d at %C", kind);
661 goto cleanup;
665 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
666 if (negate)
667 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
669 switch (gfc_range_check (e))
671 case ARITH_OK:
672 break;
673 case ARITH_OVERFLOW:
674 gfc_error ("Real constant overflows its kind at %C");
675 goto cleanup;
677 case ARITH_UNDERFLOW:
678 if (gfc_option.warn_underflow)
679 gfc_warning ("Real constant underflows its kind at %C");
680 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
681 break;
683 default:
684 gfc_internal_error ("gfc_range_check() returned bad value");
687 *result = e;
688 return MATCH_YES;
690 cleanup:
691 gfc_free_expr (e);
692 return MATCH_ERROR;
696 /* Match a substring reference. */
698 static match
699 match_substring (gfc_charlen *cl, int init, gfc_ref **result)
701 gfc_expr *start, *end;
702 locus old_loc;
703 gfc_ref *ref;
704 match m;
706 start = NULL;
707 end = NULL;
709 old_loc = gfc_current_locus;
711 m = gfc_match_char ('(');
712 if (m != MATCH_YES)
713 return MATCH_NO;
715 if (gfc_match_char (':') != MATCH_YES)
717 if (init)
718 m = gfc_match_init_expr (&start);
719 else
720 m = gfc_match_expr (&start);
722 if (m != MATCH_YES)
724 m = MATCH_NO;
725 goto cleanup;
728 m = gfc_match_char (':');
729 if (m != MATCH_YES)
730 goto cleanup;
733 if (gfc_match_char (')') != MATCH_YES)
735 if (init)
736 m = gfc_match_init_expr (&end);
737 else
738 m = gfc_match_expr (&end);
740 if (m == MATCH_NO)
741 goto syntax;
742 if (m == MATCH_ERROR)
743 goto cleanup;
745 m = gfc_match_char (')');
746 if (m == MATCH_NO)
747 goto syntax;
750 /* Optimize away the (:) reference. */
751 if (start == NULL && end == NULL)
752 ref = NULL;
753 else
755 ref = gfc_get_ref ();
757 ref->type = REF_SUBSTRING;
758 if (start == NULL)
759 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
760 ref->u.ss.start = start;
761 if (end == NULL && cl)
762 end = gfc_copy_expr (cl->length);
763 ref->u.ss.end = end;
764 ref->u.ss.length = cl;
767 *result = ref;
768 return MATCH_YES;
770 syntax:
771 gfc_error ("Syntax error in SUBSTRING specification at %C");
772 m = MATCH_ERROR;
774 cleanup:
775 gfc_free_expr (start);
776 gfc_free_expr (end);
778 gfc_current_locus = old_loc;
779 return m;
783 /* Reads the next character of a string constant, taking care to
784 return doubled delimiters on the input as a single instance of
785 the delimiter.
787 Special return values for "ret" argument are:
788 -1 End of the string, as determined by the delimiter
789 -2 Unterminated string detected
791 Backslash codes are also expanded at this time. */
793 static gfc_char_t
794 next_string_char (gfc_char_t delimiter, int *ret)
796 locus old_locus;
797 gfc_char_t c;
799 c = gfc_next_char_literal (INSTRING_WARN);
800 *ret = 0;
802 if (c == '\n')
804 *ret = -2;
805 return 0;
808 if (gfc_option.flag_backslash && c == '\\')
810 old_locus = gfc_current_locus;
812 if (gfc_match_special_char (&c) == MATCH_NO)
813 gfc_current_locus = old_locus;
815 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
816 gfc_warning ("Extension: backslash character at %C");
819 if (c != delimiter)
820 return c;
822 old_locus = gfc_current_locus;
823 c = gfc_next_char_literal (NONSTRING);
825 if (c == delimiter)
826 return c;
827 gfc_current_locus = old_locus;
829 *ret = -1;
830 return 0;
834 /* Special case of gfc_match_name() that matches a parameter kind name
835 before a string constant. This takes case of the weird but legal
836 case of:
838 kind_____'string'
840 where kind____ is a parameter. gfc_match_name() will happily slurp
841 up all the underscores, which leads to problems. If we return
842 MATCH_YES, the parse pointer points to the final underscore, which
843 is not part of the name. We never return MATCH_ERROR-- errors in
844 the name will be detected later. */
846 static match
847 match_charkind_name (char *name)
849 locus old_loc;
850 char c, peek;
851 int len;
853 gfc_gobble_whitespace ();
854 c = gfc_next_ascii_char ();
855 if (!ISALPHA (c))
856 return MATCH_NO;
858 *name++ = c;
859 len = 1;
861 for (;;)
863 old_loc = gfc_current_locus;
864 c = gfc_next_ascii_char ();
866 if (c == '_')
868 peek = gfc_peek_ascii_char ();
870 if (peek == '\'' || peek == '\"')
872 gfc_current_locus = old_loc;
873 *name = '\0';
874 return MATCH_YES;
878 if (!ISALNUM (c)
879 && c != '_'
880 && (c != '$' || !gfc_option.flag_dollar_ok))
881 break;
883 *name++ = c;
884 if (++len > GFC_MAX_SYMBOL_LEN)
885 break;
888 return MATCH_NO;
892 /* See if the current input matches a character constant. Lots of
893 contortions have to be done to match the kind parameter which comes
894 before the actual string. The main consideration is that we don't
895 want to error out too quickly. For example, we don't actually do
896 any validation of the kinds until we have actually seen a legal
897 delimiter. Using match_kind_param() generates errors too quickly. */
899 static match
900 match_string_constant (gfc_expr **result)
902 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
903 int i, kind, length, warn_ampersand, ret;
904 locus old_locus, start_locus;
905 gfc_symbol *sym;
906 gfc_expr *e;
907 const char *q;
908 match m;
909 gfc_char_t c, delimiter, *p;
911 old_locus = gfc_current_locus;
913 gfc_gobble_whitespace ();
915 c = gfc_next_char ();
916 if (c == '\'' || c == '"')
918 kind = gfc_default_character_kind;
919 start_locus = gfc_current_locus;
920 goto got_delim;
923 if (gfc_wide_is_digit (c))
925 kind = 0;
927 while (gfc_wide_is_digit (c))
929 kind = kind * 10 + c - '0';
930 if (kind > 9999999)
931 goto no_match;
932 c = gfc_next_char ();
936 else
938 gfc_current_locus = old_locus;
940 m = match_charkind_name (name);
941 if (m != MATCH_YES)
942 goto no_match;
944 if (gfc_find_symbol (name, NULL, 1, &sym)
945 || sym == NULL
946 || sym->attr.flavor != FL_PARAMETER)
947 goto no_match;
949 kind = -1;
950 c = gfc_next_char ();
953 if (c == ' ')
955 gfc_gobble_whitespace ();
956 c = gfc_next_char ();
959 if (c != '_')
960 goto no_match;
962 gfc_gobble_whitespace ();
964 c = gfc_next_char ();
965 if (c != '\'' && c != '"')
966 goto no_match;
968 start_locus = gfc_current_locus;
970 if (kind == -1)
972 q = gfc_extract_int (sym->value, &kind);
973 if (q != NULL)
975 gfc_error (q);
976 return MATCH_ERROR;
978 gfc_set_sym_referenced (sym);
981 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
983 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
984 return MATCH_ERROR;
987 got_delim:
988 /* Scan the string into a block of memory by first figuring out how
989 long it is, allocating the structure, then re-reading it. This
990 isn't particularly efficient, but string constants aren't that
991 common in most code. TODO: Use obstacks? */
993 delimiter = c;
994 length = 0;
996 for (;;)
998 c = next_string_char (delimiter, &ret);
999 if (ret == -1)
1000 break;
1001 if (ret == -2)
1003 gfc_current_locus = start_locus;
1004 gfc_error ("Unterminated character constant beginning at %C");
1005 return MATCH_ERROR;
1008 length++;
1011 /* Peek at the next character to see if it is a b, o, z, or x for the
1012 postfixed BOZ literal constants. */
1013 peek = gfc_peek_ascii_char ();
1014 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1015 goto no_match;
1017 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1019 gfc_current_locus = start_locus;
1021 /* We disable the warning for the following loop as the warning has already
1022 been printed in the loop above. */
1023 warn_ampersand = gfc_option.warn_ampersand;
1024 gfc_option.warn_ampersand = 0;
1026 p = e->value.character.string;
1027 for (i = 0; i < length; i++)
1029 c = next_string_char (delimiter, &ret);
1031 if (!gfc_check_character_range (c, kind))
1033 gfc_error ("Character '%s' in string at %C is not representable "
1034 "in character kind %d", gfc_print_wide_char (c), kind);
1035 return MATCH_ERROR;
1038 *p++ = c;
1041 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1042 gfc_option.warn_ampersand = warn_ampersand;
1044 next_string_char (delimiter, &ret);
1045 if (ret != -1)
1046 gfc_internal_error ("match_string_constant(): Delimiter not found");
1048 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1049 e->expr_type = EXPR_SUBSTRING;
1051 *result = e;
1053 return MATCH_YES;
1055 no_match:
1056 gfc_current_locus = old_locus;
1057 return MATCH_NO;
1061 /* Match a .true. or .false. Returns 1 if a .true. was found,
1062 0 if a .false. was found, and -1 otherwise. */
1063 static int
1064 match_logical_constant_string (void)
1066 locus orig_loc = gfc_current_locus;
1068 gfc_gobble_whitespace ();
1069 if (gfc_next_ascii_char () == '.')
1071 char ch = gfc_next_ascii_char ();
1072 if (ch == 'f')
1074 if (gfc_next_ascii_char () == 'a'
1075 && gfc_next_ascii_char () == 'l'
1076 && gfc_next_ascii_char () == 's'
1077 && gfc_next_ascii_char () == 'e'
1078 && gfc_next_ascii_char () == '.')
1079 /* Matched ".false.". */
1080 return 0;
1082 else if (ch == 't')
1084 if (gfc_next_ascii_char () == 'r'
1085 && gfc_next_ascii_char () == 'u'
1086 && gfc_next_ascii_char () == 'e'
1087 && gfc_next_ascii_char () == '.')
1088 /* Matched ".true.". */
1089 return 1;
1092 gfc_current_locus = orig_loc;
1093 return -1;
1096 /* Match a .true. or .false. */
1098 static match
1099 match_logical_constant (gfc_expr **result)
1101 gfc_expr *e;
1102 int i, kind;
1104 i = match_logical_constant_string ();
1105 if (i == -1)
1106 return MATCH_NO;
1108 kind = get_kind ();
1109 if (kind == -1)
1110 return MATCH_ERROR;
1111 if (kind == -2)
1112 kind = gfc_default_logical_kind;
1114 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1116 gfc_error ("Bad kind for logical constant at %C");
1117 return MATCH_ERROR;
1120 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1122 *result = e;
1123 return MATCH_YES;
1127 /* Match a real or imaginary part of a complex constant that is a
1128 symbolic constant. */
1130 static match
1131 match_sym_complex_part (gfc_expr **result)
1133 char name[GFC_MAX_SYMBOL_LEN + 1];
1134 gfc_symbol *sym;
1135 gfc_expr *e;
1136 match m;
1138 m = gfc_match_name (name);
1139 if (m != MATCH_YES)
1140 return m;
1142 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1143 return MATCH_NO;
1145 if (sym->attr.flavor != FL_PARAMETER)
1147 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1148 return MATCH_ERROR;
1151 if (!gfc_numeric_ts (&sym->value->ts))
1153 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1154 return MATCH_ERROR;
1157 if (sym->value->rank != 0)
1159 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1160 return MATCH_ERROR;
1163 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PARAMETER symbol in "
1164 "complex constant at %C") == FAILURE)
1165 return MATCH_ERROR;
1167 switch (sym->value->ts.type)
1169 case BT_REAL:
1170 e = gfc_copy_expr (sym->value);
1171 break;
1173 case BT_COMPLEX:
1174 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1175 if (e == NULL)
1176 goto error;
1177 break;
1179 case BT_INTEGER:
1180 e = gfc_int2real (sym->value, gfc_default_real_kind);
1181 if (e == NULL)
1182 goto error;
1183 break;
1185 default:
1186 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1189 *result = e; /* e is a scalar, real, constant expression. */
1190 return MATCH_YES;
1192 error:
1193 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1194 return MATCH_ERROR;
1198 /* Match a real or imaginary part of a complex number. */
1200 static match
1201 match_complex_part (gfc_expr **result)
1203 match m;
1205 m = match_sym_complex_part (result);
1206 if (m != MATCH_NO)
1207 return m;
1209 m = match_real_constant (result, 1);
1210 if (m != MATCH_NO)
1211 return m;
1213 return match_integer_constant (result, 1);
1217 /* Try to match a complex constant. */
1219 static match
1220 match_complex_constant (gfc_expr **result)
1222 gfc_expr *e, *real, *imag;
1223 gfc_error_buf old_error;
1224 gfc_typespec target;
1225 locus old_loc;
1226 int kind;
1227 match m;
1229 old_loc = gfc_current_locus;
1230 real = imag = e = NULL;
1232 m = gfc_match_char ('(');
1233 if (m != MATCH_YES)
1234 return m;
1236 gfc_push_error (&old_error);
1238 m = match_complex_part (&real);
1239 if (m == MATCH_NO)
1241 gfc_free_error (&old_error);
1242 goto cleanup;
1245 if (gfc_match_char (',') == MATCH_NO)
1247 gfc_pop_error (&old_error);
1248 m = MATCH_NO;
1249 goto cleanup;
1252 /* If m is error, then something was wrong with the real part and we
1253 assume we have a complex constant because we've seen the ','. An
1254 ambiguous case here is the start of an iterator list of some
1255 sort. These sort of lists are matched prior to coming here. */
1257 if (m == MATCH_ERROR)
1259 gfc_free_error (&old_error);
1260 goto cleanup;
1262 gfc_pop_error (&old_error);
1264 m = match_complex_part (&imag);
1265 if (m == MATCH_NO)
1266 goto syntax;
1267 if (m == MATCH_ERROR)
1268 goto cleanup;
1270 m = gfc_match_char (')');
1271 if (m == MATCH_NO)
1273 /* Give the matcher for implied do-loops a chance to run. This
1274 yields a much saner error message for (/ (i, 4=i, 6) /). */
1275 if (gfc_peek_ascii_char () == '=')
1277 m = MATCH_ERROR;
1278 goto cleanup;
1280 else
1281 goto syntax;
1284 if (m == MATCH_ERROR)
1285 goto cleanup;
1287 /* Decide on the kind of this complex number. */
1288 if (real->ts.type == BT_REAL)
1290 if (imag->ts.type == BT_REAL)
1291 kind = gfc_kind_max (real, imag);
1292 else
1293 kind = real->ts.kind;
1295 else
1297 if (imag->ts.type == BT_REAL)
1298 kind = imag->ts.kind;
1299 else
1300 kind = gfc_default_real_kind;
1302 gfc_clear_ts (&target);
1303 target.type = BT_REAL;
1304 target.kind = kind;
1306 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1307 gfc_convert_type (real, &target, 2);
1308 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1309 gfc_convert_type (imag, &target, 2);
1311 e = gfc_convert_complex (real, imag, kind);
1312 e->where = gfc_current_locus;
1314 gfc_free_expr (real);
1315 gfc_free_expr (imag);
1317 *result = e;
1318 return MATCH_YES;
1320 syntax:
1321 gfc_error ("Syntax error in COMPLEX constant at %C");
1322 m = MATCH_ERROR;
1324 cleanup:
1325 gfc_free_expr (e);
1326 gfc_free_expr (real);
1327 gfc_free_expr (imag);
1328 gfc_current_locus = old_loc;
1330 return m;
1334 /* Match constants in any of several forms. Returns nonzero for a
1335 match, zero for no match. */
1337 match
1338 gfc_match_literal_constant (gfc_expr **result, int signflag)
1340 match m;
1342 m = match_complex_constant (result);
1343 if (m != MATCH_NO)
1344 return m;
1346 m = match_string_constant (result);
1347 if (m != MATCH_NO)
1348 return m;
1350 m = match_boz_constant (result);
1351 if (m != MATCH_NO)
1352 return m;
1354 m = match_real_constant (result, signflag);
1355 if (m != MATCH_NO)
1356 return m;
1358 m = match_hollerith_constant (result);
1359 if (m != MATCH_NO)
1360 return m;
1362 m = match_integer_constant (result, signflag);
1363 if (m != MATCH_NO)
1364 return m;
1366 m = match_logical_constant (result);
1367 if (m != MATCH_NO)
1368 return m;
1370 return MATCH_NO;
1374 /* This checks if a symbol is the return value of an encompassing function.
1375 Function nesting can be maximally two levels deep, but we may have
1376 additional local namespaces like BLOCK etc. */
1378 bool
1379 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1381 if (!sym->attr.function || (sym->result != sym))
1382 return false;
1383 while (ns)
1385 if (ns->proc_name == sym)
1386 return true;
1387 ns = ns->parent;
1389 return false;
1393 /* Match a single actual argument value. An actual argument is
1394 usually an expression, but can also be a procedure name. If the
1395 argument is a single name, it is not always possible to tell
1396 whether the name is a dummy procedure or not. We treat these cases
1397 by creating an argument that looks like a dummy procedure and
1398 fixing things later during resolution. */
1400 static match
1401 match_actual_arg (gfc_expr **result)
1403 char name[GFC_MAX_SYMBOL_LEN + 1];
1404 gfc_symtree *symtree;
1405 locus where, w;
1406 gfc_expr *e;
1407 char c;
1409 gfc_gobble_whitespace ();
1410 where = gfc_current_locus;
1412 switch (gfc_match_name (name))
1414 case MATCH_ERROR:
1415 return MATCH_ERROR;
1417 case MATCH_NO:
1418 break;
1420 case MATCH_YES:
1421 w = gfc_current_locus;
1422 gfc_gobble_whitespace ();
1423 c = gfc_next_ascii_char ();
1424 gfc_current_locus = w;
1426 if (c != ',' && c != ')')
1427 break;
1429 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1430 break;
1431 /* Handle error elsewhere. */
1433 /* Eliminate a couple of common cases where we know we don't
1434 have a function argument. */
1435 if (symtree == NULL)
1437 gfc_get_sym_tree (name, NULL, &symtree, false);
1438 gfc_set_sym_referenced (symtree->n.sym);
1440 else
1442 gfc_symbol *sym;
1444 sym = symtree->n.sym;
1445 gfc_set_sym_referenced (sym);
1446 if (sym->attr.flavor != FL_PROCEDURE
1447 && sym->attr.flavor != FL_UNKNOWN)
1448 break;
1450 if (sym->attr.in_common && !sym->attr.proc_pointer)
1452 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1453 &sym->declared_at);
1454 break;
1457 /* If the symbol is a function with itself as the result and
1458 is being defined, then we have a variable. */
1459 if (sym->attr.function && sym->result == sym)
1461 if (gfc_is_function_return_value (sym, gfc_current_ns))
1462 break;
1464 if (sym->attr.entry
1465 && (sym->ns == gfc_current_ns
1466 || sym->ns == gfc_current_ns->parent))
1468 gfc_entry_list *el = NULL;
1470 for (el = sym->ns->entries; el; el = el->next)
1471 if (sym == el->sym)
1472 break;
1474 if (el)
1475 break;
1480 e = gfc_get_expr (); /* Leave it unknown for now */
1481 e->symtree = symtree;
1482 e->expr_type = EXPR_VARIABLE;
1483 e->ts.type = BT_PROCEDURE;
1484 e->where = where;
1486 *result = e;
1487 return MATCH_YES;
1490 gfc_current_locus = where;
1491 return gfc_match_expr (result);
1495 /* Match a keyword argument. */
1497 static match
1498 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1500 char name[GFC_MAX_SYMBOL_LEN + 1];
1501 gfc_actual_arglist *a;
1502 locus name_locus;
1503 match m;
1505 name_locus = gfc_current_locus;
1506 m = gfc_match_name (name);
1508 if (m != MATCH_YES)
1509 goto cleanup;
1510 if (gfc_match_char ('=') != MATCH_YES)
1512 m = MATCH_NO;
1513 goto cleanup;
1516 m = match_actual_arg (&actual->expr);
1517 if (m != MATCH_YES)
1518 goto cleanup;
1520 /* Make sure this name has not appeared yet. */
1522 if (name[0] != '\0')
1524 for (a = base; a; a = a->next)
1525 if (a->name != NULL && strcmp (a->name, name) == 0)
1527 gfc_error ("Keyword '%s' at %C has already appeared in the "
1528 "current argument list", name);
1529 return MATCH_ERROR;
1533 actual->name = gfc_get_string (name);
1534 return MATCH_YES;
1536 cleanup:
1537 gfc_current_locus = name_locus;
1538 return m;
1542 /* Match an argument list function, such as %VAL. */
1544 static match
1545 match_arg_list_function (gfc_actual_arglist *result)
1547 char name[GFC_MAX_SYMBOL_LEN + 1];
1548 locus old_locus;
1549 match m;
1551 old_locus = gfc_current_locus;
1553 if (gfc_match_char ('%') != MATCH_YES)
1555 m = MATCH_NO;
1556 goto cleanup;
1559 m = gfc_match ("%n (", name);
1560 if (m != MATCH_YES)
1561 goto cleanup;
1563 if (name[0] != '\0')
1565 switch (name[0])
1567 case 'l':
1568 if (strncmp (name, "loc", 3) == 0)
1570 result->name = "%LOC";
1571 break;
1573 case 'r':
1574 if (strncmp (name, "ref", 3) == 0)
1576 result->name = "%REF";
1577 break;
1579 case 'v':
1580 if (strncmp (name, "val", 3) == 0)
1582 result->name = "%VAL";
1583 break;
1585 default:
1586 m = MATCH_ERROR;
1587 goto cleanup;
1591 if (gfc_notify_std (GFC_STD_GNU, "Extension: argument list "
1592 "function at %C") == FAILURE)
1594 m = MATCH_ERROR;
1595 goto cleanup;
1598 m = match_actual_arg (&result->expr);
1599 if (m != MATCH_YES)
1600 goto cleanup;
1602 if (gfc_match_char (')') != MATCH_YES)
1604 m = MATCH_NO;
1605 goto cleanup;
1608 return MATCH_YES;
1610 cleanup:
1611 gfc_current_locus = old_locus;
1612 return m;
1616 /* Matches an actual argument list of a function or subroutine, from
1617 the opening parenthesis to the closing parenthesis. The argument
1618 list is assumed to allow keyword arguments because we don't know if
1619 the symbol associated with the procedure has an implicit interface
1620 or not. We make sure keywords are unique. If sub_flag is set,
1621 we're matching the argument list of a subroutine. */
1623 match
1624 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1626 gfc_actual_arglist *head, *tail;
1627 int seen_keyword;
1628 gfc_st_label *label;
1629 locus old_loc;
1630 match m;
1632 *argp = tail = NULL;
1633 old_loc = gfc_current_locus;
1635 seen_keyword = 0;
1637 if (gfc_match_char ('(') == MATCH_NO)
1638 return (sub_flag) ? MATCH_YES : MATCH_NO;
1640 if (gfc_match_char (')') == MATCH_YES)
1641 return MATCH_YES;
1642 head = NULL;
1644 matching_actual_arglist++;
1646 for (;;)
1648 if (head == NULL)
1649 head = tail = gfc_get_actual_arglist ();
1650 else
1652 tail->next = gfc_get_actual_arglist ();
1653 tail = tail->next;
1656 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1658 m = gfc_match_st_label (&label);
1659 if (m == MATCH_NO)
1660 gfc_error ("Expected alternate return label at %C");
1661 if (m != MATCH_YES)
1662 goto cleanup;
1664 tail->label = label;
1665 goto next;
1668 /* After the first keyword argument is seen, the following
1669 arguments must also have keywords. */
1670 if (seen_keyword)
1672 m = match_keyword_arg (tail, head);
1674 if (m == MATCH_ERROR)
1675 goto cleanup;
1676 if (m == MATCH_NO)
1678 gfc_error ("Missing keyword name in actual argument list at %C");
1679 goto cleanup;
1683 else
1685 /* Try an argument list function, like %VAL. */
1686 m = match_arg_list_function (tail);
1687 if (m == MATCH_ERROR)
1688 goto cleanup;
1690 /* See if we have the first keyword argument. */
1691 if (m == MATCH_NO)
1693 m = match_keyword_arg (tail, head);
1694 if (m == MATCH_YES)
1695 seen_keyword = 1;
1696 if (m == MATCH_ERROR)
1697 goto cleanup;
1700 if (m == MATCH_NO)
1702 /* Try for a non-keyword argument. */
1703 m = match_actual_arg (&tail->expr);
1704 if (m == MATCH_ERROR)
1705 goto cleanup;
1706 if (m == MATCH_NO)
1707 goto syntax;
1712 next:
1713 if (gfc_match_char (')') == MATCH_YES)
1714 break;
1715 if (gfc_match_char (',') != MATCH_YES)
1716 goto syntax;
1719 *argp = head;
1720 matching_actual_arglist--;
1721 return MATCH_YES;
1723 syntax:
1724 gfc_error ("Syntax error in argument list at %C");
1726 cleanup:
1727 gfc_free_actual_arglist (head);
1728 gfc_current_locus = old_loc;
1729 matching_actual_arglist--;
1730 return MATCH_ERROR;
1734 /* Used by gfc_match_varspec() to extend the reference list by one
1735 element. */
1737 static gfc_ref *
1738 extend_ref (gfc_expr *primary, gfc_ref *tail)
1740 if (primary->ref == NULL)
1741 primary->ref = tail = gfc_get_ref ();
1742 else
1744 if (tail == NULL)
1745 gfc_internal_error ("extend_ref(): Bad tail");
1746 tail->next = gfc_get_ref ();
1747 tail = tail->next;
1750 return tail;
1754 /* Match any additional specifications associated with the current
1755 variable like member references or substrings. If equiv_flag is
1756 set we only match stuff that is allowed inside an EQUIVALENCE
1757 statement. sub_flag tells whether we expect a type-bound procedure found
1758 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1759 components, 'ppc_arg' determines whether the PPC may be called (with an
1760 argument list), or whether it may just be referred to as a pointer. */
1762 match
1763 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1764 bool ppc_arg)
1766 char name[GFC_MAX_SYMBOL_LEN + 1];
1767 gfc_ref *substring, *tail;
1768 gfc_component *component;
1769 gfc_symbol *sym = primary->symtree->n.sym;
1770 match m;
1771 bool unknown;
1773 tail = NULL;
1775 gfc_gobble_whitespace ();
1777 if (gfc_peek_ascii_char () == '[')
1779 if (sym->attr.dimension)
1781 gfc_error ("Array section designator, e.g. '(:)', is required "
1782 "besides the coarray designator '[...]' at %C");
1783 return MATCH_ERROR;
1785 if (!sym->attr.codimension)
1787 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1788 sym->name);
1789 return MATCH_ERROR;
1793 /* For associate names, we may not yet know whether they are arrays or not.
1794 Thus if we have one and parentheses follow, we have to assume that it
1795 actually is one for now. The final decision will be made at
1796 resolution time, of course. */
1797 if (sym->assoc && gfc_peek_ascii_char () == '(')
1798 sym->attr.dimension = 1;
1800 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1801 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1802 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1803 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary, NULL)
1804 && !(gfc_matching_procptr_assignment
1805 && sym->attr.flavor == FL_PROCEDURE))
1806 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1807 && CLASS_DATA (sym)->attr.dimension))
1809 /* In EQUIVALENCE, we don't know yet whether we are seeing
1810 an array, character variable or array of character
1811 variables. We'll leave the decision till resolve time. */
1812 tail = extend_ref (primary, tail);
1813 tail->type = REF_ARRAY;
1815 m = gfc_match_array_ref (&tail->u.ar, equiv_flag ? NULL : sym->as,
1816 equiv_flag,
1817 sym->ts.type == BT_CLASS
1818 ? (CLASS_DATA (sym)->as
1819 ? CLASS_DATA (sym)->as->corank : 0)
1820 : (sym->as ? sym->as->corank : 0));
1821 if (m != MATCH_YES)
1822 return m;
1824 gfc_gobble_whitespace ();
1825 if (equiv_flag && gfc_peek_ascii_char () == '(')
1827 tail = extend_ref (primary, tail);
1828 tail->type = REF_ARRAY;
1830 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1831 if (m != MATCH_YES)
1832 return m;
1836 primary->ts = sym->ts;
1838 if (equiv_flag)
1839 return MATCH_YES;
1841 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
1842 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1843 gfc_set_default_type (sym, 0, sym->ns);
1845 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1846 || gfc_match_char ('%') != MATCH_YES)
1847 goto check_substring;
1849 sym = sym->ts.u.derived;
1851 for (;;)
1853 gfc_try t;
1854 gfc_symtree *tbp;
1856 m = gfc_match_name (name);
1857 if (m == MATCH_NO)
1858 gfc_error ("Expected structure component name at %C");
1859 if (m != MATCH_YES)
1860 return MATCH_ERROR;
1862 if (sym->f2k_derived)
1863 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1864 else
1865 tbp = NULL;
1867 if (tbp)
1869 gfc_symbol* tbp_sym;
1871 if (t == FAILURE)
1872 return MATCH_ERROR;
1874 gcc_assert (!tail || !tail->next);
1875 gcc_assert (primary->expr_type == EXPR_VARIABLE
1876 || (primary->expr_type == EXPR_STRUCTURE
1877 && primary->symtree && primary->symtree->n.sym
1878 && primary->symtree->n.sym->attr.flavor));
1880 if (tbp->n.tb->is_generic)
1881 tbp_sym = NULL;
1882 else
1883 tbp_sym = tbp->n.tb->u.specific->n.sym;
1885 primary->expr_type = EXPR_COMPCALL;
1886 primary->value.compcall.tbp = tbp->n.tb;
1887 primary->value.compcall.name = tbp->name;
1888 primary->value.compcall.ignore_pass = 0;
1889 primary->value.compcall.assign = 0;
1890 primary->value.compcall.base_object = NULL;
1891 gcc_assert (primary->symtree->n.sym->attr.referenced);
1892 if (tbp_sym)
1893 primary->ts = tbp_sym->ts;
1895 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
1896 &primary->value.compcall.actual);
1897 if (m == MATCH_ERROR)
1898 return MATCH_ERROR;
1899 if (m == MATCH_NO)
1901 if (sub_flag)
1902 primary->value.compcall.actual = NULL;
1903 else
1905 gfc_error ("Expected argument list at %C");
1906 return MATCH_ERROR;
1910 break;
1913 component = gfc_find_component (sym, name, false, false);
1914 if (component == NULL)
1915 return MATCH_ERROR;
1917 tail = extend_ref (primary, tail);
1918 tail->type = REF_COMPONENT;
1920 tail->u.c.component = component;
1921 tail->u.c.sym = sym;
1923 primary->ts = component->ts;
1925 if (component->attr.proc_pointer && ppc_arg
1926 && !gfc_matching_procptr_assignment)
1928 /* Procedure pointer component call: Look for argument list. */
1929 m = gfc_match_actual_arglist (sub_flag,
1930 &primary->value.compcall.actual);
1931 if (m == MATCH_ERROR)
1932 return MATCH_ERROR;
1934 if (m == MATCH_NO && !gfc_matching_ptr_assignment
1935 && !matching_actual_arglist)
1937 gfc_error ("Procedure pointer component '%s' requires an "
1938 "argument list at %C", component->name);
1939 return MATCH_ERROR;
1942 if (m == MATCH_YES)
1943 primary->expr_type = EXPR_PPC;
1945 break;
1948 if (component->as != NULL && !component->attr.proc_pointer)
1950 tail = extend_ref (primary, tail);
1951 tail->type = REF_ARRAY;
1953 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
1954 component->as->corank);
1955 if (m != MATCH_YES)
1956 return m;
1958 else if (component->ts.type == BT_CLASS
1959 && CLASS_DATA (component)->as != NULL
1960 && !component->attr.proc_pointer)
1962 tail = extend_ref (primary, tail);
1963 tail->type = REF_ARRAY;
1965 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
1966 equiv_flag,
1967 CLASS_DATA (component)->as->corank);
1968 if (m != MATCH_YES)
1969 return m;
1972 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
1973 || gfc_match_char ('%') != MATCH_YES)
1974 break;
1976 sym = component->ts.u.derived;
1979 check_substring:
1980 unknown = false;
1981 if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED)
1983 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
1985 gfc_set_default_type (sym, 0, sym->ns);
1986 primary->ts = sym->ts;
1987 unknown = true;
1991 if (primary->ts.type == BT_CHARACTER)
1993 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring))
1995 case MATCH_YES:
1996 if (tail == NULL)
1997 primary->ref = substring;
1998 else
1999 tail->next = substring;
2001 if (primary->expr_type == EXPR_CONSTANT)
2002 primary->expr_type = EXPR_SUBSTRING;
2004 if (substring)
2005 primary->ts.u.cl = NULL;
2007 break;
2009 case MATCH_NO:
2010 if (unknown)
2012 gfc_clear_ts (&primary->ts);
2013 gfc_clear_ts (&sym->ts);
2015 break;
2017 case MATCH_ERROR:
2018 return MATCH_ERROR;
2022 /* F2008, C727. */
2023 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2025 gfc_error ("Coindexed procedure-pointer component at %C");
2026 return MATCH_ERROR;
2029 return MATCH_YES;
2033 /* Given an expression that is a variable, figure out what the
2034 ultimate variable's type and attribute is, traversing the reference
2035 structures if necessary.
2037 This subroutine is trickier than it looks. We start at the base
2038 symbol and store the attribute. Component references load a
2039 completely new attribute.
2041 A couple of rules come into play. Subobjects of targets are always
2042 targets themselves. If we see a component that goes through a
2043 pointer, then the expression must also be a target, since the
2044 pointer is associated with something (if it isn't core will soon be
2045 dumped). If we see a full part or section of an array, the
2046 expression is also an array.
2048 We can have at most one full array reference. */
2050 symbol_attribute
2051 gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2053 int dimension, pointer, allocatable, target;
2054 symbol_attribute attr;
2055 gfc_ref *ref;
2056 gfc_symbol *sym;
2057 gfc_component *comp;
2059 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2060 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2062 sym = expr->symtree->n.sym;
2063 attr = sym->attr;
2065 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2067 dimension = CLASS_DATA (sym)->attr.dimension;
2068 pointer = CLASS_DATA (sym)->attr.class_pointer;
2069 allocatable = CLASS_DATA (sym)->attr.allocatable;
2071 else
2073 dimension = attr.dimension;
2074 pointer = attr.pointer;
2075 allocatable = attr.allocatable;
2078 target = attr.target;
2079 if (pointer || attr.proc_pointer)
2080 target = 1;
2082 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2083 *ts = sym->ts;
2085 for (ref = expr->ref; ref; ref = ref->next)
2086 switch (ref->type)
2088 case REF_ARRAY:
2090 switch (ref->u.ar.type)
2092 case AR_FULL:
2093 dimension = 1;
2094 break;
2096 case AR_SECTION:
2097 allocatable = pointer = 0;
2098 dimension = 1;
2099 break;
2101 case AR_ELEMENT:
2102 /* Handle coarrays. */
2103 if (ref->u.ar.dimen > 0)
2104 allocatable = pointer = 0;
2105 break;
2107 case AR_UNKNOWN:
2108 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2111 break;
2113 case REF_COMPONENT:
2114 comp = ref->u.c.component;
2115 attr = comp->attr;
2116 if (ts != NULL)
2118 *ts = comp->ts;
2119 /* Don't set the string length if a substring reference
2120 follows. */
2121 if (ts->type == BT_CHARACTER
2122 && ref->next && ref->next->type == REF_SUBSTRING)
2123 ts->u.cl = NULL;
2126 if (comp->ts.type == BT_CLASS)
2128 pointer = CLASS_DATA (comp)->attr.class_pointer;
2129 allocatable = CLASS_DATA (comp)->attr.allocatable;
2131 else
2133 pointer = comp->attr.pointer;
2134 allocatable = comp->attr.allocatable;
2136 if (pointer || attr.proc_pointer)
2137 target = 1;
2139 break;
2141 case REF_SUBSTRING:
2142 allocatable = pointer = 0;
2143 break;
2146 attr.dimension = dimension;
2147 attr.pointer = pointer;
2148 attr.allocatable = allocatable;
2149 attr.target = target;
2150 attr.save = sym->attr.save;
2152 return attr;
2156 /* Return the attribute from a general expression. */
2158 symbol_attribute
2159 gfc_expr_attr (gfc_expr *e)
2161 symbol_attribute attr;
2163 switch (e->expr_type)
2165 case EXPR_VARIABLE:
2166 attr = gfc_variable_attr (e, NULL);
2167 break;
2169 case EXPR_FUNCTION:
2170 gfc_clear_attr (&attr);
2172 if (e->value.function.esym != NULL)
2174 gfc_symbol *sym = e->value.function.esym->result;
2175 attr = sym->attr;
2176 if (sym->ts.type == BT_CLASS)
2178 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2179 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2180 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2183 else
2184 attr = gfc_variable_attr (e, NULL);
2186 /* TODO: NULL() returns pointers. May have to take care of this
2187 here. */
2189 break;
2191 default:
2192 gfc_clear_attr (&attr);
2193 break;
2196 return attr;
2200 /* Match a structure constructor. The initial symbol has already been
2201 seen. */
2203 typedef struct gfc_structure_ctor_component
2205 char* name;
2206 gfc_expr* val;
2207 locus where;
2208 struct gfc_structure_ctor_component* next;
2210 gfc_structure_ctor_component;
2212 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2214 static void
2215 gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2217 free (comp->name);
2218 gfc_free_expr (comp->val);
2219 free (comp);
2223 /* Translate the component list into the actual constructor by sorting it in
2224 the order required; this also checks along the way that each and every
2225 component actually has an initializer and handles default initializers
2226 for components without explicit value given. */
2227 static gfc_try
2228 build_actual_constructor (gfc_structure_ctor_component **comp_head,
2229 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2231 gfc_structure_ctor_component *comp_iter;
2232 gfc_component *comp;
2234 for (comp = sym->components; comp; comp = comp->next)
2236 gfc_structure_ctor_component **next_ptr;
2237 gfc_expr *value = NULL;
2239 /* Try to find the initializer for the current component by name. */
2240 next_ptr = comp_head;
2241 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2243 if (!strcmp (comp_iter->name, comp->name))
2244 break;
2245 next_ptr = &comp_iter->next;
2248 /* If an extension, try building the parent derived type by building
2249 a value expression for the parent derived type and calling self. */
2250 if (!comp_iter && comp == sym->components && sym->attr.extension)
2252 value = gfc_get_structure_constructor_expr (comp->ts.type,
2253 comp->ts.kind,
2254 &gfc_current_locus);
2255 value->ts = comp->ts;
2257 if (build_actual_constructor (comp_head, &value->value.constructor,
2258 comp->ts.u.derived) == FAILURE)
2260 gfc_free_expr (value);
2261 return FAILURE;
2264 gfc_constructor_append_expr (ctor_head, value, NULL);
2265 continue;
2268 /* If it was not found, try the default initializer if there's any;
2269 otherwise, it's an error. */
2270 if (!comp_iter)
2272 if (comp->initializer)
2274 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure"
2275 " constructor with missing optional arguments"
2276 " at %C") == FAILURE)
2277 return FAILURE;
2278 value = gfc_copy_expr (comp->initializer);
2280 else
2282 gfc_error ("No initializer for component '%s' given in the"
2283 " structure constructor at %C!", comp->name);
2284 return FAILURE;
2287 else
2288 value = comp_iter->val;
2290 /* Add the value to the constructor chain built. */
2291 gfc_constructor_append_expr (ctor_head, value, NULL);
2293 /* Remove the entry from the component list. We don't want the expression
2294 value to be free'd, so set it to NULL. */
2295 if (comp_iter)
2297 *next_ptr = comp_iter->next;
2298 comp_iter->val = NULL;
2299 gfc_free_structure_ctor_component (comp_iter);
2302 return SUCCESS;
2305 match
2306 gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result,
2307 bool parent)
2309 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2310 gfc_constructor_base ctor_head = NULL;
2311 gfc_component *comp; /* Is set NULL when named component is first seen */
2312 gfc_expr *e;
2313 locus where;
2314 match m;
2315 const char* last_name = NULL;
2317 comp_tail = comp_head = NULL;
2319 if (!parent && gfc_match_char ('(') != MATCH_YES)
2320 goto syntax;
2322 where = gfc_current_locus;
2324 gfc_find_component (sym, NULL, false, true);
2326 /* Check that we're not about to construct an ABSTRACT type. */
2327 if (!parent && sym->attr.abstract)
2329 gfc_error ("Can't construct ABSTRACT type '%s' at %C", sym->name);
2330 return MATCH_ERROR;
2333 /* Match the component list and store it in a list together with the
2334 corresponding component names. Check for empty argument list first. */
2335 if (gfc_match_char (')') != MATCH_YES)
2337 comp = sym->components;
2340 gfc_component *this_comp = NULL;
2342 if (comp == sym->components && sym->attr.extension
2343 && comp->ts.type == BT_DERIVED
2344 && comp->ts.u.derived->attr.zero_comp)
2345 /* Skip empty parents. */
2346 comp = comp->next;
2348 if (!comp_head)
2349 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2350 else
2352 comp_tail->next = gfc_get_structure_ctor_component ();
2353 comp_tail = comp_tail->next;
2355 comp_tail->name = XCNEWVEC (char, GFC_MAX_SYMBOL_LEN + 1);
2356 comp_tail->val = NULL;
2357 comp_tail->where = gfc_current_locus;
2359 /* Try matching a component name. */
2360 if (gfc_match_name (comp_tail->name) == MATCH_YES
2361 && gfc_match_char ('=') == MATCH_YES)
2363 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure"
2364 " constructor with named arguments at %C")
2365 == FAILURE)
2366 goto cleanup;
2368 last_name = comp_tail->name;
2369 comp = NULL;
2371 else
2373 /* Components without name are not allowed after the first named
2374 component initializer! */
2375 if (!comp)
2377 if (last_name)
2378 gfc_error ("Component initializer without name after"
2379 " component named %s at %C!", last_name);
2380 else if (!parent)
2381 gfc_error ("Too many components in structure constructor at"
2382 " %C!");
2383 goto cleanup;
2386 gfc_current_locus = comp_tail->where;
2387 strncpy (comp_tail->name, comp->name, GFC_MAX_SYMBOL_LEN + 1);
2390 /* Find the current component in the structure definition and check
2391 its access is not private. */
2392 if (comp)
2393 this_comp = gfc_find_component (sym, comp->name, false, false);
2394 else
2396 this_comp = gfc_find_component (sym,
2397 (const char *)comp_tail->name,
2398 false, false);
2399 comp = NULL; /* Reset needed! */
2402 /* Here we can check if a component name is given which does not
2403 correspond to any component of the defined structure. */
2404 if (!this_comp)
2405 goto cleanup;
2407 /* Check if this component is already given a value. */
2408 for (comp_iter = comp_head; comp_iter != comp_tail;
2409 comp_iter = comp_iter->next)
2411 gcc_assert (comp_iter);
2412 if (!strcmp (comp_iter->name, comp_tail->name))
2414 gfc_error ("Component '%s' is initialized twice in the"
2415 " structure constructor at %C!", comp_tail->name);
2416 goto cleanup;
2420 /* Match the current initializer expression. */
2421 m = gfc_match_expr (&comp_tail->val);
2422 if (m == MATCH_NO)
2423 goto syntax;
2424 if (m == MATCH_ERROR)
2425 goto cleanup;
2427 /* F2008, R457/C725, for PURE C1283. */
2428 if (this_comp->attr.pointer && gfc_is_coindexed (comp_tail->val))
2430 gfc_error ("Coindexed expression to pointer component '%s' in "
2431 "structure constructor at %C!", comp_tail->name);
2432 goto cleanup;
2436 /* If not explicitly a parent constructor, gather up the components
2437 and build one. */
2438 if (comp && comp == sym->components
2439 && sym->attr.extension
2440 && (comp_tail->val->ts.type != BT_DERIVED
2442 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2444 gfc_current_locus = where;
2445 gfc_free_expr (comp_tail->val);
2446 comp_tail->val = NULL;
2448 m = gfc_match_structure_constructor (comp->ts.u.derived,
2449 &comp_tail->val, true);
2450 if (m == MATCH_NO)
2451 goto syntax;
2452 if (m == MATCH_ERROR)
2453 goto cleanup;
2456 if (comp)
2457 comp = comp->next;
2459 if (parent && !comp)
2460 break;
2463 while (gfc_match_char (',') == MATCH_YES);
2465 if (!parent && gfc_match_char (')') != MATCH_YES)
2466 goto syntax;
2469 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2470 goto cleanup;
2472 /* No component should be left, as this should have caused an error in the
2473 loop constructing the component-list (name that does not correspond to any
2474 component in the structure definition). */
2475 if (comp_head)
2477 gcc_assert (sym->attr.extension);
2478 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2480 gfc_error ("component '%s' at %L has already been set by a "
2481 "parent derived type constructor", comp_iter->name,
2482 &comp_iter->where);
2484 goto cleanup;
2487 e = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &where);
2488 e->ts.u.derived = sym;
2489 e->value.constructor = ctor_head;
2491 *result = e;
2492 return MATCH_YES;
2494 syntax:
2495 gfc_error ("Syntax error in structure constructor at %C");
2497 cleanup:
2498 for (comp_iter = comp_head; comp_iter; )
2500 gfc_structure_ctor_component *next = comp_iter->next;
2501 gfc_free_structure_ctor_component (comp_iter);
2502 comp_iter = next;
2504 gfc_constructor_free (ctor_head);
2505 return MATCH_ERROR;
2509 /* If the symbol is an implicit do loop index and implicitly typed,
2510 it should not be host associated. Provide a symtree from the
2511 current namespace. */
2512 static match
2513 check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2515 if ((*sym)->attr.flavor == FL_VARIABLE
2516 && (*sym)->ns != gfc_current_ns
2517 && (*sym)->attr.implied_index
2518 && (*sym)->attr.implicit_type
2519 && !(*sym)->attr.use_assoc)
2521 int i;
2522 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2523 if (i)
2524 return MATCH_ERROR;
2525 *sym = (*st)->n.sym;
2527 return MATCH_YES;
2531 /* Procedure pointer as function result: Replace the function symbol by the
2532 auto-generated hidden result variable named "ppr@". */
2534 static gfc_try
2535 replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2537 /* Check for procedure pointer result variable. */
2538 if ((*sym)->attr.function && !(*sym)->attr.external
2539 && (*sym)->result && (*sym)->result != *sym
2540 && (*sym)->result->attr.proc_pointer
2541 && (*sym) == gfc_current_ns->proc_name
2542 && (*sym) == (*sym)->result->ns->proc_name
2543 && strcmp ("ppr@", (*sym)->result->name) == 0)
2545 /* Automatic replacement with "hidden" result variable. */
2546 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2547 *sym = (*sym)->result;
2548 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2549 return SUCCESS;
2551 return FAILURE;
2555 /* Matches a variable name followed by anything that might follow it--
2556 array reference, argument list of a function, etc. */
2558 match
2559 gfc_match_rvalue (gfc_expr **result)
2561 gfc_actual_arglist *actual_arglist;
2562 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2563 gfc_state_data *st;
2564 gfc_symbol *sym;
2565 gfc_symtree *symtree;
2566 locus where, old_loc;
2567 gfc_expr *e;
2568 match m, m2;
2569 int i;
2570 gfc_typespec *ts;
2571 bool implicit_char;
2572 gfc_ref *ref;
2574 m = gfc_match_name (name);
2575 if (m != MATCH_YES)
2576 return m;
2578 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2579 && !gfc_current_ns->has_import_set)
2580 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2581 else
2582 i = gfc_get_ha_sym_tree (name, &symtree);
2584 if (i)
2585 return MATCH_ERROR;
2587 sym = symtree->n.sym;
2588 e = NULL;
2589 where = gfc_current_locus;
2591 replace_hidden_procptr_result (&sym, &symtree);
2593 /* If this is an implicit do loop index and implicitly typed,
2594 it should not be host associated. */
2595 m = check_for_implicit_index (&symtree, &sym);
2596 if (m != MATCH_YES)
2597 return m;
2599 gfc_set_sym_referenced (sym);
2600 sym->attr.implied_index = 0;
2602 if (sym->attr.function && sym->result == sym)
2604 /* See if this is a directly recursive function call. */
2605 gfc_gobble_whitespace ();
2606 if (sym->attr.recursive
2607 && gfc_peek_ascii_char () == '('
2608 && gfc_current_ns->proc_name == sym
2609 && !sym->attr.dimension)
2611 gfc_error ("'%s' at %C is the name of a recursive function "
2612 "and so refers to the result variable. Use an "
2613 "explicit RESULT variable for direct recursion "
2614 "(12.5.2.1)", sym->name);
2615 return MATCH_ERROR;
2618 if (gfc_is_function_return_value (sym, gfc_current_ns))
2619 goto variable;
2621 if (sym->attr.entry
2622 && (sym->ns == gfc_current_ns
2623 || sym->ns == gfc_current_ns->parent))
2625 gfc_entry_list *el = NULL;
2627 for (el = sym->ns->entries; el; el = el->next)
2628 if (sym == el->sym)
2629 goto variable;
2633 if (gfc_matching_procptr_assignment)
2634 goto procptr0;
2636 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2637 goto function0;
2639 if (sym->attr.generic)
2640 goto generic_function;
2642 switch (sym->attr.flavor)
2644 case FL_VARIABLE:
2645 variable:
2646 e = gfc_get_expr ();
2648 e->expr_type = EXPR_VARIABLE;
2649 e->symtree = symtree;
2651 m = gfc_match_varspec (e, 0, false, true);
2652 break;
2654 case FL_PARAMETER:
2655 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2656 end up here. Unfortunately, sym->value->expr_type is set to
2657 EXPR_CONSTANT, and so the if () branch would be followed without
2658 the !sym->as check. */
2659 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2660 e = gfc_copy_expr (sym->value);
2661 else
2663 e = gfc_get_expr ();
2664 e->expr_type = EXPR_VARIABLE;
2667 e->symtree = symtree;
2668 m = gfc_match_varspec (e, 0, false, true);
2670 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2671 break;
2673 /* Variable array references to derived type parameters cause
2674 all sorts of headaches in simplification. Treating such
2675 expressions as variable works just fine for all array
2676 references. */
2677 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2679 for (ref = e->ref; ref; ref = ref->next)
2680 if (ref->type == REF_ARRAY)
2681 break;
2683 if (ref == NULL || ref->u.ar.type == AR_FULL)
2684 break;
2686 ref = e->ref;
2687 e->ref = NULL;
2688 gfc_free_expr (e);
2689 e = gfc_get_expr ();
2690 e->expr_type = EXPR_VARIABLE;
2691 e->symtree = symtree;
2692 e->ref = ref;
2695 break;
2697 case FL_DERIVED:
2698 sym = gfc_use_derived (sym);
2699 if (sym == NULL)
2700 m = MATCH_ERROR;
2701 else
2702 m = gfc_match_structure_constructor (sym, &e, false);
2703 break;
2705 /* If we're here, then the name is known to be the name of a
2706 procedure, yet it is not sure to be the name of a function. */
2707 case FL_PROCEDURE:
2709 /* Procedure Pointer Assignments. */
2710 procptr0:
2711 if (gfc_matching_procptr_assignment)
2713 gfc_gobble_whitespace ();
2714 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2715 /* Parse functions returning a procptr. */
2716 goto function0;
2718 if (gfc_is_intrinsic (sym, 0, gfc_current_locus)
2719 || gfc_is_intrinsic (sym, 1, gfc_current_locus))
2720 sym->attr.intrinsic = 1;
2721 e = gfc_get_expr ();
2722 e->expr_type = EXPR_VARIABLE;
2723 e->symtree = symtree;
2724 m = gfc_match_varspec (e, 0, false, true);
2725 break;
2728 if (sym->attr.subroutine)
2730 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2731 sym->name);
2732 m = MATCH_ERROR;
2733 break;
2736 /* At this point, the name has to be a non-statement function.
2737 If the name is the same as the current function being
2738 compiled, then we have a variable reference (to the function
2739 result) if the name is non-recursive. */
2741 st = gfc_enclosing_unit (NULL);
2743 if (st != NULL && st->state == COMP_FUNCTION
2744 && st->sym == sym
2745 && !sym->attr.recursive)
2747 e = gfc_get_expr ();
2748 e->symtree = symtree;
2749 e->expr_type = EXPR_VARIABLE;
2751 m = gfc_match_varspec (e, 0, false, true);
2752 break;
2755 /* Match a function reference. */
2756 function0:
2757 m = gfc_match_actual_arglist (0, &actual_arglist);
2758 if (m == MATCH_NO)
2760 if (sym->attr.proc == PROC_ST_FUNCTION)
2761 gfc_error ("Statement function '%s' requires argument list at %C",
2762 sym->name);
2763 else
2764 gfc_error ("Function '%s' requires an argument list at %C",
2765 sym->name);
2767 m = MATCH_ERROR;
2768 break;
2771 if (m != MATCH_YES)
2773 m = MATCH_ERROR;
2774 break;
2777 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2778 sym = symtree->n.sym;
2780 replace_hidden_procptr_result (&sym, &symtree);
2782 e = gfc_get_expr ();
2783 e->symtree = symtree;
2784 e->expr_type = EXPR_FUNCTION;
2785 e->value.function.actual = actual_arglist;
2786 e->where = gfc_current_locus;
2788 if (sym->as != NULL)
2789 e->rank = sym->as->rank;
2791 if (!sym->attr.function
2792 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2794 m = MATCH_ERROR;
2795 break;
2798 /* Check here for the existence of at least one argument for the
2799 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2800 argument(s) given will be checked in gfc_iso_c_func_interface,
2801 during resolution of the function call. */
2802 if (sym->attr.is_iso_c == 1
2803 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2804 && (sym->intmod_sym_id == ISOCBINDING_LOC
2805 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2806 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2808 /* make sure we were given a param */
2809 if (actual_arglist == NULL)
2811 gfc_error ("Missing argument to '%s' at %C", sym->name);
2812 m = MATCH_ERROR;
2813 break;
2817 if (sym->result == NULL)
2818 sym->result = sym;
2820 m = MATCH_YES;
2821 break;
2823 case FL_UNKNOWN:
2825 /* Special case for derived type variables that get their types
2826 via an IMPLICIT statement. This can't wait for the
2827 resolution phase. */
2829 if (gfc_peek_ascii_char () == '%'
2830 && sym->ts.type == BT_UNKNOWN
2831 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2832 gfc_set_default_type (sym, 0, sym->ns);
2834 /* If the symbol has a dimension attribute, the expression is a
2835 variable. */
2837 if (sym->attr.dimension)
2839 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2840 sym->name, NULL) == FAILURE)
2842 m = MATCH_ERROR;
2843 break;
2846 e = gfc_get_expr ();
2847 e->symtree = symtree;
2848 e->expr_type = EXPR_VARIABLE;
2849 m = gfc_match_varspec (e, 0, false, true);
2850 break;
2853 /* Name is not an array, so we peek to see if a '(' implies a
2854 function call or a substring reference. Otherwise the
2855 variable is just a scalar. */
2857 gfc_gobble_whitespace ();
2858 if (gfc_peek_ascii_char () != '(')
2860 /* Assume a scalar variable */
2861 e = gfc_get_expr ();
2862 e->symtree = symtree;
2863 e->expr_type = EXPR_VARIABLE;
2865 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2866 sym->name, NULL) == FAILURE)
2868 m = MATCH_ERROR;
2869 break;
2872 /*FIXME:??? gfc_match_varspec does set this for us: */
2873 e->ts = sym->ts;
2874 m = gfc_match_varspec (e, 0, false, true);
2875 break;
2878 /* See if this is a function reference with a keyword argument
2879 as first argument. We do this because otherwise a spurious
2880 symbol would end up in the symbol table. */
2882 old_loc = gfc_current_locus;
2883 m2 = gfc_match (" ( %n =", argname);
2884 gfc_current_locus = old_loc;
2886 e = gfc_get_expr ();
2887 e->symtree = symtree;
2889 if (m2 != MATCH_YES)
2891 /* Try to figure out whether we're dealing with a character type.
2892 We're peeking ahead here, because we don't want to call
2893 match_substring if we're dealing with an implicitly typed
2894 non-character variable. */
2895 implicit_char = false;
2896 if (sym->ts.type == BT_UNKNOWN)
2898 ts = gfc_get_default_type (sym->name, NULL);
2899 if (ts->type == BT_CHARACTER)
2900 implicit_char = true;
2903 /* See if this could possibly be a substring reference of a name
2904 that we're not sure is a variable yet. */
2906 if ((implicit_char || sym->ts.type == BT_CHARACTER)
2907 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
2910 e->expr_type = EXPR_VARIABLE;
2912 if (sym->attr.flavor != FL_VARIABLE
2913 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
2914 sym->name, NULL) == FAILURE)
2916 m = MATCH_ERROR;
2917 break;
2920 if (sym->ts.type == BT_UNKNOWN
2921 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2923 m = MATCH_ERROR;
2924 break;
2927 e->ts = sym->ts;
2928 if (e->ref)
2929 e->ts.u.cl = NULL;
2930 m = MATCH_YES;
2931 break;
2935 /* Give up, assume we have a function. */
2937 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2938 sym = symtree->n.sym;
2939 e->expr_type = EXPR_FUNCTION;
2941 if (!sym->attr.function
2942 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2944 m = MATCH_ERROR;
2945 break;
2948 sym->result = sym;
2950 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2951 if (m == MATCH_NO)
2952 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2954 if (m != MATCH_YES)
2956 m = MATCH_ERROR;
2957 break;
2960 /* If our new function returns a character, array or structure
2961 type, it might have subsequent references. */
2963 m = gfc_match_varspec (e, 0, false, true);
2964 if (m == MATCH_NO)
2965 m = MATCH_YES;
2967 break;
2969 generic_function:
2970 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
2972 e = gfc_get_expr ();
2973 e->symtree = symtree;
2974 e->expr_type = EXPR_FUNCTION;
2976 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2977 break;
2979 default:
2980 gfc_error ("Symbol at %C is not appropriate for an expression");
2981 return MATCH_ERROR;
2984 if (m == MATCH_YES)
2986 e->where = where;
2987 *result = e;
2989 else
2990 gfc_free_expr (e);
2992 return m;
2996 /* Match a variable, i.e. something that can be assigned to. This
2997 starts as a symbol, can be a structure component or an array
2998 reference. It can be a function if the function doesn't have a
2999 separate RESULT variable. If the symbol has not been previously
3000 seen, we assume it is a variable.
3002 This function is called by two interface functions:
3003 gfc_match_variable, which has host_flag = 1, and
3004 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3005 match of the symbol to the local scope. */
3007 static match
3008 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3010 gfc_symbol *sym;
3011 gfc_symtree *st;
3012 gfc_expr *expr;
3013 locus where;
3014 match m;
3016 /* Since nothing has any business being an lvalue in a module
3017 specification block, an interface block or a contains section,
3018 we force the changed_symbols mechanism to work by setting
3019 host_flag to 0. This prevents valid symbols that have the name
3020 of keywords, such as 'end', being turned into variables by
3021 failed matching to assignments for, e.g., END INTERFACE. */
3022 if (gfc_current_state () == COMP_MODULE
3023 || gfc_current_state () == COMP_INTERFACE
3024 || gfc_current_state () == COMP_CONTAINS)
3025 host_flag = 0;
3027 where = gfc_current_locus;
3028 m = gfc_match_sym_tree (&st, host_flag);
3029 if (m != MATCH_YES)
3030 return m;
3032 sym = st->n.sym;
3034 /* If this is an implicit do loop index and implicitly typed,
3035 it should not be host associated. */
3036 m = check_for_implicit_index (&st, &sym);
3037 if (m != MATCH_YES)
3038 return m;
3040 sym->attr.implied_index = 0;
3042 gfc_set_sym_referenced (sym);
3043 switch (sym->attr.flavor)
3045 case FL_VARIABLE:
3046 /* Everything is alright. */
3047 break;
3049 case FL_UNKNOWN:
3051 sym_flavor flavor = FL_UNKNOWN;
3053 gfc_gobble_whitespace ();
3055 if (sym->attr.external || sym->attr.procedure
3056 || sym->attr.function || sym->attr.subroutine)
3057 flavor = FL_PROCEDURE;
3059 /* If it is not a procedure, is not typed and is host associated,
3060 we cannot give it a flavor yet. */
3061 else if (sym->ns == gfc_current_ns->parent
3062 && sym->ts.type == BT_UNKNOWN)
3063 break;
3065 /* These are definitive indicators that this is a variable. */
3066 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3067 || sym->attr.pointer || sym->as != NULL)
3068 flavor = FL_VARIABLE;
3070 if (flavor != FL_UNKNOWN
3071 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3072 return MATCH_ERROR;
3074 break;
3076 case FL_PARAMETER:
3077 if (equiv_flag)
3079 gfc_error ("Named constant at %C in an EQUIVALENCE");
3080 return MATCH_ERROR;
3082 /* Otherwise this is checked for and an error given in the
3083 variable definition context checks. */
3084 break;
3086 case FL_PROCEDURE:
3087 /* Check for a nonrecursive function result variable. */
3088 if (sym->attr.function
3089 && !sym->attr.external
3090 && sym->result == sym
3091 && (gfc_is_function_return_value (sym, gfc_current_ns)
3092 || (sym->attr.entry
3093 && sym->ns == gfc_current_ns)
3094 || (sym->attr.entry
3095 && sym->ns == gfc_current_ns->parent)))
3097 /* If a function result is a derived type, then the derived
3098 type may still have to be resolved. */
3100 if (sym->ts.type == BT_DERIVED
3101 && gfc_use_derived (sym->ts.u.derived) == NULL)
3102 return MATCH_ERROR;
3103 break;
3106 if (sym->attr.proc_pointer
3107 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3108 break;
3110 /* Fall through to error */
3112 default:
3113 gfc_error ("'%s' at %C is not a variable", sym->name);
3114 return MATCH_ERROR;
3117 /* Special case for derived type variables that get their types
3118 via an IMPLICIT statement. This can't wait for the
3119 resolution phase. */
3122 gfc_namespace * implicit_ns;
3124 if (gfc_current_ns->proc_name == sym)
3125 implicit_ns = gfc_current_ns;
3126 else
3127 implicit_ns = sym->ns;
3129 if (gfc_peek_ascii_char () == '%'
3130 && sym->ts.type == BT_UNKNOWN
3131 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3132 gfc_set_default_type (sym, 0, implicit_ns);
3135 expr = gfc_get_expr ();
3137 expr->expr_type = EXPR_VARIABLE;
3138 expr->symtree = st;
3139 expr->ts = sym->ts;
3140 expr->where = where;
3142 /* Now see if we have to do more. */
3143 m = gfc_match_varspec (expr, equiv_flag, false, false);
3144 if (m != MATCH_YES)
3146 gfc_free_expr (expr);
3147 return m;
3150 *result = expr;
3151 return MATCH_YES;
3155 match
3156 gfc_match_variable (gfc_expr **result, int equiv_flag)
3158 return match_variable (result, equiv_flag, 1);
3162 match
3163 gfc_match_equiv_variable (gfc_expr **result)
3165 return match_variable (result, 1, 0);