blob: f362f75426aa85ccab90a5d58de1f009e7447516 [file] [log] [blame]
Bernhard Rosenkraenzerc83ebe52012-09-18 21:38:03 +01591/* 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_error ("Character '%s' in string at %C is not representable "
1091 "in character kind %d", gfc_print_wide_char (c), kind);
1092 return MATCH_ERROR;
1093 }
1094
1095 *p++ = c;
1096 }
1097
1098 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1099 gfc_option.warn_ampersand = warn_ampersand;
1100
1101 next_string_char (delimiter, &ret);
1102 if (ret != -1)
1103 gfc_internal_error ("match_string_constant(): Delimiter not found");
1104
1105 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1106 e->expr_type = EXPR_SUBSTRING;
1107
1108 *result = e;
1109
1110 return MATCH_YES;
1111
1112no_match:
1113 gfc_current_locus = old_locus;
1114 return MATCH_NO;
1115}
1116
1117
1118/* Match a .true. or .false. Returns 1 if a .true. was found,
1119 0 if a .false. was found, and -1 otherwise. */
1120static int
1121match_logical_constant_string (void)
1122{
1123 locus orig_loc = gfc_current_locus;
1124
1125 gfc_gobble_whitespace ();
1126 if (gfc_next_ascii_char () == '.')
1127 {
1128 char ch = gfc_next_ascii_char ();
1129 if (ch == 'f')
1130 {
1131 if (gfc_next_ascii_char () == 'a'
1132 && gfc_next_ascii_char () == 'l'
1133 && gfc_next_ascii_char () == 's'
1134 && gfc_next_ascii_char () == 'e'
1135 && gfc_next_ascii_char () == '.')
1136 /* Matched ".false.". */
1137 return 0;
1138 }
1139 else if (ch == 't')
1140 {
1141 if (gfc_next_ascii_char () == 'r'
1142 && gfc_next_ascii_char () == 'u'
1143 && gfc_next_ascii_char () == 'e'
1144 && gfc_next_ascii_char () == '.')
1145 /* Matched ".true.". */
1146 return 1;
1147 }
1148 }
1149 gfc_current_locus = orig_loc;
1150 return -1;
1151}
1152
1153/* Match a .true. or .false. */
1154
1155static match
1156match_logical_constant (gfc_expr **result)
1157{
1158 gfc_expr *e;
1159 int i, kind, is_iso_c;
1160
1161 i = match_logical_constant_string ();
1162 if (i == -1)
1163 return MATCH_NO;
1164
1165 kind = get_kind (&is_iso_c);
1166 if (kind == -1)
1167 return MATCH_ERROR;
1168 if (kind == -2)
1169 kind = gfc_default_logical_kind;
1170
1171 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1172 {
1173 gfc_error ("Bad kind for logical constant at %C");
1174 return MATCH_ERROR;
1175 }
1176
1177 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1178 e->ts.is_c_interop = is_iso_c;
1179
1180 *result = e;
1181 return MATCH_YES;
1182}
1183
1184
1185/* Match a real or imaginary part of a complex constant that is a
1186 symbolic constant. */
1187
1188static match
1189match_sym_complex_part (gfc_expr **result)
1190{
1191 char name[GFC_MAX_SYMBOL_LEN + 1];
1192 gfc_symbol *sym;
1193 gfc_expr *e;
1194 match m;
1195
1196 m = gfc_match_name (name);
1197 if (m != MATCH_YES)
1198 return m;
1199
1200 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1201 return MATCH_NO;
1202
1203 if (sym->attr.flavor != FL_PARAMETER)
1204 {
1205 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1206 return MATCH_ERROR;
1207 }
1208
1209 if (!gfc_numeric_ts (&sym->value->ts))
1210 {
1211 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1212 return MATCH_ERROR;
1213 }
1214
1215 if (sym->value->rank != 0)
1216 {
1217 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1218 return MATCH_ERROR;
1219 }
1220
1221 if (gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
1222 "complex constant at %C") == FAILURE)
1223 return MATCH_ERROR;
1224
1225 switch (sym->value->ts.type)
1226 {
1227 case BT_REAL:
1228 e = gfc_copy_expr (sym->value);
1229 break;
1230
1231 case BT_COMPLEX:
1232 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1233 if (e == NULL)
1234 goto error;
1235 break;
1236
1237 case BT_INTEGER:
1238 e = gfc_int2real (sym->value, gfc_default_real_kind);
1239 if (e == NULL)
1240 goto error;
1241 break;
1242
1243 default:
1244 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1245 }
1246
1247 *result = e; /* e is a scalar, real, constant expression. */
1248 return MATCH_YES;
1249
1250error:
1251 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1252 return MATCH_ERROR;
1253}
1254
1255
1256/* Match a real or imaginary part of a complex number. */
1257
1258static match
1259match_complex_part (gfc_expr **result)
1260{
1261 match m;
1262
1263 m = match_sym_complex_part (result);
1264 if (m != MATCH_NO)
1265 return m;
1266
1267 m = match_real_constant (result, 1);
1268 if (m != MATCH_NO)
1269 return m;
1270
1271 return match_integer_constant (result, 1);
1272}
1273
1274
1275/* Try to match a complex constant. */
1276
1277static match
1278match_complex_constant (gfc_expr **result)
1279{
1280 gfc_expr *e, *real, *imag;
1281 gfc_error_buf old_error;
1282 gfc_typespec target;
1283 locus old_loc;
1284 int kind;
1285 match m;
1286
1287 old_loc = gfc_current_locus;
1288 real = imag = e = NULL;
1289
1290 m = gfc_match_char ('(');
1291 if (m != MATCH_YES)
1292 return m;
1293
1294 gfc_push_error (&old_error);
1295
1296 m = match_complex_part (&real);
1297 if (m == MATCH_NO)
1298 {
1299 gfc_free_error (&old_error);
1300 goto cleanup;
1301 }
1302
1303 if (gfc_match_char (',') == MATCH_NO)
1304 {
1305 gfc_pop_error (&old_error);
1306 m = MATCH_NO;
1307 goto cleanup;
1308 }
1309
1310 /* If m is error, then something was wrong with the real part and we
1311 assume we have a complex constant because we've seen the ','. An
1312 ambiguous case here is the start of an iterator list of some
1313 sort. These sort of lists are matched prior to coming here. */
1314
1315 if (m == MATCH_ERROR)
1316 {
1317 gfc_free_error (&old_error);
1318 goto cleanup;
1319 }
1320 gfc_pop_error (&old_error);
1321
1322 m = match_complex_part (&imag);
1323 if (m == MATCH_NO)
1324 goto syntax;
1325 if (m == MATCH_ERROR)
1326 goto cleanup;
1327
1328 m = gfc_match_char (')');
1329 if (m == MATCH_NO)
1330 {
1331 /* Give the matcher for implied do-loops a chance to run. This
1332 yields a much saner error message for (/ (i, 4=i, 6) /). */
1333 if (gfc_peek_ascii_char () == '=')
1334 {
1335 m = MATCH_ERROR;
1336 goto cleanup;
1337 }
1338 else
1339 goto syntax;
1340 }
1341
1342 if (m == MATCH_ERROR)
1343 goto cleanup;
1344
1345 /* Decide on the kind of this complex number. */
1346 if (real->ts.type == BT_REAL)
1347 {
1348 if (imag->ts.type == BT_REAL)
1349 kind = gfc_kind_max (real, imag);
1350 else
1351 kind = real->ts.kind;
1352 }
1353 else
1354 {
1355 if (imag->ts.type == BT_REAL)
1356 kind = imag->ts.kind;
1357 else
1358 kind = gfc_default_real_kind;
1359 }
1360 gfc_clear_ts (&target);
1361 target.type = BT_REAL;
1362 target.kind = kind;
1363
1364 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1365 gfc_convert_type (real, &target, 2);
1366 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1367 gfc_convert_type (imag, &target, 2);
1368
1369 e = gfc_convert_complex (real, imag, kind);
1370 e->where = gfc_current_locus;
1371
1372 gfc_free_expr (real);
1373 gfc_free_expr (imag);
1374
1375 *result = e;
1376 return MATCH_YES;
1377
1378syntax:
1379 gfc_error ("Syntax error in COMPLEX constant at %C");
1380 m = MATCH_ERROR;
1381
1382cleanup:
1383 gfc_free_expr (e);
1384 gfc_free_expr (real);
1385 gfc_free_expr (imag);
1386 gfc_current_locus = old_loc;
1387
1388 return m;
1389}
1390
1391
1392/* Match constants in any of several forms. Returns nonzero for a
1393 match, zero for no match. */
1394
1395match
1396gfc_match_literal_constant (gfc_expr **result, int signflag)
1397{
1398 match m;
1399
1400 m = match_complex_constant (result);
1401 if (m != MATCH_NO)
1402 return m;
1403
1404 m = match_string_constant (result);
1405 if (m != MATCH_NO)
1406 return m;
1407
1408 m = match_boz_constant (result);
1409 if (m != MATCH_NO)
1410 return m;
1411
1412 m = match_real_constant (result, signflag);
1413 if (m != MATCH_NO)
1414 return m;
1415
1416 m = match_hollerith_constant (result);
1417 if (m != MATCH_NO)
1418 return m;
1419
1420 m = match_integer_constant (result, signflag);
1421 if (m != MATCH_NO)
1422 return m;
1423
1424 m = match_logical_constant (result);
1425 if (m != MATCH_NO)
1426 return m;
1427
1428 return MATCH_NO;
1429}
1430
1431
1432/* This checks if a symbol is the return value of an encompassing function.
1433 Function nesting can be maximally two levels deep, but we may have
1434 additional local namespaces like BLOCK etc. */
1435
1436bool
1437gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1438{
1439 if (!sym->attr.function || (sym->result != sym))
1440 return false;
1441 while (ns)
1442 {
1443 if (ns->proc_name == sym)
1444 return true;
1445 ns = ns->parent;
1446 }
1447 return false;
1448}
1449
1450
1451/* Match a single actual argument value. An actual argument is
1452 usually an expression, but can also be a procedure name. If the
1453 argument is a single name, it is not always possible to tell
1454 whether the name is a dummy procedure or not. We treat these cases
1455 by creating an argument that looks like a dummy procedure and
1456 fixing things later during resolution. */
1457
1458static match
1459match_actual_arg (gfc_expr **result)
1460{
1461 char name[GFC_MAX_SYMBOL_LEN + 1];
1462 gfc_symtree *symtree;
1463 locus where, w;
1464 gfc_expr *e;
1465 char c;
1466
1467 gfc_gobble_whitespace ();
1468 where = gfc_current_locus;
1469
1470 switch (gfc_match_name (name))
1471 {
1472 case MATCH_ERROR:
1473 return MATCH_ERROR;
1474
1475 case MATCH_NO:
1476 break;
1477
1478 case MATCH_YES:
1479 w = gfc_current_locus;
1480 gfc_gobble_whitespace ();
1481 c = gfc_next_ascii_char ();
1482 gfc_current_locus = w;
1483
1484 if (c != ',' && c != ')')
1485 break;
1486
1487 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1488 break;
1489 /* Handle error elsewhere. */
1490
1491 /* Eliminate a couple of common cases where we know we don't
1492 have a function argument. */
1493 if (symtree == NULL)
1494 {
1495 gfc_get_sym_tree (name, NULL, &symtree, false);
1496 gfc_set_sym_referenced (symtree->n.sym);
1497 }
1498 else
1499 {
1500 gfc_symbol *sym;
1501
1502 sym = symtree->n.sym;
1503 gfc_set_sym_referenced (sym);
1504 if (sym->attr.flavor != FL_PROCEDURE
1505 && sym->attr.flavor != FL_UNKNOWN)
1506 break;
1507
1508 if (sym->attr.in_common && !sym->attr.proc_pointer)
1509 {
1510 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1511 &sym->declared_at);
1512 break;
1513 }
1514
1515 /* If the symbol is a function with itself as the result and
1516 is being defined, then we have a variable. */
1517 if (sym->attr.function && sym->result == sym)
1518 {
1519 if (gfc_is_function_return_value (sym, gfc_current_ns))
1520 break;
1521
1522 if (sym->attr.entry
1523 && (sym->ns == gfc_current_ns
1524 || sym->ns == gfc_current_ns->parent))
1525 {
1526 gfc_entry_list *el = NULL;
1527
1528 for (el = sym->ns->entries; el; el = el->next)
1529 if (sym == el->sym)
1530 break;
1531
1532 if (el)
1533 break;
1534 }
1535 }
1536 }
1537
1538 e = gfc_get_expr (); /* Leave it unknown for now */
1539 e->symtree = symtree;
1540 e->expr_type = EXPR_VARIABLE;
1541 e->ts.type = BT_PROCEDURE;
1542 e->where = where;
1543
1544 *result = e;
1545 return MATCH_YES;
1546 }
1547
1548 gfc_current_locus = where;
1549 return gfc_match_expr (result);
1550}
1551
1552
1553/* Match a keyword argument. */
1554
1555static match
1556match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1557{
1558 char name[GFC_MAX_SYMBOL_LEN + 1];
1559 gfc_actual_arglist *a;
1560 locus name_locus;
1561 match m;
1562
1563 name_locus = gfc_current_locus;
1564 m = gfc_match_name (name);
1565
1566 if (m != MATCH_YES)
1567 goto cleanup;
1568 if (gfc_match_char ('=') != MATCH_YES)
1569 {
1570 m = MATCH_NO;
1571 goto cleanup;
1572 }
1573
1574 m = match_actual_arg (&actual->expr);
1575 if (m != MATCH_YES)
1576 goto cleanup;
1577
1578 /* Make sure this name has not appeared yet. */
1579
1580 if (name[0] != '\0')
1581 {
1582 for (a = base; a; a = a->next)
1583 if (a->name != NULL && strcmp (a->name, name) == 0)
1584 {
1585 gfc_error ("Keyword '%s' at %C has already appeared in the "
1586 "current argument list", name);
1587 return MATCH_ERROR;
1588 }
1589 }
1590
1591 actual->name = gfc_get_string (name);
1592 return MATCH_YES;
1593
1594cleanup:
1595 gfc_current_locus = name_locus;
1596 return m;
1597}
1598
1599
1600/* Match an argument list function, such as %VAL. */
1601
1602static match
1603match_arg_list_function (gfc_actual_arglist *result)
1604{
1605 char name[GFC_MAX_SYMBOL_LEN + 1];
1606 locus old_locus;
1607 match m;
1608
1609 old_locus = gfc_current_locus;
1610
1611 if (gfc_match_char ('%') != MATCH_YES)
1612 {
1613 m = MATCH_NO;
1614 goto cleanup;
1615 }
1616
1617 m = gfc_match ("%n (", name);
1618 if (m != MATCH_YES)
1619 goto cleanup;
1620
1621 if (name[0] != '\0')
1622 {
1623 switch (name[0])
1624 {
1625 case 'l':
1626 if (strncmp (name, "loc", 3) == 0)
1627 {
1628 result->name = "%LOC";
1629 break;
1630 }
1631 case 'r':
1632 if (strncmp (name, "ref", 3) == 0)
1633 {
1634 result->name = "%REF";
1635 break;
1636 }
1637 case 'v':
1638 if (strncmp (name, "val", 3) == 0)
1639 {
1640 result->name = "%VAL";
1641 break;
1642 }
1643 default:
1644 m = MATCH_ERROR;
1645 goto cleanup;
1646 }
1647 }
1648
1649 if (gfc_notify_std (GFC_STD_GNU, "argument list "
1650 "function at %C") == FAILURE)
1651 {
1652 m = MATCH_ERROR;
1653 goto cleanup;
1654 }
1655
1656 m = match_actual_arg (&result->expr);
1657 if (m != MATCH_YES)
1658 goto cleanup;
1659
1660 if (gfc_match_char (')') != MATCH_YES)
1661 {
1662 m = MATCH_NO;
1663 goto cleanup;
1664 }
1665
1666 return MATCH_YES;
1667
1668cleanup:
1669 gfc_current_locus = old_locus;
1670 return m;
1671}
1672
1673
1674/* Matches an actual argument list of a function or subroutine, from
1675 the opening parenthesis to the closing parenthesis. The argument
1676 list is assumed to allow keyword arguments because we don't know if
1677 the symbol associated with the procedure has an implicit interface
1678 or not. We make sure keywords are unique. If sub_flag is set,
1679 we're matching the argument list of a subroutine. */
1680
1681match
1682gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1683{
1684 gfc_actual_arglist *head, *tail;
1685 int seen_keyword;
1686 gfc_st_label *label;
1687 locus old_loc;
1688 match m;
1689
1690 *argp = tail = NULL;
1691 old_loc = gfc_current_locus;
1692
1693 seen_keyword = 0;
1694
1695 if (gfc_match_char ('(') == MATCH_NO)
1696 return (sub_flag) ? MATCH_YES : MATCH_NO;
1697
1698 if (gfc_match_char (')') == MATCH_YES)
1699 return MATCH_YES;
1700 head = NULL;
1701
1702 matching_actual_arglist++;
1703
1704 for (;;)
1705 {
1706 if (head == NULL)
1707 head = tail = gfc_get_actual_arglist ();
1708 else
1709 {
1710 tail->next = gfc_get_actual_arglist ();
1711 tail = tail->next;
1712 }
1713
1714 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1715 {
1716 m = gfc_match_st_label (&label);
1717 if (m == MATCH_NO)
1718 gfc_error ("Expected alternate return label at %C");
1719 if (m != MATCH_YES)
1720 goto cleanup;
1721
1722 tail->label = label;
1723 goto next;
1724 }
1725
1726 /* After the first keyword argument is seen, the following
1727 arguments must also have keywords. */
1728 if (seen_keyword)
1729 {
1730 m = match_keyword_arg (tail, head);
1731
1732 if (m == MATCH_ERROR)
1733 goto cleanup;
1734 if (m == MATCH_NO)
1735 {
1736 gfc_error ("Missing keyword name in actual argument list at %C");
1737 goto cleanup;
1738 }
1739
1740 }
1741 else
1742 {
1743 /* Try an argument list function, like %VAL. */
1744 m = match_arg_list_function (tail);
1745 if (m == MATCH_ERROR)
1746 goto cleanup;
1747
1748 /* See if we have the first keyword argument. */
1749 if (m == MATCH_NO)
1750 {
1751 m = match_keyword_arg (tail, head);
1752 if (m == MATCH_YES)
1753 seen_keyword = 1;
1754 if (m == MATCH_ERROR)
1755 goto cleanup;
1756 }
1757
1758 if (m == MATCH_NO)
1759 {
1760 /* Try for a non-keyword argument. */
1761 m = match_actual_arg (&tail->expr);
1762 if (m == MATCH_ERROR)
1763 goto cleanup;
1764 if (m == MATCH_NO)
1765 goto syntax;
1766 }
1767 }
1768
1769
1770 next:
1771 if (gfc_match_char (')') == MATCH_YES)
1772 break;
1773 if (gfc_match_char (',') != MATCH_YES)
1774 goto syntax;
1775 }
1776
1777 *argp = head;
1778 matching_actual_arglist--;
1779 return MATCH_YES;
1780
1781syntax:
1782 gfc_error ("Syntax error in argument list at %C");
1783
1784cleanup:
1785 gfc_free_actual_arglist (head);
1786 gfc_current_locus = old_loc;
1787 matching_actual_arglist--;
1788 return MATCH_ERROR;
1789}
1790
1791
1792/* Used by gfc_match_varspec() to extend the reference list by one
1793 element. */
1794
1795static gfc_ref *
1796extend_ref (gfc_expr *primary, gfc_ref *tail)
1797{
1798 if (primary->ref == NULL)
1799 primary->ref = tail = gfc_get_ref ();
1800 else
1801 {
1802 if (tail == NULL)
1803 gfc_internal_error ("extend_ref(): Bad tail");
1804 tail->next = gfc_get_ref ();
1805 tail = tail->next;
1806 }
1807
1808 return tail;
1809}
1810
1811
1812/* Match any additional specifications associated with the current
1813 variable like member references or substrings. If equiv_flag is
1814 set we only match stuff that is allowed inside an EQUIVALENCE
1815 statement. sub_flag tells whether we expect a type-bound procedure found
1816 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1817 components, 'ppc_arg' determines whether the PPC may be called (with an
1818 argument list), or whether it may just be referred to as a pointer. */
1819
1820match
1821gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1822 bool ppc_arg)
1823{
1824 char name[GFC_MAX_SYMBOL_LEN + 1];
1825 gfc_ref *substring, *tail;
1826 gfc_component *component;
1827 gfc_symbol *sym = primary->symtree->n.sym;
1828 match m;
1829 bool unknown;
1830
1831 tail = NULL;
1832
1833 gfc_gobble_whitespace ();
1834
1835 if (gfc_peek_ascii_char () == '[')
1836 {
1837 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1838 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1839 && CLASS_DATA (sym)->attr.dimension))
1840 {
1841 gfc_error ("Array section designator, e.g. '(:)', is required "
1842 "besides the coarray designator '[...]' at %C");
1843 return MATCH_ERROR;
1844 }
1845 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1846 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1847 && !CLASS_DATA (sym)->attr.codimension))
1848 {
1849 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1850 sym->name);
1851 return MATCH_ERROR;
1852 }
1853 }
1854
1855 /* For associate names, we may not yet know whether they are arrays or not.
1856 Thus if we have one and parentheses follow, we have to assume that it
1857 actually is one for now. The final decision will be made at
1858 resolution time, of course. */
1859 if (sym->assoc && gfc_peek_ascii_char () == '(')
1860 sym->attr.dimension = 1;
1861
1862 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1863 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1864 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1865 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
1866 && !(gfc_matching_procptr_assignment
1867 && sym->attr.flavor == FL_PROCEDURE))
1868 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1869 && (CLASS_DATA (sym)->attr.dimension
1870 || CLASS_DATA (sym)->attr.codimension)))
1871 {
1872 gfc_array_spec *as;
1873
1874 tail = extend_ref (primary, tail);
1875 tail->type = REF_ARRAY;
1876
1877 /* In EQUIVALENCE, we don't know yet whether we are seeing
1878 an array, character variable or array of character
1879 variables. We'll leave the decision till resolve time. */
1880
1881 if (equiv_flag)
1882 as = NULL;
1883 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1884 as = CLASS_DATA (sym)->as;
1885 else
1886 as = sym->as;
1887
1888 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1889 as ? as->corank : 0);
1890 if (m != MATCH_YES)
1891 return m;
1892
1893 gfc_gobble_whitespace ();
1894 if (equiv_flag && gfc_peek_ascii_char () == '(')
1895 {
1896 tail = extend_ref (primary, tail);
1897 tail->type = REF_ARRAY;
1898
1899 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1900 if (m != MATCH_YES)
1901 return m;
1902 }
1903 }
1904
1905 primary->ts = sym->ts;
1906
1907 if (equiv_flag)
1908 return MATCH_YES;
1909
1910 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
1911 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1912 gfc_set_default_type (sym, 0, sym->ns);
1913
1914 if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES)
1915 {
1916 gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name);
1917 return MATCH_ERROR;
1918 }
1919 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1920 && gfc_match_char ('%') == MATCH_YES)
1921 {
1922 gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C",
1923 sym->name);
1924 return MATCH_ERROR;
1925 }
1926
1927 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1928 || gfc_match_char ('%') != MATCH_YES)
1929 goto check_substring;
1930
1931 sym = sym->ts.u.derived;
1932
1933 for (;;)
1934 {
1935 gfc_try t;
1936 gfc_symtree *tbp;
1937
1938 m = gfc_match_name (name);
1939 if (m == MATCH_NO)
1940 gfc_error ("Expected structure component name at %C");
1941 if (m != MATCH_YES)
1942 return MATCH_ERROR;
1943
1944 if (sym->f2k_derived)
1945 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1946 else
1947 tbp = NULL;
1948
1949 if (tbp)
1950 {
1951 gfc_symbol* tbp_sym;
1952
1953 if (t == FAILURE)
1954 return MATCH_ERROR;
1955
1956 gcc_assert (!tail || !tail->next);
1957 gcc_assert (primary->expr_type == EXPR_VARIABLE
1958 || (primary->expr_type == EXPR_STRUCTURE
1959 && primary->symtree && primary->symtree->n.sym
1960 && primary->symtree->n.sym->attr.flavor));
1961
1962 if (tbp->n.tb->is_generic)
1963 tbp_sym = NULL;
1964 else
1965 tbp_sym = tbp->n.tb->u.specific->n.sym;
1966
1967 primary->expr_type = EXPR_COMPCALL;
1968 primary->value.compcall.tbp = tbp->n.tb;
1969 primary->value.compcall.name = tbp->name;
1970 primary->value.compcall.ignore_pass = 0;
1971 primary->value.compcall.assign = 0;
1972 primary->value.compcall.base_object = NULL;
1973 gcc_assert (primary->symtree->n.sym->attr.referenced);
1974 if (tbp_sym)
1975 primary->ts = tbp_sym->ts;
1976
1977 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
1978 &primary->value.compcall.actual);
1979 if (m == MATCH_ERROR)
1980 return MATCH_ERROR;
1981 if (m == MATCH_NO)
1982 {
1983 if (sub_flag)
1984 primary->value.compcall.actual = NULL;
1985 else
1986 {
1987 gfc_error ("Expected argument list at %C");
1988 return MATCH_ERROR;
1989 }
1990 }
1991
1992 break;
1993 }
1994
1995 component = gfc_find_component (sym, name, false, false);
1996 if (component == NULL)
1997 return MATCH_ERROR;
1998
1999 tail = extend_ref (primary, tail);
2000 tail->type = REF_COMPONENT;
2001
2002 tail->u.c.component = component;
2003 tail->u.c.sym = sym;
2004
2005 primary->ts = component->ts;
2006
Bernhard Rosenkraenzer84c11392012-09-27 01:39:09 +01592007 if (component->attr.proc_pointer && ppc_arg)
Bernhard Rosenkraenzerc83ebe52012-09-18 21:38:03 +01592008 {
2009 /* Procedure pointer component call: Look for argument list. */
2010 m = gfc_match_actual_arglist (sub_flag,
2011 &primary->value.compcall.actual);
2012 if (m == MATCH_ERROR)
2013 return MATCH_ERROR;
2014
2015 if (m == MATCH_NO && !gfc_matching_ptr_assignment
Bernhard Rosenkraenzer84c11392012-09-27 01:39:09 +01592016 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
Bernhard Rosenkraenzerc83ebe52012-09-18 21:38:03 +01592017 {
2018 gfc_error ("Procedure pointer component '%s' requires an "
2019 "argument list at %C", component->name);
2020 return MATCH_ERROR;
2021 }
2022
2023 if (m == MATCH_YES)
2024 primary->expr_type = EXPR_PPC;
2025
2026 break;
2027 }
2028
2029 if (component->as != NULL && !component->attr.proc_pointer)
2030 {
2031 tail = extend_ref (primary, tail);
2032 tail->type = REF_ARRAY;
2033
2034 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2035 component->as->corank);
2036 if (m != MATCH_YES)
2037 return m;
2038 }
2039 else if (component->ts.type == BT_CLASS
2040 && CLASS_DATA (component)->as != NULL
2041 && !component->attr.proc_pointer)
2042 {
2043 tail = extend_ref (primary, tail);
2044 tail->type = REF_ARRAY;
2045
2046 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
2047 equiv_flag,
2048 CLASS_DATA (component)->as->corank);
2049 if (m != MATCH_YES)
2050 return m;
2051 }
2052
2053 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
2054 || gfc_match_char ('%') != MATCH_YES)
2055 break;
2056
2057 sym = component->ts.u.derived;
2058 }
2059
2060check_substring:
2061 unknown = false;
2062 if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED)
2063 {
2064 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
2065 {
2066 gfc_set_default_type (sym, 0, sym->ns);
2067 primary->ts = sym->ts;
2068 unknown = true;
2069 }
2070 }
2071
2072 if (primary->ts.type == BT_CHARACTER)
2073 {
2074 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring))
2075 {
2076 case MATCH_YES:
2077 if (tail == NULL)
2078 primary->ref = substring;
2079 else
2080 tail->next = substring;
2081
2082 if (primary->expr_type == EXPR_CONSTANT)
2083 primary->expr_type = EXPR_SUBSTRING;
2084
2085 if (substring)
2086 primary->ts.u.cl = NULL;
2087
2088 break;
2089
2090 case MATCH_NO:
2091 if (unknown)
2092 {
2093 gfc_clear_ts (&primary->ts);
2094 gfc_clear_ts (&sym->ts);
2095 }
2096 break;
2097
2098 case MATCH_ERROR:
2099 return MATCH_ERROR;
2100 }
2101 }
2102
2103 /* F2008, C727. */
2104 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2105 {
2106 gfc_error ("Coindexed procedure-pointer component at %C");
2107 return MATCH_ERROR;
2108 }
2109
2110 return MATCH_YES;
2111}
2112
2113
2114/* Given an expression that is a variable, figure out what the
2115 ultimate variable's type and attribute is, traversing the reference
2116 structures if necessary.
2117
2118 This subroutine is trickier than it looks. We start at the base
2119 symbol and store the attribute. Component references load a
2120 completely new attribute.
2121
2122 A couple of rules come into play. Subobjects of targets are always
2123 targets themselves. If we see a component that goes through a
2124 pointer, then the expression must also be a target, since the
2125 pointer is associated with something (if it isn't core will soon be
2126 dumped). If we see a full part or section of an array, the
2127 expression is also an array.
2128
2129 We can have at most one full array reference. */
2130
2131symbol_attribute
2132gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
2133{
2134 int dimension, pointer, allocatable, target;
2135 symbol_attribute attr;
2136 gfc_ref *ref;
2137 gfc_symbol *sym;
2138 gfc_component *comp;
2139
2140 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2141 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2142
2143 sym = expr->symtree->n.sym;
2144 attr = sym->attr;
2145
2146 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2147 {
2148 dimension = CLASS_DATA (sym)->attr.dimension;
2149 pointer = CLASS_DATA (sym)->attr.class_pointer;
2150 allocatable = CLASS_DATA (sym)->attr.allocatable;
2151 }
2152 else
2153 {
2154 dimension = attr.dimension;
2155 pointer = attr.pointer;
2156 allocatable = attr.allocatable;
2157 }
2158
2159 target = attr.target;
2160 if (pointer || attr.proc_pointer)
2161 target = 1;
2162
2163 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
2164 *ts = sym->ts;
2165
2166 for (ref = expr->ref; ref; ref = ref->next)
2167 switch (ref->type)
2168 {
2169 case REF_ARRAY:
2170
2171 switch (ref->u.ar.type)
2172 {
2173 case AR_FULL:
2174 dimension = 1;
2175 break;
2176
2177 case AR_SECTION:
2178 allocatable = pointer = 0;
2179 dimension = 1;
2180 break;
2181
2182 case AR_ELEMENT:
2183 /* Handle coarrays. */
2184 if (ref->u.ar.dimen > 0)
2185 allocatable = pointer = 0;
2186 break;
2187
2188 case AR_UNKNOWN:
2189 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2190 }
2191
2192 break;
2193
2194 case REF_COMPONENT:
2195 comp = ref->u.c.component;
2196 attr = comp->attr;
2197 if (ts != NULL)
2198 {
2199 *ts = comp->ts;
2200 /* Don't set the string length if a substring reference
2201 follows. */
2202 if (ts->type == BT_CHARACTER
2203 && ref->next && ref->next->type == REF_SUBSTRING)
2204 ts->u.cl = NULL;
2205 }
2206
2207 if (comp->ts.type == BT_CLASS)
2208 {
2209 pointer = CLASS_DATA (comp)->attr.class_pointer;
2210 allocatable = CLASS_DATA (comp)->attr.allocatable;
2211 }
2212 else
2213 {
2214 pointer = comp->attr.pointer;
2215 allocatable = comp->attr.allocatable;
2216 }
2217 if (pointer || attr.proc_pointer)
2218 target = 1;
2219
2220 break;
2221
2222 case REF_SUBSTRING:
2223 allocatable = pointer = 0;
2224 break;
2225 }
2226
2227 attr.dimension = dimension;
2228 attr.pointer = pointer;
2229 attr.allocatable = allocatable;
2230 attr.target = target;
2231 attr.save = sym->attr.save;
2232
2233 return attr;
2234}
2235
2236
2237/* Return the attribute from a general expression. */
2238
2239symbol_attribute
2240gfc_expr_attr (gfc_expr *e)
2241{
2242 symbol_attribute attr;
2243
2244 switch (e->expr_type)
2245 {
2246 case EXPR_VARIABLE:
2247 attr = gfc_variable_attr (e, NULL);
2248 break;
2249
2250 case EXPR_FUNCTION:
2251 gfc_clear_attr (&attr);
2252
2253 if (e->value.function.esym != NULL)
2254 {
2255 gfc_symbol *sym = e->value.function.esym->result;
2256 attr = sym->attr;
2257 if (sym->ts.type == BT_CLASS)
2258 {
2259 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2260 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2261 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2262 }
2263 }
2264 else
2265 attr = gfc_variable_attr (e, NULL);
2266
2267 /* TODO: NULL() returns pointers. May have to take care of this
2268 here. */
2269
2270 break;
2271
2272 default:
2273 gfc_clear_attr (&attr);
2274 break;
2275 }
2276
2277 return attr;
2278}
2279
2280
2281/* Match a structure constructor. The initial symbol has already been
2282 seen. */
2283
2284typedef struct gfc_structure_ctor_component
2285{
2286 char* name;
2287 gfc_expr* val;
2288 locus where;
2289 struct gfc_structure_ctor_component* next;
2290}
2291gfc_structure_ctor_component;
2292
2293#define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2294
2295static void
2296gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2297{
2298 free (comp->name);
2299 gfc_free_expr (comp->val);
2300 free (comp);
2301}
2302
2303
2304/* Translate the component list into the actual constructor by sorting it in
2305 the order required; this also checks along the way that each and every
2306 component actually has an initializer and handles default initializers
2307 for components without explicit value given. */
2308static gfc_try
2309build_actual_constructor (gfc_structure_ctor_component **comp_head,
2310 gfc_constructor_base *ctor_head, gfc_symbol *sym)
2311{
2312 gfc_structure_ctor_component *comp_iter;
2313 gfc_component *comp;
2314
2315 for (comp = sym->components; comp; comp = comp->next)
2316 {
2317 gfc_structure_ctor_component **next_ptr;
2318 gfc_expr *value = NULL;
2319
2320 /* Try to find the initializer for the current component by name. */
2321 next_ptr = comp_head;
2322 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2323 {
2324 if (!strcmp (comp_iter->name, comp->name))
2325 break;
2326 next_ptr = &comp_iter->next;
2327 }
2328
2329 /* If an extension, try building the parent derived type by building
2330 a value expression for the parent derived type and calling self. */
2331 if (!comp_iter && comp == sym->components && sym->attr.extension)
2332 {
2333 value = gfc_get_structure_constructor_expr (comp->ts.type,
2334 comp->ts.kind,
2335 &gfc_current_locus);
2336 value->ts = comp->ts;
2337
2338 if (build_actual_constructor (comp_head, &value->value.constructor,
2339 comp->ts.u.derived) == FAILURE)
2340 {
2341 gfc_free_expr (value);
2342 return FAILURE;
2343 }
2344
2345 gfc_constructor_append_expr (ctor_head, value, NULL);
2346 continue;
2347 }
2348
2349 /* If it was not found, try the default initializer if there's any;
2350 otherwise, it's an error. */
2351 if (!comp_iter)
2352 {
2353 if (comp->initializer)
2354 {
2355 if (gfc_notify_std (GFC_STD_F2003, "Structure"
2356 " constructor with missing optional arguments"
2357 " at %C") == FAILURE)
2358 return FAILURE;
2359 value = gfc_copy_expr (comp->initializer);
2360 }
2361 else
2362 {
2363 gfc_error ("No initializer for component '%s' given in the"
2364 " structure constructor at %C!", comp->name);
2365 return FAILURE;
2366 }
2367 }
2368 else
2369 value = comp_iter->val;
2370
2371 /* Add the value to the constructor chain built. */
2372 gfc_constructor_append_expr (ctor_head, value, NULL);
2373
2374 /* Remove the entry from the component list. We don't want the expression
2375 value to be free'd, so set it to NULL. */
2376 if (comp_iter)
2377 {
2378 *next_ptr = comp_iter->next;
2379 comp_iter->val = NULL;
2380 gfc_free_structure_ctor_component (comp_iter);
2381 }
2382 }
2383 return SUCCESS;
2384}
2385
2386
2387gfc_try
2388gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2389 gfc_actual_arglist **arglist,
2390 bool parent)
2391{
2392 gfc_actual_arglist *actual;
2393 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
2394 gfc_constructor_base ctor_head = NULL;
2395 gfc_component *comp; /* Is set NULL when named component is first seen */
2396 const char* last_name = NULL;
2397 locus old_locus;
2398 gfc_expr *expr;
2399
2400 expr = parent ? *cexpr : e;
2401 old_locus = gfc_current_locus;
2402 if (parent)
2403 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2404 else
2405 gfc_current_locus = expr->where;
2406
2407 comp_tail = comp_head = NULL;
2408
2409 if (!parent && sym->attr.abstract)
2410 {
2411 gfc_error ("Can't construct ABSTRACT type '%s' at %L",
2412 sym->name, &expr->where);
2413 goto cleanup;
2414 }
2415
2416 comp = sym->components;
2417 actual = parent ? *arglist : expr->value.function.actual;
2418 for ( ; actual; )
2419 {
2420 gfc_component *this_comp = NULL;
2421
2422 if (!comp_head)
2423 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2424 else
2425 {
2426 comp_tail->next = gfc_get_structure_ctor_component ();
2427 comp_tail = comp_tail->next;
2428 }
2429 if (actual->name)
2430 {
2431 if (gfc_notify_std (GFC_STD_F2003, "Structure"
2432 " constructor with named arguments at %C")
2433 == FAILURE)
2434 goto cleanup;
2435
2436 comp_tail->name = xstrdup (actual->name);
2437 last_name = comp_tail->name;
2438 comp = NULL;
2439 }
2440 else
2441 {
2442 /* Components without name are not allowed after the first named
2443 component initializer! */
2444 if (!comp)
2445 {
2446 if (last_name)
2447 gfc_error ("Component initializer without name after component"
2448 " named %s at %L!", last_name,
2449 actual->expr ? &actual->expr->where
2450 : &gfc_current_locus);
2451 else
2452 gfc_error ("Too many components in structure constructor at "
2453 "%L!", actual->expr ? &actual->expr->where
2454 : &gfc_current_locus);
2455 goto cleanup;
2456 }
2457
2458 comp_tail->name = xstrdup (comp->name);
2459 }
2460
2461 /* Find the current component in the structure definition and check
2462 its access is not private. */
2463 if (comp)
2464 this_comp = gfc_find_component (sym, comp->name, false, false);
2465 else
2466 {
2467 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2468 false, false);
2469 comp = NULL; /* Reset needed! */
2470 }
2471
2472 /* Here we can check if a component name is given which does not
2473 correspond to any component of the defined structure. */
2474 if (!this_comp)
2475 goto cleanup;
2476
2477 comp_tail->val = actual->expr;
2478 if (actual->expr != NULL)
2479 comp_tail->where = actual->expr->where;
2480 actual->expr = NULL;
2481
2482 /* Check if this component is already given a value. */
2483 for (comp_iter = comp_head; comp_iter != comp_tail;
2484 comp_iter = comp_iter->next)
2485 {
2486 gcc_assert (comp_iter);
2487 if (!strcmp (comp_iter->name, comp_tail->name))
2488 {
2489 gfc_error ("Component '%s' is initialized twice in the structure"
2490 " constructor at %L!", comp_tail->name,
2491 comp_tail->val ? &comp_tail->where
2492 : &gfc_current_locus);
2493 goto cleanup;
2494 }
2495 }
2496
2497 /* F2008, R457/C725, for PURE C1283. */
2498 if (this_comp->attr.pointer && comp_tail->val
2499 && gfc_is_coindexed (comp_tail->val))
2500 {
2501 gfc_error ("Coindexed expression to pointer component '%s' in "
2502 "structure constructor at %L!", comp_tail->name,
2503 &comp_tail->where);
2504 goto cleanup;
2505 }
2506
2507 /* If not explicitly a parent constructor, gather up the components
2508 and build one. */
2509 if (comp && comp == sym->components
2510 && sym->attr.extension
2511 && comp_tail->val
2512 && (comp_tail->val->ts.type != BT_DERIVED
2513 ||
2514 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2515 {
2516 gfc_try m;
2517 gfc_actual_arglist *arg_null = NULL;
2518
2519 actual->expr = comp_tail->val;
2520 comp_tail->val = NULL;
2521
2522 m = gfc_convert_to_structure_constructor (NULL,
2523 comp->ts.u.derived, &comp_tail->val,
2524 comp->ts.u.derived->attr.zero_comp
2525 ? &arg_null : &actual, true);
2526 if (m == FAILURE)
2527 goto cleanup;
2528
2529 if (comp->ts.u.derived->attr.zero_comp)
2530 {
2531 comp = comp->next;
2532 continue;
2533 }
2534 }
2535
2536 if (comp)
2537 comp = comp->next;
2538 if (parent && !comp)
2539 break;
2540
2541 actual = actual->next;
2542 }
2543
2544 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2545 goto cleanup;
2546
2547 /* No component should be left, as this should have caused an error in the
2548 loop constructing the component-list (name that does not correspond to any
2549 component in the structure definition). */
2550 if (comp_head && sym->attr.extension)
2551 {
2552 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2553 {
2554 gfc_error ("component '%s' at %L has already been set by a "
2555 "parent derived type constructor", comp_iter->name,
2556 &comp_iter->where);
2557 }
2558 goto cleanup;
2559 }
2560 else
2561 gcc_assert (!comp_head);
2562
2563 if (parent)
2564 {
2565 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2566 expr->ts.u.derived = sym;
2567 expr->value.constructor = ctor_head;
2568 *cexpr = expr;
2569 }
2570 else
2571 {
2572 expr->ts.u.derived = sym;
2573 expr->ts.kind = 0;
2574 expr->ts.type = BT_DERIVED;
2575 expr->value.constructor = ctor_head;
2576 expr->expr_type = EXPR_STRUCTURE;
2577 }
2578
2579 gfc_current_locus = old_locus;
2580 if (parent)
2581 *arglist = actual;
2582 return SUCCESS;
2583
2584 cleanup:
2585 gfc_current_locus = old_locus;
2586
2587 for (comp_iter = comp_head; comp_iter; )
2588 {
2589 gfc_structure_ctor_component *next = comp_iter->next;
2590 gfc_free_structure_ctor_component (comp_iter);
2591 comp_iter = next;
2592 }
2593 gfc_constructor_free (ctor_head);
2594
2595 return FAILURE;
2596}
2597
2598
2599match
2600gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2601{
2602 match m;
2603 gfc_expr *e;
2604 gfc_symtree *symtree;
2605
2606 gfc_get_sym_tree (sym->name, NULL, &symtree, false); /* Can't fail */
2607
2608 e = gfc_get_expr ();
2609 e->symtree = symtree;
2610 e->expr_type = EXPR_FUNCTION;
2611
2612 gcc_assert (sym->attr.flavor == FL_DERIVED
2613 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2614 e->value.function.esym = sym;
2615 e->symtree->n.sym->attr.generic = 1;
2616
2617 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2618 if (m != MATCH_YES)
2619 {
2620 gfc_free_expr (e);
2621 return m;
2622 }
2623
2624 if (gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false)
2625 != SUCCESS)
2626 {
2627 gfc_free_expr (e);
2628 return MATCH_ERROR;
2629 }
2630
2631 *result = e;
2632 return MATCH_YES;
2633}
2634
2635
2636/* If the symbol is an implicit do loop index and implicitly typed,
2637 it should not be host associated. Provide a symtree from the
2638 current namespace. */
2639static match
2640check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2641{
2642 if ((*sym)->attr.flavor == FL_VARIABLE
2643 && (*sym)->ns != gfc_current_ns
2644 && (*sym)->attr.implied_index
2645 && (*sym)->attr.implicit_type
2646 && !(*sym)->attr.use_assoc)
2647 {
2648 int i;
2649 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
2650 if (i)
2651 return MATCH_ERROR;
2652 *sym = (*st)->n.sym;
2653 }
2654 return MATCH_YES;
2655}
2656
2657
2658/* Procedure pointer as function result: Replace the function symbol by the
2659 auto-generated hidden result variable named "ppr@". */
2660
2661static gfc_try
2662replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2663{
2664 /* Check for procedure pointer result variable. */
2665 if ((*sym)->attr.function && !(*sym)->attr.external
2666 && (*sym)->result && (*sym)->result != *sym
2667 && (*sym)->result->attr.proc_pointer
2668 && (*sym) == gfc_current_ns->proc_name
2669 && (*sym) == (*sym)->result->ns->proc_name
2670 && strcmp ("ppr@", (*sym)->result->name) == 0)
2671 {
2672 /* Automatic replacement with "hidden" result variable. */
2673 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2674 *sym = (*sym)->result;
2675 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2676 return SUCCESS;
2677 }
2678 return FAILURE;
2679}
2680
2681
2682/* Matches a variable name followed by anything that might follow it--
2683 array reference, argument list of a function, etc. */
2684
2685match
2686gfc_match_rvalue (gfc_expr **result)
2687{
2688 gfc_actual_arglist *actual_arglist;
2689 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
2690 gfc_state_data *st;
2691 gfc_symbol *sym;
2692 gfc_symtree *symtree;
2693 locus where, old_loc;
2694 gfc_expr *e;
2695 match m, m2;
2696 int i;
2697 gfc_typespec *ts;
2698 bool implicit_char;
2699 gfc_ref *ref;
2700
2701 m = gfc_match_name (name);
2702 if (m != MATCH_YES)
2703 return m;
2704
2705 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2706 && !gfc_current_ns->has_import_set)
2707 i = gfc_get_sym_tree (name, NULL, &symtree, false);
2708 else
2709 i = gfc_get_ha_sym_tree (name, &symtree);
2710
2711 if (i)
2712 return MATCH_ERROR;
2713
2714 sym = symtree->n.sym;
2715 e = NULL;
2716 where = gfc_current_locus;
2717
2718 replace_hidden_procptr_result (&sym, &symtree);
2719
2720 /* If this is an implicit do loop index and implicitly typed,
2721 it should not be host associated. */
2722 m = check_for_implicit_index (&symtree, &sym);
2723 if (m != MATCH_YES)
2724 return m;
2725
2726 gfc_set_sym_referenced (sym);
2727 sym->attr.implied_index = 0;
2728
2729 if (sym->attr.function && sym->result == sym)
2730 {
2731 /* See if this is a directly recursive function call. */
2732 gfc_gobble_whitespace ();
2733 if (sym->attr.recursive
2734 && gfc_peek_ascii_char () == '('
2735 && gfc_current_ns->proc_name == sym
2736 && !sym->attr.dimension)
2737 {
2738 gfc_error ("'%s' at %C is the name of a recursive function "
2739 "and so refers to the result variable. Use an "
2740 "explicit RESULT variable for direct recursion "
2741 "(12.5.2.1)", sym->name);
2742 return MATCH_ERROR;
2743 }
2744
2745 if (gfc_is_function_return_value (sym, gfc_current_ns))
2746 goto variable;
2747
2748 if (sym->attr.entry
2749 && (sym->ns == gfc_current_ns
2750 || sym->ns == gfc_current_ns->parent))
2751 {
2752 gfc_entry_list *el = NULL;
2753
2754 for (el = sym->ns->entries; el; el = el->next)
2755 if (sym == el->sym)
2756 goto variable;
2757 }
2758 }
2759
2760 if (gfc_matching_procptr_assignment)
2761 goto procptr0;
2762
2763 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2764 goto function0;
2765
2766 if (sym->attr.generic)
2767 goto generic_function;
2768
2769 switch (sym->attr.flavor)
2770 {
2771 case FL_VARIABLE:
2772 variable:
2773 e = gfc_get_expr ();
2774
2775 e->expr_type = EXPR_VARIABLE;
2776 e->symtree = symtree;
2777
2778 m = gfc_match_varspec (e, 0, false, true);
2779 break;
2780
2781 case FL_PARAMETER:
2782 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2783 end up here. Unfortunately, sym->value->expr_type is set to
2784 EXPR_CONSTANT, and so the if () branch would be followed without
2785 the !sym->as check. */
2786 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
2787 e = gfc_copy_expr (sym->value);
2788 else
2789 {
2790 e = gfc_get_expr ();
2791 e->expr_type = EXPR_VARIABLE;
2792 }
2793
2794 e->symtree = symtree;
2795 m = gfc_match_varspec (e, 0, false, true);
2796
2797 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2798 break;
2799
2800 /* Variable array references to derived type parameters cause
2801 all sorts of headaches in simplification. Treating such
2802 expressions as variable works just fine for all array
2803 references. */
2804 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
2805 {
2806 for (ref = e->ref; ref; ref = ref->next)
2807 if (ref->type == REF_ARRAY)
2808 break;
2809
2810 if (ref == NULL || ref->u.ar.type == AR_FULL)
2811 break;
2812
2813 ref = e->ref;
2814 e->ref = NULL;
2815 gfc_free_expr (e);
2816 e = gfc_get_expr ();
2817 e->expr_type = EXPR_VARIABLE;
2818 e->symtree = symtree;
2819 e->ref = ref;
2820 }
2821
2822 break;
2823
2824 case FL_DERIVED:
2825 sym = gfc_use_derived (sym);
2826 if (sym == NULL)
2827 m = MATCH_ERROR;
2828 else
2829 goto generic_function;
2830 break;
2831
2832 /* If we're here, then the name is known to be the name of a
2833 procedure, yet it is not sure to be the name of a function. */
2834 case FL_PROCEDURE:
2835
2836 /* Procedure Pointer Assignments. */
2837 procptr0:
2838 if (gfc_matching_procptr_assignment)
2839 {
2840 gfc_gobble_whitespace ();
2841 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
2842 /* Parse functions returning a procptr. */
2843 goto function0;
2844
2845 e = gfc_get_expr ();
2846 e->expr_type = EXPR_VARIABLE;
2847 e->symtree = symtree;
2848 m = gfc_match_varspec (e, 0, false, true);
2849 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
2850 && sym->ts.type == BT_UNKNOWN
2851 && gfc_add_flavor (&sym->attr, FL_PROCEDURE,
2852 sym->name, NULL) == FAILURE)
2853 {
2854 m = MATCH_ERROR;
2855 break;
2856 }
2857 break;
2858 }
2859
2860 if (sym->attr.subroutine)
2861 {
2862 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2863 sym->name);
2864 m = MATCH_ERROR;
2865 break;
2866 }
2867
2868 /* At this point, the name has to be a non-statement function.
2869 If the name is the same as the current function being
2870 compiled, then we have a variable reference (to the function
2871 result) if the name is non-recursive. */
2872
2873 st = gfc_enclosing_unit (NULL);
2874
2875 if (st != NULL && st->state == COMP_FUNCTION
2876 && st->sym == sym
2877 && !sym->attr.recursive)
2878 {
2879 e = gfc_get_expr ();
2880 e->symtree = symtree;
2881 e->expr_type = EXPR_VARIABLE;
2882
2883 m = gfc_match_varspec (e, 0, false, true);
2884 break;
2885 }
2886
2887 /* Match a function reference. */
2888 function0:
2889 m = gfc_match_actual_arglist (0, &actual_arglist);
2890 if (m == MATCH_NO)
2891 {
2892 if (sym->attr.proc == PROC_ST_FUNCTION)
2893 gfc_error ("Statement function '%s' requires argument list at %C",
2894 sym->name);
2895 else
2896 gfc_error ("Function '%s' requires an argument list at %C",
2897 sym->name);
2898
2899 m = MATCH_ERROR;
2900 break;
2901 }
2902
2903 if (m != MATCH_YES)
2904 {
2905 m = MATCH_ERROR;
2906 break;
2907 }
2908
2909 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2910 sym = symtree->n.sym;
2911
2912 replace_hidden_procptr_result (&sym, &symtree);
2913
2914 e = gfc_get_expr ();
2915 e->symtree = symtree;
2916 e->expr_type = EXPR_FUNCTION;
2917 e->value.function.actual = actual_arglist;
2918 e->where = gfc_current_locus;
2919
2920 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2921 && CLASS_DATA (sym)->as)
2922 e->rank = CLASS_DATA (sym)->as->rank;
2923 else if (sym->as != NULL)
2924 e->rank = sym->as->rank;
2925
2926 if (!sym->attr.function
2927 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2928 {
2929 m = MATCH_ERROR;
2930 break;
2931 }
2932
2933 /* Check here for the existence of at least one argument for the
2934 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2935 argument(s) given will be checked in gfc_iso_c_func_interface,
2936 during resolution of the function call. */
2937 if (sym->attr.is_iso_c == 1
2938 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2939 && (sym->intmod_sym_id == ISOCBINDING_LOC
2940 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2941 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2942 {
2943 /* make sure we were given a param */
2944 if (actual_arglist == NULL)
2945 {
2946 gfc_error ("Missing argument to '%s' at %C", sym->name);
2947 m = MATCH_ERROR;
2948 break;
2949 }
2950 }
2951
2952 if (sym->result == NULL)
2953 sym->result = sym;
2954
2955 m = MATCH_YES;
2956 break;
2957
2958 case FL_UNKNOWN:
2959
2960 /* Special case for derived type variables that get their types
2961 via an IMPLICIT statement. This can't wait for the
2962 resolution phase. */
2963
2964 if (gfc_peek_ascii_char () == '%'
2965 && sym->ts.type == BT_UNKNOWN
2966 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2967 gfc_set_default_type (sym, 0, sym->ns);
2968
2969 /* If the symbol has a (co)dimension attribute, the expression is a
2970 variable. */
2971
2972 if (sym->attr.dimension || sym->attr.codimension)
2973 {
2974 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2975 sym->name, NULL) == FAILURE)
2976 {
2977 m = MATCH_ERROR;
2978 break;
2979 }
2980
2981 e = gfc_get_expr ();
2982 e->symtree = symtree;
2983 e->expr_type = EXPR_VARIABLE;
2984 m = gfc_match_varspec (e, 0, false, true);
2985 break;
2986 }
2987
2988 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2989 && (CLASS_DATA (sym)->attr.dimension
2990 || CLASS_DATA (sym)->attr.codimension))
2991 {
2992 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2993 sym->name, NULL) == FAILURE)
2994 {
2995 m = MATCH_ERROR;
2996 break;
2997 }
2998
2999 e = gfc_get_expr ();
3000 e->symtree = symtree;
3001 e->expr_type = EXPR_VARIABLE;
3002 m = gfc_match_varspec (e, 0, false, true);
3003 break;
3004 }
3005
3006 /* Name is not an array, so we peek to see if a '(' implies a
3007 function call or a substring reference. Otherwise the
3008 variable is just a scalar. */
3009
3010 gfc_gobble_whitespace ();
3011 if (gfc_peek_ascii_char () != '(')
3012 {
3013 /* Assume a scalar variable */
3014 e = gfc_get_expr ();
3015 e->symtree = symtree;
3016 e->expr_type = EXPR_VARIABLE;
3017
3018 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
3019 sym->name, NULL) == FAILURE)
3020 {
3021 m = MATCH_ERROR;
3022 break;
3023 }
3024
3025 /*FIXME:??? gfc_match_varspec does set this for us: */
3026 e->ts = sym->ts;
3027 m = gfc_match_varspec (e, 0, false, true);
3028 break;
3029 }
3030
3031 /* See if this is a function reference with a keyword argument
3032 as first argument. We do this because otherwise a spurious
3033 symbol would end up in the symbol table. */
3034
3035 old_loc = gfc_current_locus;
3036 m2 = gfc_match (" ( %n =", argname);
3037 gfc_current_locus = old_loc;
3038
3039 e = gfc_get_expr ();
3040 e->symtree = symtree;
3041
3042 if (m2 != MATCH_YES)
3043 {
3044 /* Try to figure out whether we're dealing with a character type.
3045 We're peeking ahead here, because we don't want to call
3046 match_substring if we're dealing with an implicitly typed
3047 non-character variable. */
3048 implicit_char = false;
3049 if (sym->ts.type == BT_UNKNOWN)
3050 {
3051 ts = gfc_get_default_type (sym->name, NULL);
3052 if (ts->type == BT_CHARACTER)
3053 implicit_char = true;
3054 }
3055
3056 /* See if this could possibly be a substring reference of a name
3057 that we're not sure is a variable yet. */
3058
3059 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3060 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
3061 {
3062
3063 e->expr_type = EXPR_VARIABLE;
3064
3065 if (sym->attr.flavor != FL_VARIABLE
3066 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
3067 sym->name, NULL) == FAILURE)
3068 {
3069 m = MATCH_ERROR;
3070 break;
3071 }
3072
3073 if (sym->ts.type == BT_UNKNOWN
3074 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
3075 {
3076 m = MATCH_ERROR;
3077 break;
3078 }
3079
3080 e->ts = sym->ts;
3081 if (e->ref)
3082 e->ts.u.cl = NULL;
3083 m = MATCH_YES;
3084 break;
3085 }
3086 }
3087
3088 /* Give up, assume we have a function. */
3089
3090 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3091 sym = symtree->n.sym;
3092 e->expr_type = EXPR_FUNCTION;
3093
3094 if (!sym->attr.function
3095 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
3096 {
3097 m = MATCH_ERROR;
3098 break;
3099 }
3100
3101 sym->result = sym;
3102
3103 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3104 if (m == MATCH_NO)
3105 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
3106
3107 if (m != MATCH_YES)
3108 {
3109 m = MATCH_ERROR;
3110 break;
3111 }
3112
3113 /* If our new function returns a character, array or structure
3114 type, it might have subsequent references. */
3115
3116 m = gfc_match_varspec (e, 0, false, true);
3117 if (m == MATCH_NO)
3118 m = MATCH_YES;
3119
3120 break;
3121
3122 generic_function:
3123 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3124
3125 e = gfc_get_expr ();
3126 e->symtree = symtree;
3127 e->expr_type = EXPR_FUNCTION;
3128
3129 if (sym->attr.flavor == FL_DERIVED)
3130 {
3131 e->value.function.esym = sym;
3132 e->symtree->n.sym->attr.generic = 1;
3133 }
3134
3135 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3136 break;
3137
3138 default:
3139 gfc_error ("Symbol at %C is not appropriate for an expression");
3140 return MATCH_ERROR;
3141 }
3142
3143 if (m == MATCH_YES)
3144 {
3145 e->where = where;
3146 *result = e;
3147 }
3148 else
3149 gfc_free_expr (e);
3150
3151 return m;
3152}
3153
3154
3155/* Match a variable, i.e. something that can be assigned to. This
3156 starts as a symbol, can be a structure component or an array
3157 reference. It can be a function if the function doesn't have a
3158 separate RESULT variable. If the symbol has not been previously
3159 seen, we assume it is a variable.
3160
3161 This function is called by two interface functions:
3162 gfc_match_variable, which has host_flag = 1, and
3163 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3164 match of the symbol to the local scope. */
3165
3166static match
3167match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3168{
3169 gfc_symbol *sym;
3170 gfc_symtree *st;
3171 gfc_expr *expr;
3172 locus where;
3173 match m;
3174
3175 /* Since nothing has any business being an lvalue in a module
3176 specification block, an interface block or a contains section,
3177 we force the changed_symbols mechanism to work by setting
3178 host_flag to 0. This prevents valid symbols that have the name
3179 of keywords, such as 'end', being turned into variables by
3180 failed matching to assignments for, e.g., END INTERFACE. */
3181 if (gfc_current_state () == COMP_MODULE
3182 || gfc_current_state () == COMP_INTERFACE
3183 || gfc_current_state () == COMP_CONTAINS)
3184 host_flag = 0;
3185
3186 where = gfc_current_locus;
3187 m = gfc_match_sym_tree (&st, host_flag);
3188 if (m != MATCH_YES)
3189 return m;
3190
3191 sym = st->n.sym;
3192
3193 /* If this is an implicit do loop index and implicitly typed,
3194 it should not be host associated. */
3195 m = check_for_implicit_index (&st, &sym);
3196 if (m != MATCH_YES)
3197 return m;
3198
3199 sym->attr.implied_index = 0;
3200
3201 gfc_set_sym_referenced (sym);
3202 switch (sym->attr.flavor)
3203 {
3204 case FL_VARIABLE:
3205 /* Everything is alright. */
3206 break;
3207
3208 case FL_UNKNOWN:
3209 {
3210 sym_flavor flavor = FL_UNKNOWN;
3211
3212 gfc_gobble_whitespace ();
3213
3214 if (sym->attr.external || sym->attr.procedure
3215 || sym->attr.function || sym->attr.subroutine)
3216 flavor = FL_PROCEDURE;
3217
3218 /* If it is not a procedure, is not typed and is host associated,
3219 we cannot give it a flavor yet. */
3220 else if (sym->ns == gfc_current_ns->parent
3221 && sym->ts.type == BT_UNKNOWN)
3222 break;
3223
3224 /* These are definitive indicators that this is a variable. */
3225 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3226 || sym->attr.pointer || sym->as != NULL)
3227 flavor = FL_VARIABLE;
3228
3229 if (flavor != FL_UNKNOWN
3230 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3231 return MATCH_ERROR;
3232 }
3233 break;
3234
3235 case FL_PARAMETER:
3236 if (equiv_flag)
3237 {
3238 gfc_error ("Named constant at %C in an EQUIVALENCE");
3239 return MATCH_ERROR;
3240 }
3241 /* Otherwise this is checked for and an error given in the
3242 variable definition context checks. */
3243 break;
3244
3245 case FL_PROCEDURE:
3246 /* Check for a nonrecursive function result variable. */
3247 if (sym->attr.function
3248 && !sym->attr.external
3249 && sym->result == sym
3250 && (gfc_is_function_return_value (sym, gfc_current_ns)
3251 || (sym->attr.entry
3252 && sym->ns == gfc_current_ns)
3253 || (sym->attr.entry
3254 && sym->ns == gfc_current_ns->parent)))
3255 {
3256 /* If a function result is a derived type, then the derived
3257 type may still have to be resolved. */
3258
3259 if (sym->ts.type == BT_DERIVED
3260 && gfc_use_derived (sym->ts.u.derived) == NULL)
3261 return MATCH_ERROR;
3262 break;
3263 }
3264
3265 if (sym->attr.proc_pointer
3266 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3267 break;
3268
3269 /* Fall through to error */
3270
3271 default:
3272 gfc_error ("'%s' at %C is not a variable", sym->name);
3273 return MATCH_ERROR;
3274 }
3275
3276 /* Special case for derived type variables that get their types
3277 via an IMPLICIT statement. This can't wait for the
3278 resolution phase. */
3279
3280 {
3281 gfc_namespace * implicit_ns;
3282
3283 if (gfc_current_ns->proc_name == sym)
3284 implicit_ns = gfc_current_ns;
3285 else
3286 implicit_ns = sym->ns;
3287
3288 if (gfc_peek_ascii_char () == '%'
3289 && sym->ts.type == BT_UNKNOWN
3290 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3291 gfc_set_default_type (sym, 0, implicit_ns);
3292 }
3293
3294 expr = gfc_get_expr ();
3295
3296 expr->expr_type = EXPR_VARIABLE;
3297 expr->symtree = st;
3298 expr->ts = sym->ts;
3299 expr->where = where;
3300
3301 /* Now see if we have to do more. */
3302 m = gfc_match_varspec (expr, equiv_flag, false, false);
3303 if (m != MATCH_YES)
3304 {
3305 gfc_free_expr (expr);
3306 return m;
3307 }
3308
3309 *result = expr;
3310 return MATCH_YES;
3311}
3312
3313
3314match
3315gfc_match_variable (gfc_expr **result, int equiv_flag)
3316{
3317 return match_variable (result, equiv_flag, 1);
3318}
3319
3320
3321match
3322gfc_match_equiv_variable (gfc_expr **result)
3323{
3324 return match_variable (result, 1, 0);
3325}
3326