]> git.ipfire.org Git - thirdparty/gcc.git/blame_incremental - gcc/fortran/primary.c
invoke.texi (profile-use): update documentation.
[thirdparty/gcc.git] / gcc / fortran / primary.c
... / ...
CommitLineData
1/* Primary expression subroutines
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
3 2011, 2012
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught
6
7This file is part of GCC.
8
9GCC is free software; you can redistribute it and/or modify it under
10the terms of the GNU General Public License as published by the Free
11Software Foundation; either version 3, or (at your option) any later
12version.
13
14GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15WARRANTY; without even the implied warranty of MERCHANTABILITY or
16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17for more details.
18
19You should have received a copy of the GNU General Public License
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
22
23#include "config.h"
24#include "system.h"
25#include "coretypes.h"
26#include "flags.h"
27#include "gfortran.h"
28#include "arith.h"
29#include "match.h"
30#include "parse.h"
31#include "constructor.h"
32
33int matching_actual_arglist = 0;
34
35/* Matches a kind-parameter expression, which is either a named
36 symbolic constant or a nonnegative integer constant. If
37 successful, sets the kind value to the correct integer.
38 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
39 symbol like e.g. 'c_int'. */
40
41static match
42match_kind_param (int *kind, int *is_iso_c)
43{
44 char name[GFC_MAX_SYMBOL_LEN + 1];
45 gfc_symbol *sym;
46 const char *p;
47 match m;
48
49 *is_iso_c = 0;
50
51 m = gfc_match_small_literal_int (kind, NULL);
52 if (m != MATCH_NO)
53 return m;
54
55 m = gfc_match_name (name);
56 if (m != MATCH_YES)
57 return m;
58
59 if (gfc_find_symbol (name, NULL, 1, &sym))
60 return MATCH_ERROR;
61
62 if (sym == NULL)
63 return MATCH_NO;
64
65 *is_iso_c = sym->attr.is_iso_c;
66
67 if (sym->attr.flavor != FL_PARAMETER)
68 return MATCH_NO;
69
70 if (sym->value == NULL)
71 return MATCH_NO;
72
73 p = gfc_extract_int (sym->value, kind);
74 if (p != NULL)
75 return MATCH_NO;
76
77 gfc_set_sym_referenced (sym);
78
79 if (*kind < 0)
80 return MATCH_NO;
81
82 return MATCH_YES;
83}
84
85
86/* Get a trailing kind-specification for non-character variables.
87 Returns:
88 * the integer kind value or
89 * -1 if an error was generated,
90 * -2 if no kind was found.
91 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
92 symbol like e.g. 'c_int'. */
93
94static int
95get_kind (int *is_iso_c)
96{
97 int kind;
98 match m;
99
100 *is_iso_c = 0;
101
102 if (gfc_match_char ('_') != MATCH_YES)
103 return -2;
104
105 m = match_kind_param (&kind, is_iso_c);
106 if (m == MATCH_NO)
107 gfc_error ("Missing kind-parameter at %C");
108
109 return (m == MATCH_YES) ? kind : -1;
110}
111
112
113/* Given a character and a radix, see if the character is a valid
114 digit in that radix. */
115
116int
117gfc_check_digit (char c, int radix)
118{
119 int r;
120
121 switch (radix)
122 {
123 case 2:
124 r = ('0' <= c && c <= '1');
125 break;
126
127 case 8:
128 r = ('0' <= c && c <= '7');
129 break;
130
131 case 10:
132 r = ('0' <= c && c <= '9');
133 break;
134
135 case 16:
136 r = ISXDIGIT (c);
137 break;
138
139 default:
140 gfc_internal_error ("gfc_check_digit(): bad radix");
141 }
142
143 return r;
144}
145
146
147/* Match the digit string part of an integer if signflag is not set,
148 the signed digit string part if signflag is set. If the buffer
149 is NULL, we just count characters for the resolution pass. Returns
150 the number of characters matched, -1 for no match. */
151
152static int
153match_digits (int signflag, int radix, char *buffer)
154{
155 locus old_loc;
156 int length;
157 char c;
158
159 length = 0;
160 c = gfc_next_ascii_char ();
161
162 if (signflag && (c == '+' || c == '-'))
163 {
164 if (buffer != NULL)
165 *buffer++ = c;
166 gfc_gobble_whitespace ();
167 c = gfc_next_ascii_char ();
168 length++;
169 }
170
171 if (!gfc_check_digit (c, radix))
172 return -1;
173
174 length++;
175 if (buffer != NULL)
176 *buffer++ = c;
177
178 for (;;)
179 {
180 old_loc = gfc_current_locus;
181 c = gfc_next_ascii_char ();
182
183 if (!gfc_check_digit (c, radix))
184 break;
185
186 if (buffer != NULL)
187 *buffer++ = c;
188 length++;
189 }
190
191 gfc_current_locus = old_loc;
192
193 return length;
194}
195
196
197/* Match an integer (digit string and optional kind).
198 A sign will be accepted if signflag is set. */
199
200static match
201match_integer_constant (gfc_expr **result, int signflag)
202{
203 int length, kind, is_iso_c;
204 locus old_loc;
205 char *buffer;
206 gfc_expr *e;
207
208 old_loc = gfc_current_locus;
209 gfc_gobble_whitespace ();
210
211 length = match_digits (signflag, 10, NULL);
212 gfc_current_locus = old_loc;
213 if (length == -1)
214 return MATCH_NO;
215
216 buffer = (char *) alloca (length + 1);
217 memset (buffer, '\0', length + 1);
218
219 gfc_gobble_whitespace ();
220
221 match_digits (signflag, 10, buffer);
222
223 kind = get_kind (&is_iso_c);
224 if (kind == -2)
225 kind = gfc_default_integer_kind;
226 if (kind == -1)
227 return MATCH_ERROR;
228
229 if (kind == 4 && gfc_option.flag_integer4_kind == 8)
230 kind = 8;
231
232 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
233 {
234 gfc_error ("Integer kind %d at %C not available", kind);
235 return MATCH_ERROR;
236 }
237
238 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
239 e->ts.is_c_interop = is_iso_c;
240
241 if (gfc_range_check (e) != ARITH_OK)
242 {
243 gfc_error ("Integer too big for its kind at %C. This check can be "
244 "disabled with the option -fno-range-check");
245
246 gfc_free_expr (e);
247 return MATCH_ERROR;
248 }
249
250 *result = e;
251 return MATCH_YES;
252}
253
254
255/* Match a Hollerith constant. */
256
257static match
258match_hollerith_constant (gfc_expr **result)
259{
260 locus old_loc;
261 gfc_expr *e = NULL;
262 const char *msg;
263 int num, pad;
264 int i;
265
266 old_loc = gfc_current_locus;
267 gfc_gobble_whitespace ();
268
269 if (match_integer_constant (&e, 0) == MATCH_YES
270 && gfc_match_char ('h') == MATCH_YES)
271 {
272 if (gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant "
273 "at %C") == FAILURE)
274 goto cleanup;
275
276 msg = gfc_extract_int (e, &num);
277 if (msg != NULL)
278 {
279 gfc_error (msg);
280 goto cleanup;
281 }
282 if (num == 0)
283 {
284 gfc_error ("Invalid Hollerith constant: %L must contain at least "
285 "one character", &old_loc);
286 goto cleanup;
287 }
288 if (e->ts.kind != gfc_default_integer_kind)
289 {
290 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
291 "should be default", &old_loc);
292 goto cleanup;
293 }
294 else
295 {
296 gfc_free_expr (e);
297 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
298 &gfc_current_locus);
299
300 /* Calculate padding needed to fit default integer memory. */
301 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
302
303 e->representation.string = XCNEWVEC (char, num + pad + 1);
304
305 for (i = 0; i < num; i++)
306 {
307 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
308 if (! gfc_wide_fits_in_byte (c))
309 {
310 gfc_error ("Invalid Hollerith constant at %L contains a "
311 "wide character", &old_loc);
312 goto cleanup;
313 }
314
315 e->representation.string[i] = (unsigned char) c;
316 }
317
318 /* Now pad with blanks and end with a null char. */
319 for (i = 0; i < pad; i++)
320 e->representation.string[num + i] = ' ';
321
322 e->representation.string[num + i] = '\0';
323 e->representation.length = num + pad;
324 e->ts.u.pad = pad;
325
326 *result = e;
327 return MATCH_YES;
328 }
329 }
330
331 gfc_free_expr (e);
332 gfc_current_locus = old_loc;
333 return MATCH_NO;
334
335cleanup:
336 gfc_free_expr (e);
337 return MATCH_ERROR;
338}
339
340
341/* Match a binary, octal or hexadecimal constant that can be found in
342 a DATA statement. The standard permits b'010...', o'73...', and
343 z'a1...' where b, o, and z can be capital letters. This function
344 also accepts postfixed forms of the constants: '01...'b, '73...'o,
345 and 'a1...'z. An additional extension is the use of x for z. */
346
347static match
348match_boz_constant (gfc_expr **result)
349{
350 int radix, length, x_hex, kind;
351 locus old_loc, start_loc;
352 char *buffer, post, delim;
353 gfc_expr *e;
354
355 start_loc = old_loc = gfc_current_locus;
356 gfc_gobble_whitespace ();
357
358 x_hex = 0;
359 switch (post = gfc_next_ascii_char ())
360 {
361 case 'b':
362 radix = 2;
363 post = 0;
364 break;
365 case 'o':
366 radix = 8;
367 post = 0;
368 break;
369 case 'x':
370 x_hex = 1;
371 /* Fall through. */
372 case 'z':
373 radix = 16;
374 post = 0;
375 break;
376 case '\'':
377 /* Fall through. */
378 case '\"':
379 delim = post;
380 post = 1;
381 radix = 16; /* Set to accept any valid digit string. */
382 break;
383 default:
384 goto backup;
385 }
386
387 /* No whitespace allowed here. */
388
389 if (post == 0)
390 delim = gfc_next_ascii_char ();
391
392 if (delim != '\'' && delim != '\"')
393 goto backup;
394
395 if (x_hex
396 && (gfc_notify_std (GFC_STD_GNU, "Hexadecimal "
397 "constant at %C uses non-standard syntax")
398 == FAILURE))
399 return MATCH_ERROR;
400
401 old_loc = gfc_current_locus;
402
403 length = match_digits (0, radix, NULL);
404 if (length == -1)
405 {
406 gfc_error ("Empty set of digits in BOZ constant at %C");
407 return MATCH_ERROR;
408 }
409
410 if (gfc_next_ascii_char () != delim)
411 {
412 gfc_error ("Illegal character in BOZ constant at %C");
413 return MATCH_ERROR;
414 }
415
416 if (post == 1)
417 {
418 switch (gfc_next_ascii_char ())
419 {
420 case 'b':
421 radix = 2;
422 break;
423 case 'o':
424 radix = 8;
425 break;
426 case 'x':
427 /* Fall through. */
428 case 'z':
429 radix = 16;
430 break;
431 default:
432 goto backup;
433 }
434
435 if (gfc_notify_std (GFC_STD_GNU, "BOZ constant "
436 "at %C uses non-standard postfix syntax")
437 == FAILURE)
438 return MATCH_ERROR;
439 }
440
441 gfc_current_locus = old_loc;
442
443 buffer = (char *) alloca (length + 1);
444 memset (buffer, '\0', length + 1);
445
446 match_digits (0, radix, buffer);
447 gfc_next_ascii_char (); /* Eat delimiter. */
448 if (post == 1)
449 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
450
451 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
452 "If a data-stmt-constant is a boz-literal-constant, the corresponding
453 variable shall be of type integer. The boz-literal-constant is treated
454 as if it were an int-literal-constant with a kind-param that specifies
455 the representation method with the largest decimal exponent range
456 supported by the processor." */
457
458 kind = gfc_max_integer_kind;
459 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
460
461 /* Mark as boz variable. */
462 e->is_boz = 1;
463
464 if (gfc_range_check (e) != ARITH_OK)
465 {
466 gfc_error ("Integer too big for integer kind %i at %C", kind);
467 gfc_free_expr (e);
468 return MATCH_ERROR;
469 }
470
471 if (!gfc_in_match_data ()
472 && (gfc_notify_std (GFC_STD_F2003, "BOZ used outside a DATA "
473 "statement at %C")
474 == FAILURE))
475 return MATCH_ERROR;
476
477 *result = e;
478 return MATCH_YES;
479
480backup:
481 gfc_current_locus = start_loc;
482 return MATCH_NO;
483}
484
485
486/* Match a real constant of some sort. Allow a signed constant if signflag
487 is nonzero. */
488
489static match
490match_real_constant (gfc_expr **result, int signflag)
491{
492 int kind, count, seen_dp, seen_digits, is_iso_c;
493 locus old_loc, temp_loc;
494 char *p, *buffer, c, exp_char;
495 gfc_expr *e;
496 bool negate;
497
498 old_loc = gfc_current_locus;
499 gfc_gobble_whitespace ();
500
501 e = NULL;
502
503 count = 0;
504 seen_dp = 0;
505 seen_digits = 0;
506 exp_char = ' ';
507 negate = FALSE;
508
509 c = gfc_next_ascii_char ();
510 if (signflag && (c == '+' || c == '-'))
511 {
512 if (c == '-')
513 negate = TRUE;
514
515 gfc_gobble_whitespace ();
516 c = gfc_next_ascii_char ();
517 }
518
519 /* Scan significand. */
520 for (;; c = gfc_next_ascii_char (), count++)
521 {
522 if (c == '.')
523 {
524 if (seen_dp)
525 goto done;
526
527 /* Check to see if "." goes with a following operator like
528 ".eq.". */
529 temp_loc = gfc_current_locus;
530 c = gfc_next_ascii_char ();
531
532 if (c == 'e' || c == 'd' || c == 'q')
533 {
534 c = gfc_next_ascii_char ();
535 if (c == '.')
536 goto done; /* Operator named .e. or .d. */
537 }
538
539 if (ISALPHA (c))
540 goto done; /* Distinguish 1.e9 from 1.eq.2 */
541
542 gfc_current_locus = temp_loc;
543 seen_dp = 1;
544 continue;
545 }
546
547 if (ISDIGIT (c))
548 {
549 seen_digits = 1;
550 continue;
551 }
552
553 break;
554 }
555
556 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
557 goto done;
558 exp_char = c;
559
560
561 if (c == 'q')
562 {
563 if (gfc_notify_std (GFC_STD_GNU, "exponent-letter 'q' in "
564 "real-literal-constant at %C") == FAILURE)
565 return MATCH_ERROR;
566 else if (gfc_option.warn_real_q_constant)
567 gfc_warning("Extension: exponent-letter 'q' in real-literal-constant "
568 "at %C");
569 }
570
571 /* Scan exponent. */
572 c = gfc_next_ascii_char ();
573 count++;
574
575 if (c == '+' || c == '-')
576 { /* optional sign */
577 c = gfc_next_ascii_char ();
578 count++;
579 }
580
581 if (!ISDIGIT (c))
582 {
583 gfc_error ("Missing exponent in real number at %C");
584 return MATCH_ERROR;
585 }
586
587 while (ISDIGIT (c))
588 {
589 c = gfc_next_ascii_char ();
590 count++;
591 }
592
593done:
594 /* Check that we have a numeric constant. */
595 if (!seen_digits || (!seen_dp && exp_char == ' '))
596 {
597 gfc_current_locus = old_loc;
598 return MATCH_NO;
599 }
600
601 /* Convert the number. */
602 gfc_current_locus = old_loc;
603 gfc_gobble_whitespace ();
604
605 buffer = (char *) alloca (count + 1);
606 memset (buffer, '\0', count + 1);
607
608 p = buffer;
609 c = gfc_next_ascii_char ();
610 if (c == '+' || c == '-')
611 {
612 gfc_gobble_whitespace ();
613 c = gfc_next_ascii_char ();
614 }
615
616 /* Hack for mpfr_set_str(). */
617 for (;;)
618 {
619 if (c == 'd' || c == 'q')
620 *p = 'e';
621 else
622 *p = c;
623 p++;
624 if (--count == 0)
625 break;
626
627 c = gfc_next_ascii_char ();
628 }
629
630 kind = get_kind (&is_iso_c);
631 if (kind == -1)
632 goto cleanup;
633
634 switch (exp_char)
635 {
636 case 'd':
637 if (kind != -2)
638 {
639 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
640 "kind");
641 goto cleanup;
642 }
643 kind = gfc_default_double_kind;
644
645 if (kind == 4)
646 {
647 if (gfc_option.flag_real4_kind == 8)
648 kind = 8;
649 if (gfc_option.flag_real4_kind == 10)
650 kind = 10;
651 if (gfc_option.flag_real4_kind == 16)
652 kind = 16;
653 }
654
655 if (kind == 8)
656 {
657 if (gfc_option.flag_real8_kind == 4)
658 kind = 4;
659 if (gfc_option.flag_real8_kind == 10)
660 kind = 10;
661 if (gfc_option.flag_real8_kind == 16)
662 kind = 16;
663 }
664 break;
665
666 case 'q':
667 if (kind != -2)
668 {
669 gfc_error ("Real number at %C has a 'q' exponent and an explicit "
670 "kind");
671 goto cleanup;
672 }
673
674 /* The maximum possible real kind type parameter is 16. First, try
675 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
676 extended precision. If neither value works, just given up. */
677 kind = 16;
678 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
679 {
680 kind = 10;
681 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
682 {
683 gfc_error ("Invalid exponent-letter 'q' in "
684 "real-literal-constant at %C");
685 goto cleanup;
686 }
687 }
688 break;
689
690 default:
691 if (kind == -2)
692 kind = gfc_default_real_kind;
693
694 if (kind == 4)
695 {
696 if (gfc_option.flag_real4_kind == 8)
697 kind = 8;
698 if (gfc_option.flag_real4_kind == 10)
699 kind = 10;
700 if (gfc_option.flag_real4_kind == 16)
701 kind = 16;
702 }
703
704 if (kind == 8)
705 {
706 if (gfc_option.flag_real8_kind == 4)
707 kind = 4;
708 if (gfc_option.flag_real8_kind == 10)
709 kind = 10;
710 if (gfc_option.flag_real8_kind == 16)
711 kind = 16;
712 }
713
714 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
715 {
716 gfc_error ("Invalid real kind %d at %C", kind);
717 goto cleanup;
718 }
719 }
720
721 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
722 if (negate)
723 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
724 e->ts.is_c_interop = is_iso_c;
725
726 switch (gfc_range_check (e))
727 {
728 case ARITH_OK:
729 break;
730 case ARITH_OVERFLOW:
731 gfc_error ("Real constant overflows its kind at %C");
732 goto cleanup;
733
734 case ARITH_UNDERFLOW:
735 if (gfc_option.warn_underflow)
736 gfc_warning ("Real constant underflows its kind at %C");
737 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
738 break;
739
740 default:
741 gfc_internal_error ("gfc_range_check() returned bad value");
742 }
743
744 *result = e;
745 return MATCH_YES;
746
747cleanup:
748 gfc_free_expr (e);
749 return MATCH_ERROR;
750}
751
752
753/* Match a substring reference. */
754
755static match
756match_substring (gfc_charlen *cl, int init, gfc_ref **result)
757{
758 gfc_expr *start, *end;
759 locus old_loc;
760 gfc_ref *ref;
761 match m;
762
763 start = NULL;
764 end = NULL;
765
766 old_loc = gfc_current_locus;
767
768 m = gfc_match_char ('(');
769 if (m != MATCH_YES)
770 return MATCH_NO;
771
772 if (gfc_match_char (':') != MATCH_YES)
773 {
774 if (init)
775 m = gfc_match_init_expr (&start);
776 else
777 m = gfc_match_expr (&start);
778
779 if (m != MATCH_YES)
780 {
781 m = MATCH_NO;
782 goto cleanup;
783 }
784
785 m = gfc_match_char (':');
786 if (m != MATCH_YES)
787 goto cleanup;
788 }
789
790 if (gfc_match_char (')') != MATCH_YES)
791 {
792 if (init)
793 m = gfc_match_init_expr (&end);
794 else
795 m = gfc_match_expr (&end);
796
797 if (m == MATCH_NO)
798 goto syntax;
799 if (m == MATCH_ERROR)
800 goto cleanup;
801
802 m = gfc_match_char (')');
803 if (m == MATCH_NO)
804 goto syntax;
805 }
806
807 /* Optimize away the (:) reference. */
808 if (start == NULL && end == NULL)
809 ref = NULL;
810 else
811 {
812 ref = gfc_get_ref ();
813
814 ref->type = REF_SUBSTRING;
815 if (start == NULL)
816 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
817 ref->u.ss.start = start;
818 if (end == NULL && cl)
819 end = gfc_copy_expr (cl->length);
820 ref->u.ss.end = end;
821 ref->u.ss.length = cl;
822 }
823
824 *result = ref;
825 return MATCH_YES;
826
827syntax:
828 gfc_error ("Syntax error in SUBSTRING specification at %C");
829 m = MATCH_ERROR;
830
831cleanup:
832 gfc_free_expr (start);
833 gfc_free_expr (end);
834
835 gfc_current_locus = old_loc;
836 return m;
837}
838
839
840/* Reads the next character of a string constant, taking care to
841 return doubled delimiters on the input as a single instance of
842 the delimiter.
843
844 Special return values for "ret" argument are:
845 -1 End of the string, as determined by the delimiter
846 -2 Unterminated string detected
847
848 Backslash codes are also expanded at this time. */
849
850static gfc_char_t
851next_string_char (gfc_char_t delimiter, int *ret)
852{
853 locus old_locus;
854 gfc_char_t c;
855
856 c = gfc_next_char_literal (INSTRING_WARN);
857 *ret = 0;
858
859 if (c == '\n')
860 {
861 *ret = -2;
862 return 0;
863 }
864
865 if (gfc_option.flag_backslash && c == '\\')
866 {
867 old_locus = gfc_current_locus;
868
869 if (gfc_match_special_char (&c) == MATCH_NO)
870 gfc_current_locus = old_locus;
871
872 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
873 gfc_warning ("Extension: backslash character at %C");
874 }
875
876 if (c != delimiter)
877 return c;
878
879 old_locus = gfc_current_locus;
880 c = gfc_next_char_literal (NONSTRING);
881
882 if (c == delimiter)
883 return c;
884 gfc_current_locus = old_locus;
885
886 *ret = -1;
887 return 0;
888}
889
890
891/* Special case of gfc_match_name() that matches a parameter kind name
892 before a string constant. This takes case of the weird but legal
893 case of:
894
895 kind_____'string'
896
897 where kind____ is a parameter. gfc_match_name() will happily slurp
898 up all the underscores, which leads to problems. If we return
899 MATCH_YES, the parse pointer points to the final underscore, which
900 is not part of the name. We never return MATCH_ERROR-- errors in
901 the name will be detected later. */
902
903static match
904match_charkind_name (char *name)
905{
906 locus old_loc;
907 char c, peek;
908 int len;
909
910 gfc_gobble_whitespace ();
911 c = gfc_next_ascii_char ();
912 if (!ISALPHA (c))
913 return MATCH_NO;
914
915 *name++ = c;
916 len = 1;
917
918 for (;;)
919 {
920 old_loc = gfc_current_locus;
921 c = gfc_next_ascii_char ();
922
923 if (c == '_')
924 {
925 peek = gfc_peek_ascii_char ();
926
927 if (peek == '\'' || peek == '\"')
928 {
929 gfc_current_locus = old_loc;
930 *name = '\0';
931 return MATCH_YES;
932 }
933 }
934
935 if (!ISALNUM (c)
936 && c != '_'
937 && (c != '$' || !gfc_option.flag_dollar_ok))
938 break;
939
940 *name++ = c;
941 if (++len > GFC_MAX_SYMBOL_LEN)
942 break;
943 }
944
945 return MATCH_NO;
946}
947
948
949/* See if the current input matches a character constant. Lots of
950 contortions have to be done to match the kind parameter which comes
951 before the actual string. The main consideration is that we don't
952 want to error out too quickly. For example, we don't actually do
953 any validation of the kinds until we have actually seen a legal
954 delimiter. Using match_kind_param() generates errors too quickly. */
955
956static match
957match_string_constant (gfc_expr **result)
958{
959 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
960 int i, kind, length, warn_ampersand, ret;
961 locus old_locus, start_locus;
962 gfc_symbol *sym;
963 gfc_expr *e;
964 const char *q;
965 match m;
966 gfc_char_t c, delimiter, *p;
967
968 old_locus = gfc_current_locus;
969
970 gfc_gobble_whitespace ();
971
972 c = gfc_next_char ();
973 if (c == '\'' || c == '"')
974 {
975 kind = gfc_default_character_kind;
976 start_locus = gfc_current_locus;
977 goto got_delim;
978 }
979
980 if (gfc_wide_is_digit (c))
981 {
982 kind = 0;
983
984 while (gfc_wide_is_digit (c))
985 {
986 kind = kind * 10 + c - '0';
987 if (kind > 9999999)
988 goto no_match;
989 c = gfc_next_char ();
990 }
991
992 }
993 else
994 {
995 gfc_current_locus = old_locus;
996
997 m = match_charkind_name (name);
998 if (m != MATCH_YES)
999 goto no_match;
1000
1001 if (gfc_find_symbol (name, NULL, 1, &sym)
1002 || sym == NULL
1003 || sym->attr.flavor != FL_PARAMETER)
1004 goto no_match;
1005
1006 kind = -1;
1007 c = gfc_next_char ();
1008 }
1009
1010 if (c == ' ')
1011 {
1012 gfc_gobble_whitespace ();
1013 c = gfc_next_char ();
1014 }
1015
1016 if (c != '_')
1017 goto no_match;
1018
1019 gfc_gobble_whitespace ();
1020
1021 c = gfc_next_char ();
1022 if (c != '\'' && c != '"')
1023 goto no_match;
1024
1025 start_locus = gfc_current_locus;
1026
1027 if (kind == -1)
1028 {
1029 q = gfc_extract_int (sym->value, &kind);
1030 if (q != NULL)
1031 {
1032 gfc_error (q);
1033 return MATCH_ERROR;
1034 }
1035 gfc_set_sym_referenced (sym);
1036 }
1037
1038 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1039 {
1040 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1041 return MATCH_ERROR;
1042 }
1043
1044got_delim:
1045 /* Scan the string into a block of memory by first figuring out how
1046 long it is, allocating the structure, then re-reading it. This
1047 isn't particularly efficient, but string constants aren't that
1048 common in most code. TODO: Use obstacks? */
1049
1050 delimiter = c;
1051 length = 0;
1052
1053 for (;;)
1054 {
1055 c = next_string_char (delimiter, &ret);
1056 if (ret == -1)
1057 break;
1058 if (ret == -2)
1059 {
1060 gfc_current_locus = start_locus;
1061 gfc_error ("Unterminated character constant beginning at %C");
1062 return MATCH_ERROR;
1063 }
1064
1065 length++;
1066 }
1067
1068 /* Peek at the next character to see if it is a b, o, z, or x for the
1069 postfixed BOZ literal constants. */
1070 peek = gfc_peek_ascii_char ();
1071 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1072 goto no_match;
1073
1074 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1075
1076 gfc_current_locus = start_locus;
1077
1078 /* We disable the warning for the following loop as the warning has already
1079 been printed in the loop above. */
1080 warn_ampersand = gfc_option.warn_ampersand;
1081 gfc_option.warn_ampersand = 0;
1082
1083 p = e->value.character.string;
1084 for (i = 0; i < length; i++)
1085 {
1086 c = next_string_char (delimiter, &ret);
1087
1088 if (!gfc_check_character_range (c, kind))
1089 {
1090 gfc_free_expr (e);
1091 gfc_error ("Character '%s' in string at %C is not representable "
1092 "in character kind %d", gfc_print_wide_char (c), kind);
1093 return MATCH_ERROR;
1094 }
1095
1096 *p++ = c;
1097 }
1098
1099 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1100 gfc_option.warn_ampersand = warn_ampersand;
1101
1102 next_string_char (delimiter, &ret);
1103 if (ret != -1)
1104 gfc_internal_error ("match_string_constant(): Delimiter not found");
1105
1106 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1107 e->expr_type = EXPR_SUBSTRING;
1108
1109 *result = e;
1110
1111 return MATCH_YES;
1112
1113no_match:
1114 gfc_current_locus = old_locus;
1115 return MATCH_NO;
1116}
1117
1118
1119/* Match a .true. or .false. Returns 1 if a .true. was found,
1120 0 if a .false. was found, and -1 otherwise. */
1121static int
1122match_logical_constant_string (void)
1123{
1124 locus orig_loc = gfc_current_locus;
1125
1126 gfc_gobble_whitespace ();
1127 if (gfc_next_ascii_char () == '.')
1128 {
1129 char ch = gfc_next_ascii_char ();
1130 if (ch == 'f')
1131 {
1132 if (gfc_next_ascii_char () == 'a'
1133 && gfc_next_ascii_char () == 'l'
1134 && gfc_next_ascii_char () == 's'
1135 && gfc_next_ascii_char () == 'e'
1136 && gfc_next_ascii_char () == '.')
1137 /* Matched ".false.". */
1138 return 0;
1139 }
1140 else if (ch == 't')
1141 {
1142 if (gfc_next_ascii_char () == 'r'
1143 && gfc_next_ascii_char () == 'u'
1144 && gfc_next_ascii_char () == 'e'
1145 && gfc_next_ascii_char () == '.')
1146 /* Matched ".true.". */
1147 return 1;
1148 }
1149 }
1150 gfc_current_locus = orig_loc;
1151 return -1;
1152}
1153
1154/* Match a .true. or .false. */
1155
1156static match
1157match_logical_constant (gfc_expr **result)
1158{
1159 gfc_expr *e;
1160 int i, kind, is_iso_c;
1161
1162 i = match_logical_constant_string ();
1163 if (i == -1)
1164 return MATCH_NO;
1165
1166 kind = get_kind (&is_iso_c);
1167 if (kind == -1)
1168 return MATCH_ERROR;
1169 if (kind == -2)
1170 kind = gfc_default_logical_kind;
1171
1172 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1173 {
1174 gfc_error ("Bad kind for logical constant at %C");
1175 return MATCH_ERROR;
1176 }
1177
1178 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1179 e->ts.is_c_interop = is_iso_c;
1180
1181 *result = e;
1182 return MATCH_YES;
1183}
1184
1185
1186/* Match a real or imaginary part of a complex constant that is a
1187 symbolic constant. */
1188
1189static match
1190match_sym_complex_part (gfc_expr **result)
1191{
1192 char name[GFC_MAX_SYMBOL_LEN + 1];
1193 gfc_symbol *sym;
1194 gfc_expr *e;
1195 match m;
1196
1197 m = gfc_match_name (name);
1198 if (m != MATCH_YES)
1199 return m;
1200
1201 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1202 return MATCH_NO;
1203
1204 if (sym->attr.flavor != FL_PARAMETER)
1205 {
1206 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1207 return MATCH_ERROR;
1208 }
1209
1210 if (!gfc_numeric_ts (&sym->value->ts))
1211 {
1212 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1213 return MATCH_ERROR;
1214 }
1215
1216 if (sym->value->rank != 0)
1217 {
1218 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1219 return MATCH_ERROR;
1220 }
1221
1222 if (gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1223 "complex constant at %C") == FAILURE)
1224 return MATCH_ERROR;
1225
1226 switch (sym->value->ts.type)
1227 {
1228 case BT_REAL:
1229 e = gfc_copy_expr (sym->value);
1230 break;
1231
1232 case BT_COMPLEX:
1233 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1234 if (e == NULL)
1235 goto error;
1236 break;
1237
1238 case BT_INTEGER:
1239 e = gfc_int2real (sym->value, gfc_default_real_kind);
1240 if (e == NULL)
1241 goto error;
1242 break;
1243
1244 default:
1245 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1246 }
1247
1248 *result = e; /* e is a scalar, real, constant expression. */
1249 return MATCH_YES;
1250
1251error:
1252 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1253 return MATCH_ERROR;
1254}
1255
1256
1257/* Match a real or imaginary part of a complex number. */
1258
1259static match
1260match_complex_part (gfc_expr **result)
1261{
1262 match m;
1263
1264 m = match_sym_complex_part (result);
1265 if (m != MATCH_NO)
1266 return m;
1267
1268 m = match_real_constant (result, 1);
1269 if (m != MATCH_NO)
1270 return m;
1271
1272 return match_integer_constant (result, 1);
1273}
1274
1275
1276/* Try to match a complex constant. */
1277
1278static match
1279match_complex_constant (gfc_expr **result)
1280{
1281 gfc_expr *e, *real, *imag;
1282 gfc_error_buf old_error;
1283 gfc_typespec target;
1284 locus old_loc;
1285 int kind;
1286 match m;
1287
1288 old_loc = gfc_current_locus;
1289 real = imag = e = NULL;
1290
1291 m = gfc_match_char ('(');
1292 if (m != MATCH_YES)
1293 return m;
1294
1295 gfc_push_error (&old_error);
1296
1297 m = match_complex_part (&real);
1298 if (m == MATCH_NO)
1299 {
1300 gfc_free_error (&old_error);
1301 goto cleanup;
1302 }
1303
1304 if (gfc_match_char (',') == MATCH_NO)
1305 {
1306 gfc_pop_error (&old_error);
1307 m = MATCH_NO;
1308 goto cleanup;
1309 }
1310
1311 /* If m is error, then something was wrong with the real part and we
1312 assume we have a complex constant because we've seen the ','. An
1313 ambiguous case here is the start of an iterator list of some
1314 sort. These sort of lists are matched prior to coming here. */
1315
1316 if (m == MATCH_ERROR)
1317 {
1318 gfc_free_error (&old_error);
1319 goto cleanup;
1320 }
1321 gfc_pop_error (&old_error);
1322
1323 m = match_complex_part (&imag);
1324 if (m == MATCH_NO)
1325 goto syntax;
1326 if (m == MATCH_ERROR)
1327 goto cleanup;
1328
1329 m = gfc_match_char (')');
1330 if (m == MATCH_NO)
1331 {
1332 /* Give the matcher for implied do-loops a chance to run. This
1333 yields a much saner error message for (/ (i, 4=i, 6) /). */
1334 if (gfc_peek_ascii_char () == '=')
1335 {
1336 m = MATCH_ERROR;
1337 goto cleanup;
1338 }
1339 else
1340 goto syntax;
1341 }
1342
1343 if (m == MATCH_ERROR)
1344 goto cleanup;
1345
1346 /* Decide on the kind of this complex number. */
1347 if (real->ts.type == BT_REAL)
1348 {
1349 if (imag->ts.type == BT_REAL)
1350 kind = gfc_kind_max (real, imag);
1351 else
1352 kind = real->ts.kind;
1353 }
1354 else
1355 {
1356 if (imag->ts.type == BT_REAL)
1357 kind = imag->ts.kind;
1358 else
1359 kind = gfc_default_real_kind;
1360 }
1361 gfc_clear_ts (&target);
1362 target.type = BT_REAL;
1363 target.kind = kind;
1364
1365 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1366 gfc_convert_type (real, &target, 2);
1367 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1368 gfc_convert_type (imag, &target, 2);
1369
1370 e = gfc_convert_complex (real, imag, kind);
1371 e->where = gfc_current_locus;
1372
1373 gfc_free_expr (real);
1374 gfc_free_expr (imag);
1375
1376 *result = e;
1377 return MATCH_YES;
1378
1379syntax:
1380 gfc_error ("Syntax error in COMPLEX constant at %C");
1381 m = MATCH_ERROR;
1382
1383cleanup:
1384 gfc_free_expr (e);
1385 gfc_free_expr (real);
1386 gfc_free_expr (imag);
1387 gfc_current_locus = old_loc;
1388
1389 return m;
1390}
1391
1392
1393/* Match constants in any of several forms. Returns nonzero for a
1394 match, zero for no match. */
1395
1396match
1397gfc_match_literal_constant (gfc_expr **result, int signflag)
1398{
1399 match m;
1400
1401 m = match_complex_constant (result);
1402 if (m != MATCH_NO)
1403 return m;
1404
1405 m = match_string_constant (result);
1406 if (m != MATCH_NO)
1407 return m;
1408
1409 m = match_boz_constant (result);
1410 if (m != MATCH_NO)
1411 return m;
1412
1413 m = match_real_constant (result, signflag);
1414 if (m != MATCH_NO)
1415 return m;
1416
1417 m = match_hollerith_constant (result);
1418 if (m != MATCH_NO)
1419 return m;
1420
1421 m = match_integer_constant (result, signflag);
1422 if (m != MATCH_NO)
1423 return m;
1424
1425 m = match_logical_constant (result);
1426 if (m != MATCH_NO)
1427 return m;
1428
1429 return MATCH_NO;
1430}
1431
1432
1433/* This checks if a symbol is the return value of an encompassing function.
1434 Function nesting can be maximally two levels deep, but we may have
1435 additional local namespaces like BLOCK etc. */
1436
1437bool
1438gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1439{
1440 if (!sym->attr.function || (sym->result != sym))
1441 return false;
1442 while (ns)
1443 {
1444 if (ns->proc_name == sym)
1445 return true;
1446 ns = ns->parent;
1447 }
1448 return false;
1449}
1450
1451
1452/* Match a single actual argument value. An actual argument is
1453 usually an expression, but can also be a procedure name. If the
1454 argument is a single name, it is not always possible to tell
1455 whether the name is a dummy procedure or not. We treat these cases
1456 by creating an argument that looks like a dummy procedure and
1457 fixing things later during resolution. */
1458
1459static match
1460match_actual_arg (gfc_expr **result)
1461{
1462 char name[GFC_MAX_SYMBOL_LEN + 1];
1463 gfc_symtree *symtree;
1464 locus where, w;
1465 gfc_expr *e;
1466 char c;
1467
1468 gfc_gobble_whitespace ();
1469 where = gfc_current_locus;
1470
1471 switch (gfc_match_name (name))
1472 {
1473 case MATCH_ERROR:
1474 return MATCH_ERROR;
1475
1476 case MATCH_NO:
1477 break;
1478
1479 case MATCH_YES:
1480 w = gfc_current_locus;
1481 gfc_gobble_whitespace ();
1482 c = gfc_next_ascii_char ();
1483 gfc_current_locus = w;
1484
1485 if (c != ',' && c != ')')
1486 break;
1487
1488 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1489 break;
1490 /* Handle error elsewhere. */
1491
1492 /* Eliminate a couple of common cases where we know we don't
1493 have a function argument. */
1494 if (symtree == NULL)
1495 {
1496 gfc_get_sym_tree (name, NULL, &symtree, false);
1497 gfc_set_sym_referenced (symtree->n.sym);
1498 }
1499 else
1500 {
1501 gfc_symbol *sym;
1502
1503 sym = symtree->n.sym;
1504 gfc_set_sym_referenced (sym);
1505 if (sym->attr.flavor != FL_PROCEDURE
1506 && sym->attr.flavor != FL_UNKNOWN)
1507 break;
1508
1509 if (sym->attr.in_common && !sym->attr.proc_pointer)
1510 {
1511 if (gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1512 &sym->declared_at) == FAILURE)
1513 return MATCH_ERROR;
1514 break;
1515 }
1516
1517 /* If the symbol is a function with itself as the result and
1518 is being defined, then we have a variable. */
1519 if (sym->attr.function && sym->result == sym)
1520 {
1521 if (gfc_is_function_return_value (sym, gfc_current_ns))
1522 break;
1523
1524 if (sym->attr.entry
1525 && (sym->ns == gfc_current_ns
1526 || sym->ns == gfc_current_ns->parent))
1527 {
1528 gfc_entry_list *el = NULL;
1529
1530 for (el = sym->ns->entries; el; el = el->next)
1531 if (sym == el->sym)
1532 break;
1533
1534 if (el)
1535 break;
1536 }
1537 }
1538 }
1539
1540 e = gfc_get_expr (); /* Leave it unknown for now */
1541 e->symtree = symtree;
1542 e->expr_type = EXPR_VARIABLE;
1543 e->ts.type = BT_PROCEDURE;
1544 e->where = where;
1545
1546 *result = e;
1547 return MATCH_YES;
1548 }
1549
1550 gfc_current_locus = where;
1551 return gfc_match_expr (result);
1552}
1553
1554
1555/* Match a keyword argument. */
1556
1557static match
1558match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1559{
1560 char name[GFC_MAX_SYMBOL_LEN + 1];
1561 gfc_actual_arglist *a;
1562 locus name_locus;
1563 match m;
1564
1565 name_locus = gfc_current_locus;
1566 m = gfc_match_name (name);
1567
1568 if (m != MATCH_YES)
1569 goto cleanup;
1570 if (gfc_match_char ('=') != MATCH_YES)
1571 {
1572 m = MATCH_NO;
1573 goto cleanup;
1574 }
1575
1576 m = match_actual_arg (&actual->expr);
1577 if (m != MATCH_YES)
1578 goto cleanup;
1579
1580 /* Make sure this name has not appeared yet. */
1581
1582 if (name[0] != '\0')
1583 {
1584 for (a = base; a; a = a->next)
1585 if (a->name != NULL && strcmp (a->name, name) == 0)
1586 {
1587 gfc_error ("Keyword '%s' at %C has already appeared in the "
1588 "current argument list", name);
1589 return MATCH_ERROR;
1590 }
1591 }
1592
1593 actual->name = gfc_get_string (name);
1594 return MATCH_YES;
1595
1596cleanup:
1597 gfc_current_locus = name_locus;
1598 return m;
1599}
1600
1601
1602/* Match an argument list function, such as %VAL. */
1603
1604static match
1605match_arg_list_function (gfc_actual_arglist *result)
1606{
1607 char name[GFC_MAX_SYMBOL_LEN + 1];
1608 locus old_locus;
1609 match m;
1610
1611 old_locus = gfc_current_locus;
1612
1613 if (gfc_match_char ('%') != MATCH_YES)
1614 {
1615 m = MATCH_NO;
1616 goto cleanup;
1617 }
1618
1619 m = gfc_match ("%n (", name);
1620 if (m != MATCH_YES)
1621 goto cleanup;
1622
1623 if (name[0] != '\0')
1624 {
1625 switch (name[0])
1626 {
1627 case 'l':
1628 if (strncmp (name, "loc", 3) == 0)
1629 {
1630 result->name = "%LOC";
1631 break;
1632 }
1633 case 'r':
1634 if (strncmp (name, "ref", 3) == 0)
1635 {
1636 result->name = "%REF";
1637 break;
1638 }
1639 case 'v':
1640 if (strncmp (name, "val", 3) == 0)
1641 {
1642 result->name = "%VAL";
1643 break;
1644 }
1645 default:
1646 m = MATCH_ERROR;
1647 goto cleanup;
1648 }
1649 }
1650
1651 if (gfc_notify_std (GFC_STD_GNU, "argument list "
1652 "function at %C") == FAILURE)
1653 {
1654 m = MATCH_ERROR;
1655 goto cleanup;
1656 }
1657
1658 m = match_actual_arg (&result->expr);
1659 if (m != MATCH_YES)
1660 goto cleanup;
1661
1662 if (gfc_match_char (')') != MATCH_YES)
1663 {
1664 m = MATCH_NO;
1665 goto cleanup;
1666 }
1667
1668 return MATCH_YES;
1669
1670cleanup:
1671 gfc_current_locus = old_locus;
1672 return m;
1673}
1674
1675
1676/* Matches an actual argument list of a function or subroutine, from
1677 the opening parenthesis to the closing parenthesis. The argument
1678 list is assumed to allow keyword arguments because we don't know if
1679 the symbol associated with the procedure has an implicit interface
1680 or not. We make sure keywords are unique. If sub_flag is set,
1681 we're matching the argument list of a subroutine. */
1682
1683match
1684gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1685{
1686 gfc_actual_arglist *head, *tail;
1687 int seen_keyword;
1688 gfc_st_label *label;
1689 locus old_loc;
1690 match m;
1691
1692 *argp = tail = NULL;
1693 old_loc = gfc_current_locus;
1694
1695 seen_keyword = 0;
1696
1697 if (gfc_match_char ('(') == MATCH_NO)
1698 return (sub_flag) ? MATCH_YES : MATCH_NO;
1699
1700 if (gfc_match_char (')') == MATCH_YES)
1701 return MATCH_YES;
1702 head = NULL;
1703
1704 matching_actual_arglist++;
1705
1706 for (;;)
1707 {
1708 if (head == NULL)
1709 head = tail = gfc_get_actual_arglist ();
1710 else
1711 {
1712 tail->next = gfc_get_actual_arglist ();
1713 tail = tail->next;
1714 }
1715
1716 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1717 {
1718 m = gfc_match_st_label (&label);
1719 if (m == MATCH_NO)
1720 gfc_error ("Expected alternate return label at %C");
1721 if (m != MATCH_YES)
1722 goto cleanup;
1723
1724 tail->label = label;
1725 goto next;
1726 }
1727
1728 /* After the first keyword argument is seen, the following
1729 arguments must also have keywords. */
1730 if (seen_keyword)
1731 {
1732 m = match_keyword_arg (tail, head);
1733
1734 if (m == MATCH_ERROR)
1735 goto cleanup;
1736 if (m == MATCH_NO)
1737 {
1738 gfc_error ("Missing keyword name in actual argument list at %C");
1739 goto cleanup;
1740 }
1741
1742 }
1743 else
1744 {
1745 /* Try an argument list function, like %VAL. */
1746 m = match_arg_list_function (tail);
1747 if (m == MATCH_ERROR)
1748 goto cleanup;
1749
1750 /* See if we have the first keyword argument. */
1751 if (m == MATCH_NO)
1752 {
1753 m = match_keyword_arg (tail, head);
1754 if (m == MATCH_YES)
1755 seen_keyword = 1;
1756 if (m == MATCH_ERROR)
1757 goto cleanup;
1758 }
1759
1760 if (m == MATCH_NO)
1761 {
1762 /* Try for a non-keyword argument. */
1763 m = match_actual_arg (&tail->expr);
1764 if (m == MATCH_ERROR)
1765 goto cleanup;
1766 if (m == MATCH_NO)
1767 goto syntax;
1768 }
1769 }
1770
1771
1772 next:
1773 if (gfc_match_char (')') == MATCH_YES)
1774 break;
1775 if (gfc_match_char (',') != MATCH_YES)
1776 goto syntax;
1777 }
1778
1779 *argp = head;
1780 matching_actual_arglist--;
1781 return MATCH_YES;
1782
1783syntax:
1784 gfc_error ("Syntax error in argument list at %C");
1785
1786cleanup:
1787 gfc_free_actual_arglist (head);
1788 gfc_current_locus = old_loc;
1789 matching_actual_arglist--;
1790 return MATCH_ERROR;
1791}
1792
1793
1794/* Used by gfc_match_varspec() to extend the reference list by one
1795 element. */
1796
1797static gfc_ref *
1798extend_ref (gfc_expr *primary, gfc_ref *tail)
1799{
1800 if (primary->ref == NULL)
1801 primary->ref = tail = gfc_get_ref ();
1802 else
1803 {
1804 if (tail == NULL)
1805 gfc_internal_error ("extend_ref(): Bad tail");
1806 tail->next = gfc_get_ref ();
1807 tail = tail->next;
1808 }
1809
1810 return tail;
1811}
1812
1813
1814/* Match any additional specifications associated with the current
1815 variable like member references or substrings. If equiv_flag is
1816 set we only match stuff that is allowed inside an EQUIVALENCE
1817 statement. sub_flag tells whether we expect a type-bound procedure found
1818 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1819 components, 'ppc_arg' determines whether the PPC may be called (with an
1820 argument list), or whether it may just be referred to as a pointer. */
1821
1822match
1823gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1824 bool ppc_arg)
1825{
1826 char name[GFC_MAX_SYMBOL_LEN + 1];
1827 gfc_ref *substring, *tail;
1828 gfc_component *component;
1829 gfc_symbol *sym = primary->symtree->n.sym;
1830 match m;
1831 bool unknown;
1832
1833 tail = NULL;
1834
1835 gfc_gobble_whitespace ();
1836
1837 if (gfc_peek_ascii_char () == '[')
1838 {
1839 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1840 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1841 && CLASS_DATA (sym)->attr.dimension))
1842 {
1843 gfc_error ("Array section designator, e.g. '(:)', is required "
1844 "besides the coarray designator '[...]' at %C");
1845 return MATCH_ERROR;
1846 }
1847 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1848 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1849 && !CLASS_DATA (sym)->attr.codimension))
1850 {
1851 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1852 sym->name);
1853 return MATCH_ERROR;
1854 }
1855 }
1856
1857 /* For associate names, we may not yet know whether they are arrays or not.
1858 Thus if we have one and parentheses follow, we have to assume that it
1859 actually is one for now. The final decision will be made at
1860 resolution time, of course. */
1861 if (sym->assoc && gfc_peek_ascii_char () == '(')
1862 sym->attr.dimension = 1;
1863
1864 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1865 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1866 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1867 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
1868 && !(gfc_matching_procptr_assignment
1869 && sym->attr.flavor == FL_PROCEDURE))
1870 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1871 && (CLASS_DATA (sym)->attr.dimension
1872 || CLASS_DATA (sym)->attr.codimension)))
1873 {
1874 gfc_array_spec *as;
1875
1876 tail = extend_ref (primary, tail);
1877 tail->type = REF_ARRAY;
1878
1879 /* In EQUIVALENCE, we don't know yet whether we are seeing
1880 an array, character variable or array of character
1881 variables. We'll leave the decision till resolve time. */
1882
1883 if (equiv_flag)
1884 as = NULL;
1885 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1886 as = CLASS_DATA (sym)->as;
1887 else
1888 as = sym->as;
1889
1890 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1891 as ? as->corank : 0);
1892 if (m != MATCH_YES)
1893 return m;
1894
1895 gfc_gobble_whitespace ();
1896 if (equiv_flag && gfc_peek_ascii_char () == '(')
1897 {
1898 tail = extend_ref (primary, tail);
1899 tail->type = REF_ARRAY;
1900
1901 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1902 if (m != MATCH_YES)
1903 return m;
1904 }
1905 }
1906
1907 primary->ts = sym->ts;
1908
1909 if (equiv_flag)
1910 return MATCH_YES;
1911
1912 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
1913 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1914 gfc_set_default_type (sym, 0, sym->ns);
1915
1916 if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES)
1917 {
1918 gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name);
1919 return MATCH_ERROR;
1920 }
1921 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1922 && gfc_match_char ('%') == MATCH_YES)
1923 {
1924 gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C",
1925 sym->name);
1926 return MATCH_ERROR;
1927 }
1928
1929 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1930 || gfc_match_char ('%') != MATCH_YES)
1931 goto check_substring;
1932
1933 sym = sym->ts.u.derived;
1934
1935 for (;;)
1936 {
1937 gfc_try t;
1938 gfc_symtree *tbp;
1939
1940 m = gfc_match_name (name);
1941 if (m == MATCH_NO)
1942 gfc_error ("Expected structure component name at %C");
1943 if (m != MATCH_YES)
1944 return MATCH_ERROR;
1945
1946 if (sym->f2k_derived)
1947 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1948 else
1949 tbp = NULL;
1950
1951 if (tbp)
1952 {
1953 gfc_symbol* tbp_sym;
1954
1955 if (t == FAILURE)
1956 return MATCH_ERROR;
1957
1958 gcc_assert (!tail || !tail->next);
1959 gcc_assert (primary->expr_type == EXPR_VARIABLE
1960 || (primary->expr_type == EXPR_STRUCTURE
1961 && primary->symtree && primary->symtree->n.sym
1962 && primary->symtree->n.sym->attr.flavor));
1963
1964 if (tbp->n.tb->is_generic)
1965 tbp_sym = NULL;
1966 else
1967 tbp_sym = tbp->n.tb->u.specific->n.sym;
1968
1969 primary->expr_type = EXPR_COMPCALL;
1970 primary->value.compcall.tbp = tbp->n.tb;
1971 primary->value.compcall.name = tbp->name;
1972 primary->value.compcall.ignore_pass = 0;
1973 primary->value.compcall.assign = 0;
1974 primary->value.compcall.base_object = NULL;
1975 gcc_assert (primary->symtree->n.sym->attr.referenced);
1976 if (tbp_sym)
1977 primary->ts = tbp_sym->ts;
1978
1979 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
1980 &primary->value.compcall.actual);
1981 if (m == MATCH_ERROR)
1982 return MATCH_ERROR;
1983 if (m == MATCH_NO)
1984 {
1985 if (sub_flag)
1986 primary->value.compcall.actual = NULL;
1987 else
1988 {
1989 gfc_error ("Expected argument list at %C");
1990 return MATCH_ERROR;
1991 }
1992 }
1993
1994 break;
1995 }
1996
1997 component = gfc_find_component (sym, name, false, false);
1998 if (component == NULL)
1999 return MATCH_ERROR;
2000
2001 tail = extend_ref (primary, tail);
2002 tail->type = REF_COMPONENT;
2003
2004 tail->u.c.component = component;
2005 tail->u.c.sym = sym;
2006
2007 primary->ts = component->ts;
2008
2009 if (component->attr.proc_pointer && ppc_arg)
2010 {
2011 /* Procedure pointer component call: Look for argument list. */
2012 m = gfc_match_actual_arglist (sub_flag,
2013 &primary->value.compcall.actual);
2014 if (m == MATCH_ERROR)
2015 return MATCH_ERROR;
2016
2017 if (m == MATCH_NO && !gfc_matching_ptr_assignment
2018 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
2019 {
2020 gfc_error ("Procedure pointer component '%s' requires an "
2021 "argument list at %C", component->name);
2022 return MATCH_ERROR;
2023 }
2024
2025 if (m == MATCH_YES)
2026 primary->expr_type = EXPR_PPC;
2027
2028 break;
2029 }
2030
2031 if (component->as != NULL && !component->attr.proc_pointer)
2032 {
2033 tail = extend_ref (primary, tail);
2034 tail->type = REF_ARRAY;
2035
2036 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2037 component->as->corank);
2038 if (m != MATCH_YES)
2039 return m;
2040 }
2041 else if (component->ts.type == BT_CLASS
2042 && CLASS_DATA (component)->as != NULL
2043 && !component->attr.proc_pointer)
2044 {
2045 tail = extend_ref (primary, tail);
2046 tail->type = REF_ARRAY;
2047
2048 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2049 equiv_flag,
2050 CLASS_DATA (component)->as->corank);
2051 if (m != MATCH_YES)
2052 return m;
2053 }
2054
2055 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2056 || gfc_match_char ('%') != MATCH_YES)
2057 break;
2058
2059 sym = component->ts.u.derived;
2060 }
2061
2062check_substring:
2063 unknown = false;
2064 if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED)
2065 {
2066 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2067 {
2068 gfc_set_default_type (sym, 0, sym->ns);
2069 primary->ts = sym->ts;
2070 unknown = true;
2071 }
2072 }
2073
2074 if (primary->ts.type == BT_CHARACTER)
2075 {
2076 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring))
2077 {
2078 case MATCH_YES:
2079 if (tail == NULL)
2080 primary->ref = substring;
2081 else
2082 tail->next = substring;
2083
2084 if (primary->expr_type == EXPR_CONSTANT)
2085 primary->expr_type = EXPR_SUBSTRING;
2086
2087 if (substring)
2088 primary->ts.u.cl = NULL;
2089
2090 break;
2091
2092 case MATCH_NO:
2093 if (unknown)
2094 {
2095 gfc_clear_ts (&primary->ts);
2096 gfc_clear_ts (&sym->ts);
2097 }
2098 break;
2099
2100 case MATCH_ERROR:
2101 return MATCH_ERROR;
2102 }
2103 }
2104
2105 /* F2008, C727. */
2106 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2107 {
2108 gfc_error ("Coindexed procedure-pointer component at %C");
2109 return MATCH_ERROR;
2110 }
2111
2112 return MATCH_YES;
2113}
2114
2115
2116/* Given an expression that is a variable, figure out what the
2117 ultimate variable's type and attribute is, traversing the reference
2118 structures if necessary.
2119
2120 This subroutine is trickier than it looks. We start at the base
2121 symbol and store the attribute. Component references load a
2122 completely new attribute.
2123
2124 A couple of rules come into play. Subobjects of targets are always
2125 targets themselves. If we see a component that goes through a
2126 pointer, then the expression must also be a target, since the
2127 pointer is associated with something (if it isn't core will soon be
2128 dumped). If we see a full part or section of an array, the
2129 expression is also an array.
2130
2131 We can have at most one full array reference. */
2132
2133symbol_attribute
2134gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2135{
2136 int dimension, pointer, allocatable, target;
2137 symbol_attribute attr;
2138 gfc_ref *ref;
2139 gfc_symbol *sym;
2140 gfc_component *comp;
2141
2142 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2143 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2144
2145 sym = expr->symtree->n.sym;
2146 attr = sym->attr;
2147
2148 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2149 {
2150 dimension = CLASS_DATA (sym)->attr.dimension;
2151 pointer = CLASS_DATA (sym)->attr.class_pointer;
2152 allocatable = CLASS_DATA (sym)->attr.allocatable;
2153 }
2154 else
2155 {
2156 dimension = attr.dimension;
2157 pointer = attr.pointer;
2158 allocatable = attr.allocatable;
2159 }
2160
2161 target = attr.target;
2162 if (pointer || attr.proc_pointer)
2163 target = 1;
2164
2165 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2166 *ts = sym->ts;
2167
2168 for (ref = expr->ref; ref; ref = ref->next)
2169 switch (ref->type)
2170 {
2171 case REF_ARRAY:
2172
2173 switch (ref->u.ar.type)
2174 {
2175 case AR_FULL:
2176 dimension = 1;
2177 break;
2178
2179 case AR_SECTION:
2180 allocatable = pointer = 0;
2181 dimension = 1;
2182 break;
2183
2184 case AR_ELEMENT:
2185 /* Handle coarrays. */
2186 if (ref->u.ar.dimen > 0)
2187 allocatable = pointer = 0;
2188 break;
2189
2190 case AR_UNKNOWN:
2191 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2192 }
2193
2194 break;
2195
2196 case REF_COMPONENT:
2197 comp = ref->u.c.component;
2198 attr = comp->attr;
2199 if (ts != NULL)
2200 {
2201 *ts = comp->ts;
2202 /* Don't set the string length if a substring reference
2203 follows. */
2204 if (ts->type == BT_CHARACTER
2205 && ref->next && ref->next->type == REF_SUBSTRING)
2206 ts->u.cl = NULL;
2207 }
2208
2209 if (comp->ts.type == BT_CLASS)
2210 {
2211 pointer = CLASS_DATA (comp)->attr.class_pointer;
2212 allocatable = CLASS_DATA (comp)->attr.allocatable;
2213 }
2214 else
2215 {
2216 pointer = comp->attr.pointer;
2217 allocatable = comp->attr.allocatable;
2218 }
2219 if (pointer || attr.proc_pointer)
2220 target = 1;
2221
2222 break;
2223
2224 case REF_SUBSTRING:
2225 allocatable = pointer = 0;
2226 break;
2227 }
2228
2229 attr.dimension = dimension;
2230 attr.pointer = pointer;
2231 attr.allocatable = allocatable;
2232 attr.target = target;
2233 attr.save = sym->attr.save;
2234
2235 return attr;
2236}
2237
2238
2239/* Return the attribute from a general expression. */
2240
2241symbol_attribute
2242gfc_expr_attr (gfc_expr *e)
2243{
2244 symbol_attribute attr;
2245
2246 switch (e->expr_type)
2247 {
2248 case EXPR_VARIABLE:
2249 attr = gfc_variable_attr (e, NULL);
2250 break;
2251
2252 case EXPR_FUNCTION:
2253 gfc_clear_attr (&attr);
2254
2255 if (e->value.function.esym != NULL)
2256 {
2257 gfc_symbol *sym = e->value.function.esym->result;
2258 attr = sym->attr;
2259 if (sym->ts.type == BT_CLASS)
2260 {
2261 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2262 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2263 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2264 }
2265 }
2266 else
2267 attr = gfc_variable_attr (e, NULL);
2268
2269 /* TODO: NULL() returns pointers. May have to take care of this
2270 here. */
2271
2272 break;
2273
2274 default:
2275 gfc_clear_attr (&attr);
2276 break;
2277 }
2278
2279 return attr;
2280}
2281
2282
2283/* Match a structure constructor. The initial symbol has already been
2284 seen. */
2285
2286typedef struct gfc_structure_ctor_component
2287{
2288 char* name;
2289 gfc_expr* val;
2290 locus where;
2291 struct gfc_structure_ctor_component* next;
2292}
2293gfc_structure_ctor_component;
2294
2295#define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2296
2297static void
2298gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2299{
2300 free (comp->name);
2301 gfc_free_expr (comp->val);
2302 free (comp);
2303}
2304
2305
2306/* Translate the component list into the actual constructor by sorting it in
2307 the order required; this also checks along the way that each and every
2308 component actually has an initializer and handles default initializers
2309 for components without explicit value given. */
2310static gfc_try
2311build_actual_constructor (gfc_structure_ctor_component **comp_head,
2312 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2313{
2314 gfc_structure_ctor_component *comp_iter;
2315 gfc_component *comp;
2316
2317 for (comp = sym->components; comp; comp = comp->next)
2318 {
2319 gfc_structure_ctor_component **next_ptr;
2320 gfc_expr *value = NULL;
2321
2322 /* Try to find the initializer for the current component by name. */
2323 next_ptr = comp_head;
2324 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2325 {
2326 if (!strcmp (comp_iter->name, comp->name))
2327 break;
2328 next_ptr = &comp_iter->next;
2329 }
2330
2331 /* If an extension, try building the parent derived type by building
2332 a value expression for the parent derived type and calling self. */
2333 if (!comp_iter && comp == sym->components && sym->attr.extension)
2334 {
2335 value = gfc_get_structure_constructor_expr (comp->ts.type,
2336 comp->ts.kind,
2337 &gfc_current_locus);
2338 value->ts = comp->ts;
2339
2340 if (build_actual_constructor (comp_head, &value->value.constructor,
2341 comp->ts.u.derived) == FAILURE)
2342 {
2343 gfc_free_expr (value);
2344 return FAILURE;
2345 }
2346
2347 gfc_constructor_append_expr (ctor_head, value, NULL);
2348 continue;
2349 }
2350
2351 /* If it was not found, try the default initializer if there's any;
2352 otherwise, it's an error. */
2353 if (!comp_iter)
2354 {
2355 if (comp->initializer)
2356 {
2357 if (gfc_notify_std (GFC_STD_F2003, "Structure"
2358 " constructor with missing optional arguments"
2359 " at %C") == FAILURE)
2360 return FAILURE;
2361 value = gfc_copy_expr (comp->initializer);
2362 }
2363 else
2364 {
2365 gfc_error ("No initializer for component '%s' given in the"
2366 " structure constructor at %C!", comp->name);
2367 return FAILURE;
2368 }
2369 }
2370 else
2371 value = comp_iter->val;
2372
2373 /* Add the value to the constructor chain built. */
2374 gfc_constructor_append_expr (ctor_head, value, NULL);
2375
2376 /* Remove the entry from the component list. We don't want the expression
2377 value to be free'd, so set it to NULL. */
2378 if (comp_iter)
2379 {
2380 *next_ptr = comp_iter->next;
2381 comp_iter->val = NULL;
2382 gfc_free_structure_ctor_component (comp_iter);
2383 }
2384 }
2385 return SUCCESS;
2386}
2387
2388
2389gfc_try
2390gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2391 gfc_actual_arglist **arglist,
2392 bool parent)
2393{
2394 gfc_actual_arglist *actual;
2395 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2396 gfc_constructor_base ctor_head = NULL;
2397 gfc_component *comp; /* Is set NULL when named component is first seen */
2398 const char* last_name = NULL;
2399 locus old_locus;
2400 gfc_expr *expr;
2401
2402 expr = parent ? *cexpr : e;
2403 old_locus = gfc_current_locus;
2404 if (parent)
2405 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2406 else
2407 gfc_current_locus = expr->where;
2408
2409 comp_tail = comp_head = NULL;
2410
2411 if (!parent && sym->attr.abstract)
2412 {
2413 gfc_error ("Can't construct ABSTRACT type '%s' at %L",
2414 sym->name, &expr->where);
2415 goto cleanup;
2416 }
2417
2418 comp = sym->components;
2419 actual = parent ? *arglist : expr->value.function.actual;
2420 for ( ; actual; )
2421 {
2422 gfc_component *this_comp = NULL;
2423
2424 if (!comp_head)
2425 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2426 else
2427 {
2428 comp_tail->next = gfc_get_structure_ctor_component ();
2429 comp_tail = comp_tail->next;
2430 }
2431 if (actual->name)
2432 {
2433 if (gfc_notify_std (GFC_STD_F2003, "Structure"
2434 " constructor with named arguments at %C")
2435 == FAILURE)
2436 goto cleanup;
2437
2438 comp_tail->name = xstrdup (actual->name);
2439 last_name = comp_tail->name;
2440 comp = NULL;
2441 }
2442 else
2443 {
2444 /* Components without name are not allowed after the first named
2445 component initializer! */
2446 if (!comp)
2447 {
2448 if (last_name)
2449 gfc_error ("Component initializer without name after component"
2450 " named %s at %L!", last_name,
2451 actual->expr ? &actual->expr->where
2452 : &gfc_current_locus);
2453 else
2454 gfc_error ("Too many components in structure constructor at "
2455 "%L!", actual->expr ? &actual->expr->where
2456 : &gfc_current_locus);
2457 goto cleanup;
2458 }
2459
2460 comp_tail->name = xstrdup (comp->name);
2461 }
2462
2463 /* Find the current component in the structure definition and check
2464 its access is not private. */
2465 if (comp)
2466 this_comp = gfc_find_component (sym, comp->name, false, false);
2467 else
2468 {
2469 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2470 false, false);
2471 comp = NULL; /* Reset needed! */
2472 }
2473
2474 /* Here we can check if a component name is given which does not
2475 correspond to any component of the defined structure. */
2476 if (!this_comp)
2477 goto cleanup;
2478
2479 comp_tail->val = actual->expr;
2480 if (actual->expr != NULL)
2481 comp_tail->where = actual->expr->where;
2482 actual->expr = NULL;
2483
2484 /* Check if this component is already given a value. */
2485 for (comp_iter = comp_head; comp_iter != comp_tail;
2486 comp_iter = comp_iter->next)
2487 {
2488 gcc_assert (comp_iter);
2489 if (!strcmp (comp_iter->name, comp_tail->name))
2490 {
2491 gfc_error ("Component '%s' is initialized twice in the structure"
2492 " constructor at %L!", comp_tail->name,
2493 comp_tail->val ? &comp_tail->where
2494 : &gfc_current_locus);
2495 goto cleanup;
2496 }
2497 }
2498
2499 /* F2008, R457/C725, for PURE C1283. */
2500 if (this_comp->attr.pointer && comp_tail->val
2501 && gfc_is_coindexed (comp_tail->val))
2502 {
2503 gfc_error ("Coindexed expression to pointer component '%s' in "
2504 "structure constructor at %L!", comp_tail->name,
2505 &comp_tail->where);
2506 goto cleanup;
2507 }
2508
2509 /* If not explicitly a parent constructor, gather up the components
2510 and build one. */
2511 if (comp && comp == sym->components
2512 && sym->attr.extension
2513 && comp_tail->val
2514 && (comp_tail->val->ts.type != BT_DERIVED
2515 ||
2516 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2517 {
2518 gfc_try m;
2519 gfc_actual_arglist *arg_null = NULL;
2520
2521 actual->expr = comp_tail->val;
2522 comp_tail->val = NULL;
2523
2524 m = gfc_convert_to_structure_constructor (NULL,
2525 comp->ts.u.derived, &comp_tail->val,
2526 comp->ts.u.derived->attr.zero_comp
2527 ? &arg_null : &actual, true);
2528 if (m == FAILURE)
2529 goto cleanup;
2530
2531 if (comp->ts.u.derived->attr.zero_comp)
2532 {
2533 comp = comp->next;
2534 continue;
2535 }
2536 }
2537
2538 if (comp)
2539 comp = comp->next;
2540 if (parent && !comp)
2541 break;
2542
2543 actual = actual->next;
2544 }
2545
2546 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2547 goto cleanup;
2548
2549 /* No component should be left, as this should have caused an error in the
2550 loop constructing the component-list (name that does not correspond to any
2551 component in the structure definition). */
2552 if (comp_head && sym->attr.extension)
2553 {
2554 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2555 {
2556 gfc_error ("component '%s' at %L has already been set by a "
2557 "parent derived type constructor", comp_iter->name,
2558 &comp_iter->where);
2559 }
2560 goto cleanup;
2561 }
2562 else
2563 gcc_assert (!comp_head);
2564
2565 if (parent)
2566 {
2567 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2568 expr->ts.u.derived = sym;
2569 expr->value.constructor = ctor_head;
2570 *cexpr = expr;
2571 }
2572 else
2573 {
2574 expr->ts.u.derived = sym;
2575 expr->ts.kind = 0;
2576 expr->ts.type = BT_DERIVED;
2577 expr->value.constructor = ctor_head;
2578 expr->expr_type = EXPR_STRUCTURE;
2579 }
2580
2581 gfc_current_locus = old_locus;
2582 if (parent)
2583 *arglist = actual;
2584 return SUCCESS;
2585
2586 cleanup:
2587 gfc_current_locus = old_locus;
2588
2589 for (comp_iter = comp_head; comp_iter; )
2590 {
2591 gfc_structure_ctor_component *next = comp_iter->next;
2592 gfc_free_structure_ctor_component (comp_iter);
2593 comp_iter = next;
2594 }
2595 gfc_constructor_free (ctor_head);
2596
2597 return FAILURE;
2598}
2599
2600
2601match
2602gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2603{
2604 match m;
2605 gfc_expr *e;
2606 gfc_symtree *symtree;
2607
2608 gfc_get_sym_tree (sym->name, NULL, &symtree, false); /* Can't fail */
2609
2610 e = gfc_get_expr ();
2611 e->symtree = symtree;
2612 e->expr_type = EXPR_FUNCTION;
2613
2614 gcc_assert (sym->attr.flavor == FL_DERIVED
2615 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2616 e->value.function.esym = sym;
2617 e->symtree->n.sym->attr.generic = 1;
2618
2619 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2620 if (m != MATCH_YES)
2621 {
2622 gfc_free_expr (e);
2623 return m;
2624 }
2625
2626 if (gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false)
2627 != SUCCESS)
2628 {
2629 gfc_free_expr (e);
2630 return MATCH_ERROR;
2631 }
2632
2633 *result = e;
2634 return MATCH_YES;
2635}
2636
2637
2638/* If the symbol is an implicit do loop index and implicitly typed,
2639 it should not be host associated. Provide a symtree from the
2640 current namespace. */
2641static match
2642check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2643{
2644 if ((*sym)->attr.flavor == FL_VARIABLE
2645 && (*sym)->ns != gfc_current_ns
2646 && (*sym)->attr.implied_index
2647 && (*sym)->attr.implicit_type
2648 && !(*sym)->attr.use_assoc)
2649 {
2650 int i;
2651 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2652 if (i)
2653 return MATCH_ERROR;
2654 *sym = (*st)->n.sym;
2655 }
2656 return MATCH_YES;
2657}
2658
2659
2660/* Procedure pointer as function result: Replace the function symbol by the
2661 auto-generated hidden result variable named "ppr@". */
2662
2663static gfc_try
2664replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2665{
2666 /* Check for procedure pointer result variable. */
2667 if ((*sym)->attr.function && !(*sym)->attr.external
2668 && (*sym)->result && (*sym)->result != *sym
2669 && (*sym)->result->attr.proc_pointer
2670 && (*sym) == gfc_current_ns->proc_name
2671 && (*sym) == (*sym)->result->ns->proc_name
2672 && strcmp ("ppr@", (*sym)->result->name) == 0)
2673 {
2674 /* Automatic replacement with "hidden" result variable. */
2675 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2676 *sym = (*sym)->result;
2677 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2678 return SUCCESS;
2679 }
2680 return FAILURE;
2681}
2682
2683
2684/* Matches a variable name followed by anything that might follow it--
2685 array reference, argument list of a function, etc. */
2686
2687match
2688gfc_match_rvalue (gfc_expr **result)
2689{
2690 gfc_actual_arglist *actual_arglist;
2691 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2692 gfc_state_data *st;
2693 gfc_symbol *sym;
2694 gfc_symtree *symtree;
2695 locus where, old_loc;
2696 gfc_expr *e;
2697 match m, m2;
2698 int i;
2699 gfc_typespec *ts;
2700 bool implicit_char;
2701 gfc_ref *ref;
2702
2703 m = gfc_match_name (name);
2704 if (m != MATCH_YES)
2705 return m;
2706
2707 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2708 && !gfc_current_ns->has_import_set)
2709 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2710 else
2711 i = gfc_get_ha_sym_tree (name, &symtree);
2712
2713 if (i)
2714 return MATCH_ERROR;
2715
2716 sym = symtree->n.sym;
2717 e = NULL;
2718 where = gfc_current_locus;
2719
2720 replace_hidden_procptr_result (&sym, &symtree);
2721
2722 /* If this is an implicit do loop index and implicitly typed,
2723 it should not be host associated. */
2724 m = check_for_implicit_index (&symtree, &sym);
2725 if (m != MATCH_YES)
2726 return m;
2727
2728 gfc_set_sym_referenced (sym);
2729 sym->attr.implied_index = 0;
2730
2731 if (sym->attr.function && sym->result == sym)
2732 {
2733 /* See if this is a directly recursive function call. */
2734 gfc_gobble_whitespace ();
2735 if (sym->attr.recursive
2736 && gfc_peek_ascii_char () == '('
2737 && gfc_current_ns->proc_name == sym
2738 && !sym->attr.dimension)
2739 {
2740 gfc_error ("'%s' at %C is the name of a recursive function "
2741 "and so refers to the result variable. Use an "
2742 "explicit RESULT variable for direct recursion "
2743 "(12.5.2.1)", sym->name);
2744 return MATCH_ERROR;
2745 }
2746
2747 if (gfc_is_function_return_value (sym, gfc_current_ns))
2748 goto variable;
2749
2750 if (sym->attr.entry
2751 && (sym->ns == gfc_current_ns
2752 || sym->ns == gfc_current_ns->parent))
2753 {
2754 gfc_entry_list *el = NULL;
2755
2756 for (el = sym->ns->entries; el; el = el->next)
2757 if (sym == el->sym)
2758 goto variable;
2759 }
2760 }
2761
2762 if (gfc_matching_procptr_assignment)
2763 goto procptr0;
2764
2765 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2766 goto function0;
2767
2768 if (sym->attr.generic)
2769 goto generic_function;
2770
2771 switch (sym->attr.flavor)
2772 {
2773 case FL_VARIABLE:
2774 variable:
2775 e = gfc_get_expr ();
2776
2777 e->expr_type = EXPR_VARIABLE;
2778 e->symtree = symtree;
2779
2780 m = gfc_match_varspec (e, 0, false, true);
2781 break;
2782
2783 case FL_PARAMETER:
2784 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2785 end up here. Unfortunately, sym->value->expr_type is set to
2786 EXPR_CONSTANT, and so the if () branch would be followed without
2787 the !sym->as check. */
2788 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2789 e = gfc_copy_expr (sym->value);
2790 else
2791 {
2792 e = gfc_get_expr ();
2793 e->expr_type = EXPR_VARIABLE;
2794 }
2795
2796 e->symtree = symtree;
2797 m = gfc_match_varspec (e, 0, false, true);
2798
2799 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2800 break;
2801
2802 /* Variable array references to derived type parameters cause
2803 all sorts of headaches in simplification. Treating such
2804 expressions as variable works just fine for all array
2805 references. */
2806 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2807 {
2808 for (ref = e->ref; ref; ref = ref->next)
2809 if (ref->type == REF_ARRAY)
2810 break;
2811
2812 if (ref == NULL || ref->u.ar.type == AR_FULL)
2813 break;
2814
2815 ref = e->ref;
2816 e->ref = NULL;
2817 gfc_free_expr (e);
2818 e = gfc_get_expr ();
2819 e->expr_type = EXPR_VARIABLE;
2820 e->symtree = symtree;
2821 e->ref = ref;
2822 }
2823
2824 break;
2825
2826 case FL_DERIVED:
2827 sym = gfc_use_derived (sym);
2828 if (sym == NULL)
2829 m = MATCH_ERROR;
2830 else
2831 goto generic_function;
2832 break;
2833
2834 /* If we're here, then the name is known to be the name of a
2835 procedure, yet it is not sure to be the name of a function. */
2836 case FL_PROCEDURE:
2837
2838 /* Procedure Pointer Assignments. */
2839 procptr0:
2840 if (gfc_matching_procptr_assignment)
2841 {
2842 gfc_gobble_whitespace ();
2843 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2844 /* Parse functions returning a procptr. */
2845 goto function0;
2846
2847 e = gfc_get_expr ();
2848 e->expr_type = EXPR_VARIABLE;
2849 e->symtree = symtree;
2850 m = gfc_match_varspec (e, 0, false, true);
2851 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
2852 && sym->ts.type == BT_UNKNOWN
2853 && gfc_add_flavor (&sym->attr, FL_PROCEDURE,
2854 sym->name, NULL) == FAILURE)
2855 {
2856 m = MATCH_ERROR;
2857 break;
2858 }
2859 break;
2860 }
2861
2862 if (sym->attr.subroutine)
2863 {
2864 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2865 sym->name);
2866 m = MATCH_ERROR;
2867 break;
2868 }
2869
2870 /* At this point, the name has to be a non-statement function.
2871 If the name is the same as the current function being
2872 compiled, then we have a variable reference (to the function
2873 result) if the name is non-recursive. */
2874
2875 st = gfc_enclosing_unit (NULL);
2876
2877 if (st != NULL && st->state == COMP_FUNCTION
2878 && st->sym == sym
2879 && !sym->attr.recursive)
2880 {
2881 e = gfc_get_expr ();
2882 e->symtree = symtree;
2883 e->expr_type = EXPR_VARIABLE;
2884
2885 m = gfc_match_varspec (e, 0, false, true);
2886 break;
2887 }
2888
2889 /* Match a function reference. */
2890 function0:
2891 m = gfc_match_actual_arglist (0, &actual_arglist);
2892 if (m == MATCH_NO)
2893 {
2894 if (sym->attr.proc == PROC_ST_FUNCTION)
2895 gfc_error ("Statement function '%s' requires argument list at %C",
2896 sym->name);
2897 else
2898 gfc_error ("Function '%s' requires an argument list at %C",
2899 sym->name);
2900
2901 m = MATCH_ERROR;
2902 break;
2903 }
2904
2905 if (m != MATCH_YES)
2906 {
2907 m = MATCH_ERROR;
2908 break;
2909 }
2910
2911 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2912 sym = symtree->n.sym;
2913
2914 replace_hidden_procptr_result (&sym, &symtree);
2915
2916 e = gfc_get_expr ();
2917 e->symtree = symtree;
2918 e->expr_type = EXPR_FUNCTION;
2919 e->value.function.actual = actual_arglist;
2920 e->where = gfc_current_locus;
2921
2922 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2923 && CLASS_DATA (sym)->as)
2924 e->rank = CLASS_DATA (sym)->as->rank;
2925 else if (sym->as != NULL)
2926 e->rank = sym->as->rank;
2927
2928 if (!sym->attr.function
2929 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2930 {
2931 m = MATCH_ERROR;
2932 break;
2933 }
2934
2935 /* Check here for the existence of at least one argument for the
2936 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2937 argument(s) given will be checked in gfc_iso_c_func_interface,
2938 during resolution of the function call. */
2939 if (sym->attr.is_iso_c == 1
2940 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2941 && (sym->intmod_sym_id == ISOCBINDING_LOC
2942 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2943 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2944 {
2945 /* make sure we were given a param */
2946 if (actual_arglist == NULL)
2947 {
2948 gfc_error ("Missing argument to '%s' at %C", sym->name);
2949 m = MATCH_ERROR;
2950 break;
2951 }
2952 }
2953
2954 if (sym->result == NULL)
2955 sym->result = sym;
2956
2957 m = MATCH_YES;
2958 break;
2959
2960 case FL_UNKNOWN:
2961
2962 /* Special case for derived type variables that get their types
2963 via an IMPLICIT statement. This can't wait for the
2964 resolution phase. */
2965
2966 if (gfc_peek_ascii_char () == '%'
2967 && sym->ts.type == BT_UNKNOWN
2968 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2969 gfc_set_default_type (sym, 0, sym->ns);
2970
2971 /* If the symbol has a (co)dimension attribute, the expression is a
2972 variable. */
2973
2974 if (sym->attr.dimension || sym->attr.codimension)
2975 {
2976 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2977 sym->name, NULL) == FAILURE)
2978 {
2979 m = MATCH_ERROR;
2980 break;
2981 }
2982
2983 e = gfc_get_expr ();
2984 e->symtree = symtree;
2985 e->expr_type = EXPR_VARIABLE;
2986 m = gfc_match_varspec (e, 0, false, true);
2987 break;
2988 }
2989
2990 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2991 && (CLASS_DATA (sym)->attr.dimension
2992 || CLASS_DATA (sym)->attr.codimension))
2993 {
2994 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2995 sym->name, NULL) == FAILURE)
2996 {
2997 m = MATCH_ERROR;
2998 break;
2999 }
3000
3001 e = gfc_get_expr ();
3002 e->symtree = symtree;
3003 e->expr_type = EXPR_VARIABLE;
3004 m = gfc_match_varspec (e, 0, false, true);
3005 break;
3006 }
3007
3008 /* Name is not an array, so we peek to see if a '(' implies a
3009 function call or a substring reference. Otherwise the
3010 variable is just a scalar. */
3011
3012 gfc_gobble_whitespace ();
3013 if (gfc_peek_ascii_char () != '(')
3014 {
3015 /* Assume a scalar variable */
3016 e = gfc_get_expr ();
3017 e->symtree = symtree;
3018 e->expr_type = EXPR_VARIABLE;
3019
3020 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
3021 sym->name, NULL) == FAILURE)
3022 {
3023 m = MATCH_ERROR;
3024 break;
3025 }
3026
3027 /*FIXME:??? gfc_match_varspec does set this for us: */
3028 e->ts = sym->ts;
3029 m = gfc_match_varspec (e, 0, false, true);
3030 break;
3031 }
3032
3033 /* See if this is a function reference with a keyword argument
3034 as first argument. We do this because otherwise a spurious
3035 symbol would end up in the symbol table. */
3036
3037 old_loc = gfc_current_locus;
3038 m2 = gfc_match (" ( %n =", argname);
3039 gfc_current_locus = old_loc;
3040
3041 e = gfc_get_expr ();
3042 e->symtree = symtree;
3043
3044 if (m2 != MATCH_YES)
3045 {
3046 /* Try to figure out whether we're dealing with a character type.
3047 We're peeking ahead here, because we don't want to call
3048 match_substring if we're dealing with an implicitly typed
3049 non-character variable. */
3050 implicit_char = false;
3051 if (sym->ts.type == BT_UNKNOWN)
3052 {
3053 ts = gfc_get_default_type (sym->name, NULL);
3054 if (ts->type == BT_CHARACTER)
3055 implicit_char = true;
3056 }
3057
3058 /* See if this could possibly be a substring reference of a name
3059 that we're not sure is a variable yet. */
3060
3061 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3062 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
3063 {
3064
3065 e->expr_type = EXPR_VARIABLE;
3066
3067 if (sym->attr.flavor != FL_VARIABLE
3068 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
3069 sym->name, NULL) == FAILURE)
3070 {
3071 m = MATCH_ERROR;
3072 break;
3073 }
3074
3075 if (sym->ts.type == BT_UNKNOWN
3076 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
3077 {
3078 m = MATCH_ERROR;
3079 break;
3080 }
3081
3082 e->ts = sym->ts;
3083 if (e->ref)
3084 e->ts.u.cl = NULL;
3085 m = MATCH_YES;
3086 break;
3087 }
3088 }
3089
3090 /* Give up, assume we have a function. */
3091
3092 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3093 sym = symtree->n.sym;
3094 e->expr_type = EXPR_FUNCTION;
3095
3096 if (!sym->attr.function
3097 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
3098 {
3099 m = MATCH_ERROR;
3100 break;
3101 }
3102
3103 sym->result = sym;
3104
3105 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3106 if (m == MATCH_NO)
3107 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
3108
3109 if (m != MATCH_YES)
3110 {
3111 m = MATCH_ERROR;
3112 break;
3113 }
3114
3115 /* If our new function returns a character, array or structure
3116 type, it might have subsequent references. */
3117
3118 m = gfc_match_varspec (e, 0, false, true);
3119 if (m == MATCH_NO)
3120 m = MATCH_YES;
3121
3122 break;
3123
3124 generic_function:
3125 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3126
3127 e = gfc_get_expr ();
3128 e->symtree = symtree;
3129 e->expr_type = EXPR_FUNCTION;
3130
3131 if (sym->attr.flavor == FL_DERIVED)
3132 {
3133 e->value.function.esym = sym;
3134 e->symtree->n.sym->attr.generic = 1;
3135 }
3136
3137 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3138 break;
3139
3140 default:
3141 gfc_error ("Symbol at %C is not appropriate for an expression");
3142 return MATCH_ERROR;
3143 }
3144
3145 if (m == MATCH_YES)
3146 {
3147 e->where = where;
3148 *result = e;
3149 }
3150 else
3151 gfc_free_expr (e);
3152
3153 return m;
3154}
3155
3156
3157/* Match a variable, i.e. something that can be assigned to. This
3158 starts as a symbol, can be a structure component or an array
3159 reference. It can be a function if the function doesn't have a
3160 separate RESULT variable. If the symbol has not been previously
3161 seen, we assume it is a variable.
3162
3163 This function is called by two interface functions:
3164 gfc_match_variable, which has host_flag = 1, and
3165 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3166 match of the symbol to the local scope. */
3167
3168static match
3169match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3170{
3171 gfc_symbol *sym;
3172 gfc_symtree *st;
3173 gfc_expr *expr;
3174 locus where;
3175 match m;
3176
3177 /* Since nothing has any business being an lvalue in a module
3178 specification block, an interface block or a contains section,
3179 we force the changed_symbols mechanism to work by setting
3180 host_flag to 0. This prevents valid symbols that have the name
3181 of keywords, such as 'end', being turned into variables by
3182 failed matching to assignments for, e.g., END INTERFACE. */
3183 if (gfc_current_state () == COMP_MODULE
3184 || gfc_current_state () == COMP_INTERFACE
3185 || gfc_current_state () == COMP_CONTAINS)
3186 host_flag = 0;
3187
3188 where = gfc_current_locus;
3189 m = gfc_match_sym_tree (&st, host_flag);
3190 if (m != MATCH_YES)
3191 return m;
3192
3193 sym = st->n.sym;
3194
3195 /* If this is an implicit do loop index and implicitly typed,
3196 it should not be host associated. */
3197 m = check_for_implicit_index (&st, &sym);
3198 if (m != MATCH_YES)
3199 return m;
3200
3201 sym->attr.implied_index = 0;
3202
3203 gfc_set_sym_referenced (sym);
3204 switch (sym->attr.flavor)
3205 {
3206 case FL_VARIABLE:
3207 /* Everything is alright. */
3208 break;
3209
3210 case FL_UNKNOWN:
3211 {
3212 sym_flavor flavor = FL_UNKNOWN;
3213
3214 gfc_gobble_whitespace ();
3215
3216 if (sym->attr.external || sym->attr.procedure
3217 || sym->attr.function || sym->attr.subroutine)
3218 flavor = FL_PROCEDURE;
3219
3220 /* If it is not a procedure, is not typed and is host associated,
3221 we cannot give it a flavor yet. */
3222 else if (sym->ns == gfc_current_ns->parent
3223 && sym->ts.type == BT_UNKNOWN)
3224 break;
3225
3226 /* These are definitive indicators that this is a variable. */
3227 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3228 || sym->attr.pointer || sym->as != NULL)
3229 flavor = FL_VARIABLE;
3230
3231 if (flavor != FL_UNKNOWN
3232 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3233 return MATCH_ERROR;
3234 }
3235 break;
3236
3237 case FL_PARAMETER:
3238 if (equiv_flag)
3239 {
3240 gfc_error ("Named constant at %C in an EQUIVALENCE");
3241 return MATCH_ERROR;
3242 }
3243 /* Otherwise this is checked for and an error given in the
3244 variable definition context checks. */
3245 break;
3246
3247 case FL_PROCEDURE:
3248 /* Check for a nonrecursive function result variable. */
3249 if (sym->attr.function
3250 && !sym->attr.external
3251 && sym->result == sym
3252 && (gfc_is_function_return_value (sym, gfc_current_ns)
3253 || (sym->attr.entry
3254 && sym->ns == gfc_current_ns)
3255 || (sym->attr.entry
3256 && sym->ns == gfc_current_ns->parent)))
3257 {
3258 /* If a function result is a derived type, then the derived
3259 type may still have to be resolved. */
3260
3261 if (sym->ts.type == BT_DERIVED
3262 && gfc_use_derived (sym->ts.u.derived) == NULL)
3263 return MATCH_ERROR;
3264 break;
3265 }
3266
3267 if (sym->attr.proc_pointer
3268 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3269 break;
3270
3271 /* Fall through to error */
3272
3273 default:
3274 gfc_error ("'%s' at %C is not a variable", sym->name);
3275 return MATCH_ERROR;
3276 }
3277
3278 /* Special case for derived type variables that get their types
3279 via an IMPLICIT statement. This can't wait for the
3280 resolution phase. */
3281
3282 {
3283 gfc_namespace * implicit_ns;
3284
3285 if (gfc_current_ns->proc_name == sym)
3286 implicit_ns = gfc_current_ns;
3287 else
3288 implicit_ns = sym->ns;
3289
3290 if (gfc_peek_ascii_char () == '%'
3291 && sym->ts.type == BT_UNKNOWN
3292 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3293 gfc_set_default_type (sym, 0, implicit_ns);
3294 }
3295
3296 expr = gfc_get_expr ();
3297
3298 expr->expr_type = EXPR_VARIABLE;
3299 expr->symtree = st;
3300 expr->ts = sym->ts;
3301 expr->where = where;
3302
3303 /* Now see if we have to do more. */
3304 m = gfc_match_varspec (expr, equiv_flag, false, false);
3305 if (m != MATCH_YES)
3306 {
3307 gfc_free_expr (expr);
3308 return m;
3309 }
3310
3311 *result = expr;
3312 return MATCH_YES;
3313}
3314
3315
3316match
3317gfc_match_variable (gfc_expr **result, int equiv_flag)
3318{
3319 return match_variable (result, equiv_flag, 1);
3320}
3321
3322
3323match
3324gfc_match_equiv_variable (gfc_expr **result)
3325{
3326 return match_variable (result, 1, 0);
3327}
3328