re PR fortran/48820 (TR 29113: Implement parts needed for MPI 3)
[gcc.git] / gcc / fortran / primary.c
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
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along 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 "flags.h"
26 #include "gfortran.h"
27 #include "arith.h"
28 #include "match.h"
29 #include "parse.h"
30 #include "constructor.h"
31
32 int matching_actual_arglist = 0;
33
34 /* Matches a kind-parameter expression, which is either a named
35 symbolic constant or a nonnegative integer constant. If
36 successful, sets the kind value to the correct integer.
37 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
38 symbol like e.g. 'c_int'. */
39
40 static match
41 match_kind_param (int *kind, int *is_iso_c)
42 {
43 char name[GFC_MAX_SYMBOL_LEN + 1];
44 gfc_symbol *sym;
45 const char *p;
46 match m;
47
48 *is_iso_c = 0;
49
50 m = gfc_match_small_literal_int (kind, NULL);
51 if (m != MATCH_NO)
52 return m;
53
54 m = gfc_match_name (name);
55 if (m != MATCH_YES)
56 return m;
57
58 if (gfc_find_symbol (name, NULL, 1, &sym))
59 return MATCH_ERROR;
60
61 if (sym == NULL)
62 return MATCH_NO;
63
64 *is_iso_c = sym->attr.is_iso_c;
65
66 if (sym->attr.flavor != FL_PARAMETER)
67 return MATCH_NO;
68
69 if (sym->value == NULL)
70 return MATCH_NO;
71
72 p = gfc_extract_int (sym->value, kind);
73 if (p != NULL)
74 return MATCH_NO;
75
76 gfc_set_sym_referenced (sym);
77
78 if (*kind < 0)
79 return MATCH_NO;
80
81 return MATCH_YES;
82 }
83
84
85 /* Get a trailing kind-specification for non-character variables.
86 Returns:
87 * the integer kind value or
88 * -1 if an error was generated,
89 * -2 if no kind was found.
90 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
91 symbol like e.g. 'c_int'. */
92
93 static int
94 get_kind (int *is_iso_c)
95 {
96 int kind;
97 match m;
98
99 *is_iso_c = 0;
100
101 if (gfc_match_char ('_') != MATCH_YES)
102 return -2;
103
104 m = match_kind_param (&kind, is_iso_c);
105 if (m == MATCH_NO)
106 gfc_error ("Missing kind-parameter at %C");
107
108 return (m == MATCH_YES) ? kind : -1;
109 }
110
111
112 /* Given a character and a radix, see if the character is a valid
113 digit in that radix. */
114
115 int
116 gfc_check_digit (char c, int radix)
117 {
118 int r;
119
120 switch (radix)
121 {
122 case 2:
123 r = ('0' <= c && c <= '1');
124 break;
125
126 case 8:
127 r = ('0' <= c && c <= '7');
128 break;
129
130 case 10:
131 r = ('0' <= c && c <= '9');
132 break;
133
134 case 16:
135 r = ISXDIGIT (c);
136 break;
137
138 default:
139 gfc_internal_error ("gfc_check_digit(): bad radix");
140 }
141
142 return r;
143 }
144
145
146 /* Match the digit string part of an integer if signflag is not set,
147 the signed digit string part if signflag is set. If the buffer
148 is NULL, we just count characters for the resolution pass. Returns
149 the number of characters matched, -1 for no match. */
150
151 static int
152 match_digits (int signflag, int radix, char *buffer)
153 {
154 locus old_loc;
155 int length;
156 char c;
157
158 length = 0;
159 c = gfc_next_ascii_char ();
160
161 if (signflag && (c == '+' || c == '-'))
162 {
163 if (buffer != NULL)
164 *buffer++ = c;
165 gfc_gobble_whitespace ();
166 c = gfc_next_ascii_char ();
167 length++;
168 }
169
170 if (!gfc_check_digit (c, radix))
171 return -1;
172
173 length++;
174 if (buffer != NULL)
175 *buffer++ = c;
176
177 for (;;)
178 {
179 old_loc = gfc_current_locus;
180 c = gfc_next_ascii_char ();
181
182 if (!gfc_check_digit (c, radix))
183 break;
184
185 if (buffer != NULL)
186 *buffer++ = c;
187 length++;
188 }
189
190 gfc_current_locus = old_loc;
191
192 return length;
193 }
194
195
196 /* Match an integer (digit string and optional kind).
197 A sign will be accepted if signflag is set. */
198
199 static match
200 match_integer_constant (gfc_expr **result, int signflag)
201 {
202 int length, kind, is_iso_c;
203 locus old_loc;
204 char *buffer;
205 gfc_expr *e;
206
207 old_loc = gfc_current_locus;
208 gfc_gobble_whitespace ();
209
210 length = match_digits (signflag, 10, NULL);
211 gfc_current_locus = old_loc;
212 if (length == -1)
213 return MATCH_NO;
214
215 buffer = (char *) alloca (length + 1);
216 memset (buffer, '\0', length + 1);
217
218 gfc_gobble_whitespace ();
219
220 match_digits (signflag, 10, buffer);
221
222 kind = get_kind (&is_iso_c);
223 if (kind == -2)
224 kind = gfc_default_integer_kind;
225 if (kind == -1)
226 return MATCH_ERROR;
227
228 if (kind == 4 && gfc_option.flag_integer4_kind == 8)
229 kind = 8;
230
231 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
232 {
233 gfc_error ("Integer kind %d at %C not available", kind);
234 return MATCH_ERROR;
235 }
236
237 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
238 e->ts.is_c_interop = is_iso_c;
239
240 if (gfc_range_check (e) != ARITH_OK)
241 {
242 gfc_error ("Integer too big for its kind at %C. This check can be "
243 "disabled with the option -fno-range-check");
244
245 gfc_free_expr (e);
246 return MATCH_ERROR;
247 }
248
249 *result = e;
250 return MATCH_YES;
251 }
252
253
254 /* Match a Hollerith constant. */
255
256 static match
257 match_hollerith_constant (gfc_expr **result)
258 {
259 locus old_loc;
260 gfc_expr *e = NULL;
261 const char *msg;
262 int num, pad;
263 int i;
264
265 old_loc = gfc_current_locus;
266 gfc_gobble_whitespace ();
267
268 if (match_integer_constant (&e, 0) == MATCH_YES
269 && gfc_match_char ('h') == MATCH_YES)
270 {
271 if (gfc_notify_std (GFC_STD_LEGACY, "Extension: Hollerith constant "
272 "at %C") == FAILURE)
273 goto cleanup;
274
275 msg = gfc_extract_int (e, &num);
276 if (msg != NULL)
277 {
278 gfc_error (msg);
279 goto cleanup;
280 }
281 if (num == 0)
282 {
283 gfc_error ("Invalid Hollerith constant: %L must contain at least "
284 "one character", &old_loc);
285 goto cleanup;
286 }
287 if (e->ts.kind != gfc_default_integer_kind)
288 {
289 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
290 "should be default", &old_loc);
291 goto cleanup;
292 }
293 else
294 {
295 gfc_free_expr (e);
296 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
297 &gfc_current_locus);
298
299 /* Calculate padding needed to fit default integer memory. */
300 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
301
302 e->representation.string = XCNEWVEC (char, num + pad + 1);
303
304 for (i = 0; i < num; i++)
305 {
306 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
307 if (! gfc_wide_fits_in_byte (c))
308 {
309 gfc_error ("Invalid Hollerith constant at %L contains a "
310 "wide character", &old_loc);
311 goto cleanup;
312 }
313
314 e->representation.string[i] = (unsigned char) c;
315 }
316
317 /* Now pad with blanks and end with a null char. */
318 for (i = 0; i < pad; i++)
319 e->representation.string[num + i] = ' ';
320
321 e->representation.string[num + i] = '\0';
322 e->representation.length = num + pad;
323 e->ts.u.pad = pad;
324
325 *result = e;
326 return MATCH_YES;
327 }
328 }
329
330 gfc_free_expr (e);
331 gfc_current_locus = old_loc;
332 return MATCH_NO;
333
334 cleanup:
335 gfc_free_expr (e);
336 return MATCH_ERROR;
337 }
338
339
340 /* Match a binary, octal or hexadecimal constant that can be found in
341 a DATA statement. The standard permits b'010...', o'73...', and
342 z'a1...' where b, o, and z can be capital letters. This function
343 also accepts postfixed forms of the constants: '01...'b, '73...'o,
344 and 'a1...'z. An additional extension is the use of x for z. */
345
346 static match
347 match_boz_constant (gfc_expr **result)
348 {
349 int radix, length, x_hex, kind;
350 locus old_loc, start_loc;
351 char *buffer, post, delim;
352 gfc_expr *e;
353
354 start_loc = old_loc = gfc_current_locus;
355 gfc_gobble_whitespace ();
356
357 x_hex = 0;
358 switch (post = gfc_next_ascii_char ())
359 {
360 case 'b':
361 radix = 2;
362 post = 0;
363 break;
364 case 'o':
365 radix = 8;
366 post = 0;
367 break;
368 case 'x':
369 x_hex = 1;
370 /* Fall through. */
371 case 'z':
372 radix = 16;
373 post = 0;
374 break;
375 case '\'':
376 /* Fall through. */
377 case '\"':
378 delim = post;
379 post = 1;
380 radix = 16; /* Set to accept any valid digit string. */
381 break;
382 default:
383 goto backup;
384 }
385
386 /* No whitespace allowed here. */
387
388 if (post == 0)
389 delim = gfc_next_ascii_char ();
390
391 if (delim != '\'' && delim != '\"')
392 goto backup;
393
394 if (x_hex
395 && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
396 "constant at %C uses non-standard syntax")
397 == FAILURE))
398 return MATCH_ERROR;
399
400 old_loc = gfc_current_locus;
401
402 length = match_digits (0, radix, NULL);
403 if (length == -1)
404 {
405 gfc_error ("Empty set of digits in BOZ constant at %C");
406 return MATCH_ERROR;
407 }
408
409 if (gfc_next_ascii_char () != delim)
410 {
411 gfc_error ("Illegal character in BOZ constant at %C");
412 return MATCH_ERROR;
413 }
414
415 if (post == 1)
416 {
417 switch (gfc_next_ascii_char ())
418 {
419 case 'b':
420 radix = 2;
421 break;
422 case 'o':
423 radix = 8;
424 break;
425 case 'x':
426 /* Fall through. */
427 case 'z':
428 radix = 16;
429 break;
430 default:
431 goto backup;
432 }
433
434 if (gfc_notify_std (GFC_STD_GNU, "Extension: BOZ constant "
435 "at %C uses non-standard postfix syntax")
436 == FAILURE)
437 return MATCH_ERROR;
438 }
439
440 gfc_current_locus = old_loc;
441
442 buffer = (char *) alloca (length + 1);
443 memset (buffer, '\0', length + 1);
444
445 match_digits (0, radix, buffer);
446 gfc_next_ascii_char (); /* Eat delimiter. */
447 if (post == 1)
448 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
449
450 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
451 "If a data-stmt-constant is a boz-literal-constant, the corresponding
452 variable shall be of type integer. The boz-literal-constant is treated
453 as if it were an int-literal-constant with a kind-param that specifies
454 the representation method with the largest decimal exponent range
455 supported by the processor." */
456
457 kind = gfc_max_integer_kind;
458 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
459
460 /* Mark as boz variable. */
461 e->is_boz = 1;
462
463 if (gfc_range_check (e) != ARITH_OK)
464 {
465 gfc_error ("Integer too big for integer kind %i at %C", kind);
466 gfc_free_expr (e);
467 return MATCH_ERROR;
468 }
469
470 if (!gfc_in_match_data ()
471 && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BOZ used outside a DATA "
472 "statement at %C")
473 == FAILURE))
474 return MATCH_ERROR;
475
476 *result = e;
477 return MATCH_YES;
478
479 backup:
480 gfc_current_locus = start_loc;
481 return MATCH_NO;
482 }
483
484
485 /* Match a real constant of some sort. Allow a signed constant if signflag
486 is nonzero. */
487
488 static match
489 match_real_constant (gfc_expr **result, int signflag)
490 {
491 int kind, count, seen_dp, seen_digits, is_iso_c;
492 locus old_loc, temp_loc;
493 char *p, *buffer, c, exp_char;
494 gfc_expr *e;
495 bool negate;
496
497 old_loc = gfc_current_locus;
498 gfc_gobble_whitespace ();
499
500 e = NULL;
501
502 count = 0;
503 seen_dp = 0;
504 seen_digits = 0;
505 exp_char = ' ';
506 negate = FALSE;
507
508 c = gfc_next_ascii_char ();
509 if (signflag && (c == '+' || c == '-'))
510 {
511 if (c == '-')
512 negate = TRUE;
513
514 gfc_gobble_whitespace ();
515 c = gfc_next_ascii_char ();
516 }
517
518 /* Scan significand. */
519 for (;; c = gfc_next_ascii_char (), count++)
520 {
521 if (c == '.')
522 {
523 if (seen_dp)
524 goto done;
525
526 /* Check to see if "." goes with a following operator like
527 ".eq.". */
528 temp_loc = gfc_current_locus;
529 c = gfc_next_ascii_char ();
530
531 if (c == 'e' || c == 'd' || c == 'q')
532 {
533 c = gfc_next_ascii_char ();
534 if (c == '.')
535 goto done; /* Operator named .e. or .d. */
536 }
537
538 if (ISALPHA (c))
539 goto done; /* Distinguish 1.e9 from 1.eq.2 */
540
541 gfc_current_locus = temp_loc;
542 seen_dp = 1;
543 continue;
544 }
545
546 if (ISDIGIT (c))
547 {
548 seen_digits = 1;
549 continue;
550 }
551
552 break;
553 }
554
555 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
556 goto done;
557 exp_char = c;
558
559
560 if (c == 'q')
561 {
562 if (gfc_notify_std (GFC_STD_GNU, "Extension: exponent-letter 'q' in "
563 "real-literal-constant at %C") == FAILURE)
564 return MATCH_ERROR;
565 else if (gfc_option.warn_real_q_constant)
566 gfc_warning("Extension: exponent-letter 'q' in real-literal-constant "
567 "at %C");
568 }
569
570 /* Scan exponent. */
571 c = gfc_next_ascii_char ();
572 count++;
573
574 if (c == '+' || c == '-')
575 { /* optional sign */
576 c = gfc_next_ascii_char ();
577 count++;
578 }
579
580 if (!ISDIGIT (c))
581 {
582 gfc_error ("Missing exponent in real number at %C");
583 return MATCH_ERROR;
584 }
585
586 while (ISDIGIT (c))
587 {
588 c = gfc_next_ascii_char ();
589 count++;
590 }
591
592 done:
593 /* Check that we have a numeric constant. */
594 if (!seen_digits || (!seen_dp && exp_char == ' '))
595 {
596 gfc_current_locus = old_loc;
597 return MATCH_NO;
598 }
599
600 /* Convert the number. */
601 gfc_current_locus = old_loc;
602 gfc_gobble_whitespace ();
603
604 buffer = (char *) alloca (count + 1);
605 memset (buffer, '\0', count + 1);
606
607 p = buffer;
608 c = gfc_next_ascii_char ();
609 if (c == '+' || c == '-')
610 {
611 gfc_gobble_whitespace ();
612 c = gfc_next_ascii_char ();
613 }
614
615 /* Hack for mpfr_set_str(). */
616 for (;;)
617 {
618 if (c == 'd' || c == 'q')
619 *p = 'e';
620 else
621 *p = c;
622 p++;
623 if (--count == 0)
624 break;
625
626 c = gfc_next_ascii_char ();
627 }
628
629 kind = get_kind (&is_iso_c);
630 if (kind == -1)
631 goto cleanup;
632
633 switch (exp_char)
634 {
635 case 'd':
636 if (kind != -2)
637 {
638 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
639 "kind");
640 goto cleanup;
641 }
642 kind = gfc_default_double_kind;
643
644 if (kind == 4)
645 {
646 if (gfc_option.flag_real4_kind == 8)
647 kind = 8;
648 if (gfc_option.flag_real4_kind == 10)
649 kind = 10;
650 if (gfc_option.flag_real4_kind == 16)
651 kind = 16;
652 }
653
654 if (kind == 8)
655 {
656 if (gfc_option.flag_real8_kind == 4)
657 kind = 4;
658 if (gfc_option.flag_real8_kind == 10)
659 kind = 10;
660 if (gfc_option.flag_real8_kind == 16)
661 kind = 16;
662 }
663 break;
664
665 case 'q':
666 if (kind != -2)
667 {
668 gfc_error ("Real number at %C has a 'q' exponent and an explicit "
669 "kind");
670 goto cleanup;
671 }
672
673 /* The maximum possible real kind type parameter is 16. First, try
674 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
675 extended precision. If neither value works, just given up. */
676 kind = 16;
677 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
678 {
679 kind = 10;
680 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
681 {
682 gfc_error ("Invalid exponent-letter 'q' in "
683 "real-literal-constant at %C");
684 goto cleanup;
685 }
686 }
687 break;
688
689 default:
690 if (kind == -2)
691 kind = gfc_default_real_kind;
692
693 if (kind == 4)
694 {
695 if (gfc_option.flag_real4_kind == 8)
696 kind = 8;
697 if (gfc_option.flag_real4_kind == 10)
698 kind = 10;
699 if (gfc_option.flag_real4_kind == 16)
700 kind = 16;
701 }
702
703 if (kind == 8)
704 {
705 if (gfc_option.flag_real8_kind == 4)
706 kind = 4;
707 if (gfc_option.flag_real8_kind == 10)
708 kind = 10;
709 if (gfc_option.flag_real8_kind == 16)
710 kind = 16;
711 }
712
713 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
714 {
715 gfc_error ("Invalid real kind %d at %C", kind);
716 goto cleanup;
717 }
718 }
719
720 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
721 if (negate)
722 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
723 e->ts.is_c_interop = is_iso_c;
724
725 switch (gfc_range_check (e))
726 {
727 case ARITH_OK:
728 break;
729 case ARITH_OVERFLOW:
730 gfc_error ("Real constant overflows its kind at %C");
731 goto cleanup;
732
733 case ARITH_UNDERFLOW:
734 if (gfc_option.warn_underflow)
735 gfc_warning ("Real constant underflows its kind at %C");
736 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
737 break;
738
739 default:
740 gfc_internal_error ("gfc_range_check() returned bad value");
741 }
742
743 *result = e;
744 return MATCH_YES;
745
746 cleanup:
747 gfc_free_expr (e);
748 return MATCH_ERROR;
749 }
750
751
752 /* Match a substring reference. */
753
754 static match
755 match_substring (gfc_charlen *cl, int init, gfc_ref **result)
756 {
757 gfc_expr *start, *end;
758 locus old_loc;
759 gfc_ref *ref;
760 match m;
761
762 start = NULL;
763 end = NULL;
764
765 old_loc = gfc_current_locus;
766
767 m = gfc_match_char ('(');
768 if (m != MATCH_YES)
769 return MATCH_NO;
770
771 if (gfc_match_char (':') != MATCH_YES)
772 {
773 if (init)
774 m = gfc_match_init_expr (&start);
775 else
776 m = gfc_match_expr (&start);
777
778 if (m != MATCH_YES)
779 {
780 m = MATCH_NO;
781 goto cleanup;
782 }
783
784 m = gfc_match_char (':');
785 if (m != MATCH_YES)
786 goto cleanup;
787 }
788
789 if (gfc_match_char (')') != MATCH_YES)
790 {
791 if (init)
792 m = gfc_match_init_expr (&end);
793 else
794 m = gfc_match_expr (&end);
795
796 if (m == MATCH_NO)
797 goto syntax;
798 if (m == MATCH_ERROR)
799 goto cleanup;
800
801 m = gfc_match_char (')');
802 if (m == MATCH_NO)
803 goto syntax;
804 }
805
806 /* Optimize away the (:) reference. */
807 if (start == NULL && end == NULL)
808 ref = NULL;
809 else
810 {
811 ref = gfc_get_ref ();
812
813 ref->type = REF_SUBSTRING;
814 if (start == NULL)
815 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
816 ref->u.ss.start = start;
817 if (end == NULL && cl)
818 end = gfc_copy_expr (cl->length);
819 ref->u.ss.end = end;
820 ref->u.ss.length = cl;
821 }
822
823 *result = ref;
824 return MATCH_YES;
825
826 syntax:
827 gfc_error ("Syntax error in SUBSTRING specification at %C");
828 m = MATCH_ERROR;
829
830 cleanup:
831 gfc_free_expr (start);
832 gfc_free_expr (end);
833
834 gfc_current_locus = old_loc;
835 return m;
836 }
837
838
839 /* Reads the next character of a string constant, taking care to
840 return doubled delimiters on the input as a single instance of
841 the delimiter.
842
843 Special return values for "ret" argument are:
844 -1 End of the string, as determined by the delimiter
845 -2 Unterminated string detected
846
847 Backslash codes are also expanded at this time. */
848
849 static gfc_char_t
850 next_string_char (gfc_char_t delimiter, int *ret)
851 {
852 locus old_locus;
853 gfc_char_t c;
854
855 c = gfc_next_char_literal (INSTRING_WARN);
856 *ret = 0;
857
858 if (c == '\n')
859 {
860 *ret = -2;
861 return 0;
862 }
863
864 if (gfc_option.flag_backslash && c == '\\')
865 {
866 old_locus = gfc_current_locus;
867
868 if (gfc_match_special_char (&c) == MATCH_NO)
869 gfc_current_locus = old_locus;
870
871 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
872 gfc_warning ("Extension: backslash character at %C");
873 }
874
875 if (c != delimiter)
876 return c;
877
878 old_locus = gfc_current_locus;
879 c = gfc_next_char_literal (NONSTRING);
880
881 if (c == delimiter)
882 return c;
883 gfc_current_locus = old_locus;
884
885 *ret = -1;
886 return 0;
887 }
888
889
890 /* Special case of gfc_match_name() that matches a parameter kind name
891 before a string constant. This takes case of the weird but legal
892 case of:
893
894 kind_____'string'
895
896 where kind____ is a parameter. gfc_match_name() will happily slurp
897 up all the underscores, which leads to problems. If we return
898 MATCH_YES, the parse pointer points to the final underscore, which
899 is not part of the name. We never return MATCH_ERROR-- errors in
900 the name will be detected later. */
901
902 static match
903 match_charkind_name (char *name)
904 {
905 locus old_loc;
906 char c, peek;
907 int len;
908
909 gfc_gobble_whitespace ();
910 c = gfc_next_ascii_char ();
911 if (!ISALPHA (c))
912 return MATCH_NO;
913
914 *name++ = c;
915 len = 1;
916
917 for (;;)
918 {
919 old_loc = gfc_current_locus;
920 c = gfc_next_ascii_char ();
921
922 if (c == '_')
923 {
924 peek = gfc_peek_ascii_char ();
925
926 if (peek == '\'' || peek == '\"')
927 {
928 gfc_current_locus = old_loc;
929 *name = '\0';
930 return MATCH_YES;
931 }
932 }
933
934 if (!ISALNUM (c)
935 && c != '_'
936 && (c != '$' || !gfc_option.flag_dollar_ok))
937 break;
938
939 *name++ = c;
940 if (++len > GFC_MAX_SYMBOL_LEN)
941 break;
942 }
943
944 return MATCH_NO;
945 }
946
947
948 /* See if the current input matches a character constant. Lots of
949 contortions have to be done to match the kind parameter which comes
950 before the actual string. The main consideration is that we don't
951 want to error out too quickly. For example, we don't actually do
952 any validation of the kinds until we have actually seen a legal
953 delimiter. Using match_kind_param() generates errors too quickly. */
954
955 static match
956 match_string_constant (gfc_expr **result)
957 {
958 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
959 int i, kind, length, warn_ampersand, ret;
960 locus old_locus, start_locus;
961 gfc_symbol *sym;
962 gfc_expr *e;
963 const char *q;
964 match m;
965 gfc_char_t c, delimiter, *p;
966
967 old_locus = gfc_current_locus;
968
969 gfc_gobble_whitespace ();
970
971 c = gfc_next_char ();
972 if (c == '\'' || c == '"')
973 {
974 kind = gfc_default_character_kind;
975 start_locus = gfc_current_locus;
976 goto got_delim;
977 }
978
979 if (gfc_wide_is_digit (c))
980 {
981 kind = 0;
982
983 while (gfc_wide_is_digit (c))
984 {
985 kind = kind * 10 + c - '0';
986 if (kind > 9999999)
987 goto no_match;
988 c = gfc_next_char ();
989 }
990
991 }
992 else
993 {
994 gfc_current_locus = old_locus;
995
996 m = match_charkind_name (name);
997 if (m != MATCH_YES)
998 goto no_match;
999
1000 if (gfc_find_symbol (name, NULL, 1, &sym)
1001 || sym == NULL
1002 || sym->attr.flavor != FL_PARAMETER)
1003 goto no_match;
1004
1005 kind = -1;
1006 c = gfc_next_char ();
1007 }
1008
1009 if (c == ' ')
1010 {
1011 gfc_gobble_whitespace ();
1012 c = gfc_next_char ();
1013 }
1014
1015 if (c != '_')
1016 goto no_match;
1017
1018 gfc_gobble_whitespace ();
1019
1020 c = gfc_next_char ();
1021 if (c != '\'' && c != '"')
1022 goto no_match;
1023
1024 start_locus = gfc_current_locus;
1025
1026 if (kind == -1)
1027 {
1028 q = gfc_extract_int (sym->value, &kind);
1029 if (q != NULL)
1030 {
1031 gfc_error (q);
1032 return MATCH_ERROR;
1033 }
1034 gfc_set_sym_referenced (sym);
1035 }
1036
1037 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
1038 {
1039 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1040 return MATCH_ERROR;
1041 }
1042
1043 got_delim:
1044 /* Scan the string into a block of memory by first figuring out how
1045 long it is, allocating the structure, then re-reading it. This
1046 isn't particularly efficient, but string constants aren't that
1047 common in most code. TODO: Use obstacks? */
1048
1049 delimiter = c;
1050 length = 0;
1051
1052 for (;;)
1053 {
1054 c = next_string_char (delimiter, &ret);
1055 if (ret == -1)
1056 break;
1057 if (ret == -2)
1058 {
1059 gfc_current_locus = start_locus;
1060 gfc_error ("Unterminated character constant beginning at %C");
1061 return MATCH_ERROR;
1062 }
1063
1064 length++;
1065 }
1066
1067 /* Peek at the next character to see if it is a b, o, z, or x for the
1068 postfixed BOZ literal constants. */
1069 peek = gfc_peek_ascii_char ();
1070 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
1071 goto no_match;
1072
1073 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
1074
1075 gfc_current_locus = start_locus;
1076
1077 /* We disable the warning for the following loop as the warning has already
1078 been printed in the loop above. */
1079 warn_ampersand = gfc_option.warn_ampersand;
1080 gfc_option.warn_ampersand = 0;
1081
1082 p = e->value.character.string;
1083 for (i = 0; i < length; i++)
1084 {
1085 c = next_string_char (delimiter, &ret);
1086
1087 if (!gfc_check_character_range (c, kind))
1088 {
1089 gfc_error ("Character '%s' in string at %C is not representable "
1090 "in character kind %d", gfc_print_wide_char (c), kind);
1091 return MATCH_ERROR;
1092 }
1093
1094 *p++ = c;
1095 }
1096
1097 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1098 gfc_option.warn_ampersand = warn_ampersand;
1099
1100 next_string_char (delimiter, &ret);
1101 if (ret != -1)
1102 gfc_internal_error ("match_string_constant(): Delimiter not found");
1103
1104 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1105 e->expr_type = EXPR_SUBSTRING;
1106
1107 *result = e;
1108
1109 return MATCH_YES;
1110
1111 no_match:
1112 gfc_current_locus = old_locus;
1113 return MATCH_NO;
1114 }
1115
1116
1117 /* Match a .true. or .false. Returns 1 if a .true. was found,
1118 0 if a .false. was found, and -1 otherwise. */
1119 static int
1120 match_logical_constant_string (void)
1121 {
1122 locus orig_loc = gfc_current_locus;
1123
1124 gfc_gobble_whitespace ();
1125 if (gfc_next_ascii_char () == '.')
1126 {
1127 char ch = gfc_next_ascii_char ();
1128 if (ch == 'f')
1129 {
1130 if (gfc_next_ascii_char () == 'a'
1131 && gfc_next_ascii_char () == 'l'
1132 && gfc_next_ascii_char () == 's'
1133 && gfc_next_ascii_char () == 'e'
1134 && gfc_next_ascii_char () == '.')
1135 /* Matched ".false.". */
1136 return 0;
1137 }
1138 else if (ch == 't')
1139 {
1140 if (gfc_next_ascii_char () == 'r'
1141 && gfc_next_ascii_char () == 'u'
1142 && gfc_next_ascii_char () == 'e'
1143 && gfc_next_ascii_char () == '.')
1144 /* Matched ".true.". */
1145 return 1;
1146 }
1147 }
1148 gfc_current_locus = orig_loc;
1149 return -1;
1150 }
1151
1152 /* Match a .true. or .false. */
1153
1154 static match
1155 match_logical_constant (gfc_expr **result)
1156 {
1157 gfc_expr *e;
1158 int i, kind, is_iso_c;
1159
1160 i = match_logical_constant_string ();
1161 if (i == -1)
1162 return MATCH_NO;
1163
1164 kind = get_kind (&is_iso_c);
1165 if (kind == -1)
1166 return MATCH_ERROR;
1167 if (kind == -2)
1168 kind = gfc_default_logical_kind;
1169
1170 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1171 {
1172 gfc_error ("Bad kind for logical constant at %C");
1173 return MATCH_ERROR;
1174 }
1175
1176 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
1177 e->ts.is_c_interop = is_iso_c;
1178
1179 *result = e;
1180 return MATCH_YES;
1181 }
1182
1183
1184 /* Match a real or imaginary part of a complex constant that is a
1185 symbolic constant. */
1186
1187 static match
1188 match_sym_complex_part (gfc_expr **result)
1189 {
1190 char name[GFC_MAX_SYMBOL_LEN + 1];
1191 gfc_symbol *sym;
1192 gfc_expr *e;
1193 match m;
1194
1195 m = gfc_match_name (name);
1196 if (m != MATCH_YES)
1197 return m;
1198
1199 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1200 return MATCH_NO;
1201
1202 if (sym->attr.flavor != FL_PARAMETER)
1203 {
1204 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1205 return MATCH_ERROR;
1206 }
1207
1208 if (!gfc_numeric_ts (&sym->value->ts))
1209 {
1210 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1211 return MATCH_ERROR;
1212 }
1213
1214 if (sym->value->rank != 0)
1215 {
1216 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1217 return MATCH_ERROR;
1218 }
1219
1220 if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PARAMETER symbol in "
1221 "complex constant at %C") == FAILURE)
1222 return MATCH_ERROR;
1223
1224 switch (sym->value->ts.type)
1225 {
1226 case BT_REAL:
1227 e = gfc_copy_expr (sym->value);
1228 break;
1229
1230 case BT_COMPLEX:
1231 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1232 if (e == NULL)
1233 goto error;
1234 break;
1235
1236 case BT_INTEGER:
1237 e = gfc_int2real (sym->value, gfc_default_real_kind);
1238 if (e == NULL)
1239 goto error;
1240 break;
1241
1242 default:
1243 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1244 }
1245
1246 *result = e; /* e is a scalar, real, constant expression. */
1247 return MATCH_YES;
1248
1249 error:
1250 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1251 return MATCH_ERROR;
1252 }
1253
1254
1255 /* Match a real or imaginary part of a complex number. */
1256
1257 static match
1258 match_complex_part (gfc_expr **result)
1259 {
1260 match m;
1261
1262 m = match_sym_complex_part (result);
1263 if (m != MATCH_NO)
1264 return m;
1265
1266 m = match_real_constant (result, 1);
1267 if (m != MATCH_NO)
1268 return m;
1269
1270 return match_integer_constant (result, 1);
1271 }
1272
1273
1274 /* Try to match a complex constant. */
1275
1276 static match
1277 match_complex_constant (gfc_expr **result)
1278 {
1279 gfc_expr *e, *real, *imag;
1280 gfc_error_buf old_error;
1281 gfc_typespec target;
1282 locus old_loc;
1283 int kind;
1284 match m;
1285
1286 old_loc = gfc_current_locus;
1287 real = imag = e = NULL;
1288
1289 m = gfc_match_char ('(');
1290 if (m != MATCH_YES)
1291 return m;
1292
1293 gfc_push_error (&old_error);
1294
1295 m = match_complex_part (&real);
1296 if (m == MATCH_NO)
1297 {
1298 gfc_free_error (&old_error);
1299 goto cleanup;
1300 }
1301
1302 if (gfc_match_char (',') == MATCH_NO)
1303 {
1304 gfc_pop_error (&old_error);
1305 m = MATCH_NO;
1306 goto cleanup;
1307 }
1308
1309 /* If m is error, then something was wrong with the real part and we
1310 assume we have a complex constant because we've seen the ','. An
1311 ambiguous case here is the start of an iterator list of some
1312 sort. These sort of lists are matched prior to coming here. */
1313
1314 if (m == MATCH_ERROR)
1315 {
1316 gfc_free_error (&old_error);
1317 goto cleanup;
1318 }
1319 gfc_pop_error (&old_error);
1320
1321 m = match_complex_part (&imag);
1322 if (m == MATCH_NO)
1323 goto syntax;
1324 if (m == MATCH_ERROR)
1325 goto cleanup;
1326
1327 m = gfc_match_char (')');
1328 if (m == MATCH_NO)
1329 {
1330 /* Give the matcher for implied do-loops a chance to run. This
1331 yields a much saner error message for (/ (i, 4=i, 6) /). */
1332 if (gfc_peek_ascii_char () == '=')
1333 {
1334 m = MATCH_ERROR;
1335 goto cleanup;
1336 }
1337 else
1338 goto syntax;
1339 }
1340
1341 if (m == MATCH_ERROR)
1342 goto cleanup;
1343
1344 /* Decide on the kind of this complex number. */
1345 if (real->ts.type == BT_REAL)
1346 {
1347 if (imag->ts.type == BT_REAL)
1348 kind = gfc_kind_max (real, imag);
1349 else
1350 kind = real->ts.kind;
1351 }
1352 else
1353 {
1354 if (imag->ts.type == BT_REAL)
1355 kind = imag->ts.kind;
1356 else
1357 kind = gfc_default_real_kind;
1358 }
1359 gfc_clear_ts (&target);
1360 target.type = BT_REAL;
1361 target.kind = kind;
1362
1363 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1364 gfc_convert_type (real, &target, 2);
1365 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1366 gfc_convert_type (imag, &target, 2);
1367
1368 e = gfc_convert_complex (real, imag, kind);
1369 e->where = gfc_current_locus;
1370
1371 gfc_free_expr (real);
1372 gfc_free_expr (imag);
1373
1374 *result = e;
1375 return MATCH_YES;
1376
1377 syntax:
1378 gfc_error ("Syntax error in COMPLEX constant at %C");
1379 m = MATCH_ERROR;
1380
1381 cleanup:
1382 gfc_free_expr (e);
1383 gfc_free_expr (real);
1384 gfc_free_expr (imag);
1385 gfc_current_locus = old_loc;
1386
1387 return m;
1388 }
1389
1390
1391 /* Match constants in any of several forms. Returns nonzero for a
1392 match, zero for no match. */
1393
1394 match
1395 gfc_match_literal_constant (gfc_expr **result, int signflag)
1396 {
1397 match m;
1398
1399 m = match_complex_constant (result);
1400 if (m != MATCH_NO)
1401 return m;
1402
1403 m = match_string_constant (result);
1404 if (m != MATCH_NO)
1405 return m;
1406
1407 m = match_boz_constant (result);
1408 if (m != MATCH_NO)
1409 return m;
1410
1411 m = match_real_constant (result, signflag);
1412 if (m != MATCH_NO)
1413 return m;
1414
1415 m = match_hollerith_constant (result);
1416 if (m != MATCH_NO)
1417 return m;
1418
1419 m = match_integer_constant (result, signflag);
1420 if (m != MATCH_NO)
1421 return m;
1422
1423 m = match_logical_constant (result);
1424 if (m != MATCH_NO)
1425 return m;
1426
1427 return MATCH_NO;
1428 }
1429
1430
1431 /* This checks if a symbol is the return value of an encompassing function.
1432 Function nesting can be maximally two levels deep, but we may have
1433 additional local namespaces like BLOCK etc. */
1434
1435 bool
1436 gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1437 {
1438 if (!sym->attr.function || (sym->result != sym))
1439 return false;
1440 while (ns)
1441 {
1442 if (ns->proc_name == sym)
1443 return true;
1444 ns = ns->parent;
1445 }
1446 return false;
1447 }
1448
1449
1450 /* Match a single actual argument value. An actual argument is
1451 usually an expression, but can also be a procedure name. If the
1452 argument is a single name, it is not always possible to tell
1453 whether the name is a dummy procedure or not. We treat these cases
1454 by creating an argument that looks like a dummy procedure and
1455 fixing things later during resolution. */
1456
1457 static match
1458 match_actual_arg (gfc_expr **result)
1459 {
1460 char name[GFC_MAX_SYMBOL_LEN + 1];
1461 gfc_symtree *symtree;
1462 locus where, w;
1463 gfc_expr *e;
1464 char c;
1465
1466 gfc_gobble_whitespace ();
1467 where = gfc_current_locus;
1468
1469 switch (gfc_match_name (name))
1470 {
1471 case MATCH_ERROR:
1472 return MATCH_ERROR;
1473
1474 case MATCH_NO:
1475 break;
1476
1477 case MATCH_YES:
1478 w = gfc_current_locus;
1479 gfc_gobble_whitespace ();
1480 c = gfc_next_ascii_char ();
1481 gfc_current_locus = w;
1482
1483 if (c != ',' && c != ')')
1484 break;
1485
1486 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1487 break;
1488 /* Handle error elsewhere. */
1489
1490 /* Eliminate a couple of common cases where we know we don't
1491 have a function argument. */
1492 if (symtree == NULL)
1493 {
1494 gfc_get_sym_tree (name, NULL, &symtree, false);
1495 gfc_set_sym_referenced (symtree->n.sym);
1496 }
1497 else
1498 {
1499 gfc_symbol *sym;
1500
1501 sym = symtree->n.sym;
1502 gfc_set_sym_referenced (sym);
1503 if (sym->attr.flavor != FL_PROCEDURE
1504 && sym->attr.flavor != FL_UNKNOWN)
1505 break;
1506
1507 if (sym->attr.in_common && !sym->attr.proc_pointer)
1508 {
1509 gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1510 &sym->declared_at);
1511 break;
1512 }
1513
1514 /* If the symbol is a function with itself as the result and
1515 is being defined, then we have a variable. */
1516 if (sym->attr.function && sym->result == sym)
1517 {
1518 if (gfc_is_function_return_value (sym, gfc_current_ns))
1519 break;
1520
1521 if (sym->attr.entry
1522 && (sym->ns == gfc_current_ns
1523 || sym->ns == gfc_current_ns->parent))
1524 {
1525 gfc_entry_list *el = NULL;
1526
1527 for (el = sym->ns->entries; el; el = el->next)
1528 if (sym == el->sym)
1529 break;
1530
1531 if (el)
1532 break;
1533 }
1534 }
1535 }
1536
1537 e = gfc_get_expr (); /* Leave it unknown for now */
1538 e->symtree = symtree;
1539 e->expr_type = EXPR_VARIABLE;
1540 e->ts.type = BT_PROCEDURE;
1541 e->where = where;
1542
1543 *result = e;
1544 return MATCH_YES;
1545 }
1546
1547 gfc_current_locus = where;
1548 return gfc_match_expr (result);
1549 }
1550
1551
1552 /* Match a keyword argument. */
1553
1554 static match
1555 match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
1556 {
1557 char name[GFC_MAX_SYMBOL_LEN + 1];
1558 gfc_actual_arglist *a;
1559 locus name_locus;
1560 match m;
1561
1562 name_locus = gfc_current_locus;
1563 m = gfc_match_name (name);
1564
1565 if (m != MATCH_YES)
1566 goto cleanup;
1567 if (gfc_match_char ('=') != MATCH_YES)
1568 {
1569 m = MATCH_NO;
1570 goto cleanup;
1571 }
1572
1573 m = match_actual_arg (&actual->expr);
1574 if (m != MATCH_YES)
1575 goto cleanup;
1576
1577 /* Make sure this name has not appeared yet. */
1578
1579 if (name[0] != '\0')
1580 {
1581 for (a = base; a; a = a->next)
1582 if (a->name != NULL && strcmp (a->name, name) == 0)
1583 {
1584 gfc_error ("Keyword '%s' at %C has already appeared in the "
1585 "current argument list", name);
1586 return MATCH_ERROR;
1587 }
1588 }
1589
1590 actual->name = gfc_get_string (name);
1591 return MATCH_YES;
1592
1593 cleanup:
1594 gfc_current_locus = name_locus;
1595 return m;
1596 }
1597
1598
1599 /* Match an argument list function, such as %VAL. */
1600
1601 static match
1602 match_arg_list_function (gfc_actual_arglist *result)
1603 {
1604 char name[GFC_MAX_SYMBOL_LEN + 1];
1605 locus old_locus;
1606 match m;
1607
1608 old_locus = gfc_current_locus;
1609
1610 if (gfc_match_char ('%') != MATCH_YES)
1611 {
1612 m = MATCH_NO;
1613 goto cleanup;
1614 }
1615
1616 m = gfc_match ("%n (", name);
1617 if (m != MATCH_YES)
1618 goto cleanup;
1619
1620 if (name[0] != '\0')
1621 {
1622 switch (name[0])
1623 {
1624 case 'l':
1625 if (strncmp (name, "loc", 3) == 0)
1626 {
1627 result->name = "%LOC";
1628 break;
1629 }
1630 case 'r':
1631 if (strncmp (name, "ref", 3) == 0)
1632 {
1633 result->name = "%REF";
1634 break;
1635 }
1636 case 'v':
1637 if (strncmp (name, "val", 3) == 0)
1638 {
1639 result->name = "%VAL";
1640 break;
1641 }
1642 default:
1643 m = MATCH_ERROR;
1644 goto cleanup;
1645 }
1646 }
1647
1648 if (gfc_notify_std (GFC_STD_GNU, "Extension: argument list "
1649 "function at %C") == FAILURE)
1650 {
1651 m = MATCH_ERROR;
1652 goto cleanup;
1653 }
1654
1655 m = match_actual_arg (&result->expr);
1656 if (m != MATCH_YES)
1657 goto cleanup;
1658
1659 if (gfc_match_char (')') != MATCH_YES)
1660 {
1661 m = MATCH_NO;
1662 goto cleanup;
1663 }
1664
1665 return MATCH_YES;
1666
1667 cleanup:
1668 gfc_current_locus = old_locus;
1669 return m;
1670 }
1671
1672
1673 /* Matches an actual argument list of a function or subroutine, from
1674 the opening parenthesis to the closing parenthesis. The argument
1675 list is assumed to allow keyword arguments because we don't know if
1676 the symbol associated with the procedure has an implicit interface
1677 or not. We make sure keywords are unique. If sub_flag is set,
1678 we're matching the argument list of a subroutine. */
1679
1680 match
1681 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
1682 {
1683 gfc_actual_arglist *head, *tail;
1684 int seen_keyword;
1685 gfc_st_label *label;
1686 locus old_loc;
1687 match m;
1688
1689 *argp = tail = NULL;
1690 old_loc = gfc_current_locus;
1691
1692 seen_keyword = 0;
1693
1694 if (gfc_match_char ('(') == MATCH_NO)
1695 return (sub_flag) ? MATCH_YES : MATCH_NO;
1696
1697 if (gfc_match_char (')') == MATCH_YES)
1698 return MATCH_YES;
1699 head = NULL;
1700
1701 matching_actual_arglist++;
1702
1703 for (;;)
1704 {
1705 if (head == NULL)
1706 head = tail = gfc_get_actual_arglist ();
1707 else
1708 {
1709 tail->next = gfc_get_actual_arglist ();
1710 tail = tail->next;
1711 }
1712
1713 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1714 {
1715 m = gfc_match_st_label (&label);
1716 if (m == MATCH_NO)
1717 gfc_error ("Expected alternate return label at %C");
1718 if (m != MATCH_YES)
1719 goto cleanup;
1720
1721 tail->label = label;
1722 goto next;
1723 }
1724
1725 /* After the first keyword argument is seen, the following
1726 arguments must also have keywords. */
1727 if (seen_keyword)
1728 {
1729 m = match_keyword_arg (tail, head);
1730
1731 if (m == MATCH_ERROR)
1732 goto cleanup;
1733 if (m == MATCH_NO)
1734 {
1735 gfc_error ("Missing keyword name in actual argument list at %C");
1736 goto cleanup;
1737 }
1738
1739 }
1740 else
1741 {
1742 /* Try an argument list function, like %VAL. */
1743 m = match_arg_list_function (tail);
1744 if (m == MATCH_ERROR)
1745 goto cleanup;
1746
1747 /* See if we have the first keyword argument. */
1748 if (m == MATCH_NO)
1749 {
1750 m = match_keyword_arg (tail, head);
1751 if (m == MATCH_YES)
1752 seen_keyword = 1;
1753 if (m == MATCH_ERROR)
1754 goto cleanup;
1755 }
1756
1757 if (m == MATCH_NO)
1758 {
1759 /* Try for a non-keyword argument. */
1760 m = match_actual_arg (&tail->expr);
1761 if (m == MATCH_ERROR)
1762 goto cleanup;
1763 if (m == MATCH_NO)
1764 goto syntax;
1765 }
1766 }
1767
1768
1769 next:
1770 if (gfc_match_char (')') == MATCH_YES)
1771 break;
1772 if (gfc_match_char (',') != MATCH_YES)
1773 goto syntax;
1774 }
1775
1776 *argp = head;
1777 matching_actual_arglist--;
1778 return MATCH_YES;
1779
1780 syntax:
1781 gfc_error ("Syntax error in argument list at %C");
1782
1783 cleanup:
1784 gfc_free_actual_arglist (head);
1785 gfc_current_locus = old_loc;
1786 matching_actual_arglist--;
1787 return MATCH_ERROR;
1788 }
1789
1790
1791 /* Used by gfc_match_varspec() to extend the reference list by one
1792 element. */
1793
1794 static gfc_ref *
1795 extend_ref (gfc_expr *primary, gfc_ref *tail)
1796 {
1797 if (primary->ref == NULL)
1798 primary->ref = tail = gfc_get_ref ();
1799 else
1800 {
1801 if (tail == NULL)
1802 gfc_internal_error ("extend_ref(): Bad tail");
1803 tail->next = gfc_get_ref ();
1804 tail = tail->next;
1805 }
1806
1807 return tail;
1808 }
1809
1810
1811 /* Match any additional specifications associated with the current
1812 variable like member references or substrings. If equiv_flag is
1813 set we only match stuff that is allowed inside an EQUIVALENCE
1814 statement. sub_flag tells whether we expect a type-bound procedure found
1815 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1816 components, 'ppc_arg' determines whether the PPC may be called (with an
1817 argument list), or whether it may just be referred to as a pointer. */
1818
1819 match
1820 gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1821 bool ppc_arg)
1822 {
1823 char name[GFC_MAX_SYMBOL_LEN + 1];
1824 gfc_ref *substring, *tail;
1825 gfc_component *component;
1826 gfc_symbol *sym = primary->symtree->n.sym;
1827 match m;
1828 bool unknown;
1829
1830 tail = NULL;
1831
1832 gfc_gobble_whitespace ();
1833
1834 if (gfc_peek_ascii_char () == '[')
1835 {
1836 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1837 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1838 && CLASS_DATA (sym)->attr.dimension))
1839 {
1840 gfc_error ("Array section designator, e.g. '(:)', is required "
1841 "besides the coarray designator '[...]' at %C");
1842 return MATCH_ERROR;
1843 }
1844 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1845 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1846 && !CLASS_DATA (sym)->attr.codimension))
1847 {
1848 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1849 sym->name);
1850 return MATCH_ERROR;
1851 }
1852 }
1853
1854 /* For associate names, we may not yet know whether they are arrays or not.
1855 Thus if we have one and parentheses follow, we have to assume that it
1856 actually is one for now. The final decision will be made at
1857 resolution time, of course. */
1858 if (sym->assoc && gfc_peek_ascii_char () == '(')
1859 sym->attr.dimension = 1;
1860
1861 if ((equiv_flag && gfc_peek_ascii_char () == '(')
1862 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
1863 || (sym->attr.dimension && sym->ts.type != BT_CLASS
1864 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary, NULL)
1865 && !(gfc_matching_procptr_assignment
1866 && sym->attr.flavor == FL_PROCEDURE))
1867 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
1868 && (CLASS_DATA (sym)->attr.dimension
1869 || CLASS_DATA (sym)->attr.codimension)))
1870 {
1871 gfc_array_spec *as;
1872
1873 tail = extend_ref (primary, tail);
1874 tail->type = REF_ARRAY;
1875
1876 /* In EQUIVALENCE, we don't know yet whether we are seeing
1877 an array, character variable or array of character
1878 variables. We'll leave the decision till resolve time. */
1879
1880 if (equiv_flag)
1881 as = NULL;
1882 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1883 as = CLASS_DATA (sym)->as;
1884 else
1885 as = sym->as;
1886
1887 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1888 as ? as->corank : 0);
1889 if (m != MATCH_YES)
1890 return m;
1891
1892 gfc_gobble_whitespace ();
1893 if (equiv_flag && gfc_peek_ascii_char () == '(')
1894 {
1895 tail = extend_ref (primary, tail);
1896 tail->type = REF_ARRAY;
1897
1898 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
1899 if (m != MATCH_YES)
1900 return m;
1901 }
1902 }
1903
1904 primary->ts = sym->ts;
1905
1906 if (equiv_flag)
1907 return MATCH_YES;
1908
1909 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
1910 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
1911 gfc_set_default_type (sym, 0, sym->ns);
1912
1913 if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES)
1914 {
1915 gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name);
1916 return MATCH_ERROR;
1917 }
1918 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1919 && gfc_match_char ('%') == MATCH_YES)
1920 {
1921 gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C",
1922 sym->name);
1923 return MATCH_ERROR;
1924 }
1925
1926 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1927 || gfc_match_char ('%') != MATCH_YES)
1928 goto check_substring;
1929
1930 sym = sym->ts.u.derived;
1931
1932 for (;;)
1933 {
1934 gfc_try t;
1935 gfc_symtree *tbp;
1936
1937 m = gfc_match_name (name);
1938 if (m == MATCH_NO)
1939 gfc_error ("Expected structure component name at %C");
1940 if (m != MATCH_YES)
1941 return MATCH_ERROR;
1942
1943 if (sym->f2k_derived)
1944 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1945 else
1946 tbp = NULL;
1947
1948 if (tbp)
1949 {
1950 gfc_symbol* tbp_sym;
1951
1952 if (t == FAILURE)
1953 return MATCH_ERROR;
1954
1955 gcc_assert (!tail || !tail->next);
1956 gcc_assert (primary->expr_type == EXPR_VARIABLE
1957 || (primary->expr_type == EXPR_STRUCTURE
1958 && primary->symtree && primary->symtree->n.sym
1959 && primary->symtree->n.sym->attr.flavor));
1960
1961 if (tbp->n.tb->is_generic)
1962 tbp_sym = NULL;
1963 else
1964 tbp_sym = tbp->n.tb->u.specific->n.sym;
1965
1966 primary->expr_type = EXPR_COMPCALL;
1967 primary->value.compcall.tbp = tbp->n.tb;
1968 primary->value.compcall.name = tbp->name;
1969 primary->value.compcall.ignore_pass = 0;
1970 primary->value.compcall.assign = 0;
1971 primary->value.compcall.base_object = NULL;
1972 gcc_assert (primary->symtree->n.sym->attr.referenced);
1973 if (tbp_sym)
1974 primary->ts = tbp_sym->ts;
1975
1976 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
1977 &primary->value.compcall.actual);
1978 if (m == MATCH_ERROR)
1979 return MATCH_ERROR;
1980 if (m == MATCH_NO)
1981 {
1982 if (sub_flag)
1983 primary->value.compcall.actual = NULL;
1984 else
1985 {
1986 gfc_error ("Expected argument list at %C");
1987 return MATCH_ERROR;
1988 }
1989 }
1990
1991 break;
1992 }
1993
1994 component = gfc_find_component (sym, name, false, false);
1995 if (component == NULL)
1996 return MATCH_ERROR;
1997
1998 tail = extend_ref (primary, tail);
1999 tail->type = REF_COMPONENT;
2000
2001 tail->u.c.component = component;
2002 tail->u.c.sym = sym;
2003
2004 primary->ts = component->ts;
2005
2006 if (component->attr.proc_pointer && ppc_arg
2007 && !gfc_matching_procptr_assignment)
2008 {
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
2016 && !matching_actual_arglist)
2017 {
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
2060 check_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
2131 symbol_attribute
2132 gfc_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
2239 symbol_attribute
2240 gfc_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
2284 typedef struct gfc_structure_ctor_component
2285 {
2286 char* name;
2287 gfc_expr* val;
2288 locus where;
2289 struct gfc_structure_ctor_component* next;
2290 }
2291 gfc_structure_ctor_component;
2292
2293 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2294
2295 static void
2296 gfc_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. */
2308 static gfc_try
2309 build_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, "Fortran 2003: 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
2387 gfc_try
2388 gfc_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, "Fortran 2003: 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
2599 match
2600 gfc_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. */
2639 static match
2640 check_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
2661 static gfc_try
2662 replace_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
2685 match
2686 gfc_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 if (gfc_is_intrinsic (sym, 0, gfc_current_locus)
2846 || gfc_is_intrinsic (sym, 1, gfc_current_locus))
2847 sym->attr.intrinsic = 1;
2848 e = gfc_get_expr ();
2849 e->expr_type = EXPR_VARIABLE;
2850 e->symtree = symtree;
2851 m = gfc_match_varspec (e, 0, false, true);
2852 break;
2853 }
2854
2855 if (sym->attr.subroutine)
2856 {
2857 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2858 sym->name);
2859 m = MATCH_ERROR;
2860 break;
2861 }
2862
2863 /* At this point, the name has to be a non-statement function.
2864 If the name is the same as the current function being
2865 compiled, then we have a variable reference (to the function
2866 result) if the name is non-recursive. */
2867
2868 st = gfc_enclosing_unit (NULL);
2869
2870 if (st != NULL && st->state == COMP_FUNCTION
2871 && st->sym == sym
2872 && !sym->attr.recursive)
2873 {
2874 e = gfc_get_expr ();
2875 e->symtree = symtree;
2876 e->expr_type = EXPR_VARIABLE;
2877
2878 m = gfc_match_varspec (e, 0, false, true);
2879 break;
2880 }
2881
2882 /* Match a function reference. */
2883 function0:
2884 m = gfc_match_actual_arglist (0, &actual_arglist);
2885 if (m == MATCH_NO)
2886 {
2887 if (sym->attr.proc == PROC_ST_FUNCTION)
2888 gfc_error ("Statement function '%s' requires argument list at %C",
2889 sym->name);
2890 else
2891 gfc_error ("Function '%s' requires an argument list at %C",
2892 sym->name);
2893
2894 m = MATCH_ERROR;
2895 break;
2896 }
2897
2898 if (m != MATCH_YES)
2899 {
2900 m = MATCH_ERROR;
2901 break;
2902 }
2903
2904 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2905 sym = symtree->n.sym;
2906
2907 replace_hidden_procptr_result (&sym, &symtree);
2908
2909 e = gfc_get_expr ();
2910 e->symtree = symtree;
2911 e->expr_type = EXPR_FUNCTION;
2912 e->value.function.actual = actual_arglist;
2913 e->where = gfc_current_locus;
2914
2915 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2916 && CLASS_DATA (sym)->as)
2917 e->rank = CLASS_DATA (sym)->as->rank;
2918 else if (sym->as != NULL)
2919 e->rank = sym->as->rank;
2920
2921 if (!sym->attr.function
2922 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2923 {
2924 m = MATCH_ERROR;
2925 break;
2926 }
2927
2928 /* Check here for the existence of at least one argument for the
2929 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2930 argument(s) given will be checked in gfc_iso_c_func_interface,
2931 during resolution of the function call. */
2932 if (sym->attr.is_iso_c == 1
2933 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2934 && (sym->intmod_sym_id == ISOCBINDING_LOC
2935 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2936 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2937 {
2938 /* make sure we were given a param */
2939 if (actual_arglist == NULL)
2940 {
2941 gfc_error ("Missing argument to '%s' at %C", sym->name);
2942 m = MATCH_ERROR;
2943 break;
2944 }
2945 }
2946
2947 if (sym->result == NULL)
2948 sym->result = sym;
2949
2950 m = MATCH_YES;
2951 break;
2952
2953 case FL_UNKNOWN:
2954
2955 /* Special case for derived type variables that get their types
2956 via an IMPLICIT statement. This can't wait for the
2957 resolution phase. */
2958
2959 if (gfc_peek_ascii_char () == '%'
2960 && sym->ts.type == BT_UNKNOWN
2961 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
2962 gfc_set_default_type (sym, 0, sym->ns);
2963
2964 /* If the symbol has a (co)dimension attribute, the expression is a
2965 variable. */
2966
2967 if (sym->attr.dimension || sym->attr.codimension)
2968 {
2969 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2970 sym->name, NULL) == FAILURE)
2971 {
2972 m = MATCH_ERROR;
2973 break;
2974 }
2975
2976 e = gfc_get_expr ();
2977 e->symtree = symtree;
2978 e->expr_type = EXPR_VARIABLE;
2979 m = gfc_match_varspec (e, 0, false, true);
2980 break;
2981 }
2982
2983 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2984 && (CLASS_DATA (sym)->attr.dimension
2985 || CLASS_DATA (sym)->attr.codimension))
2986 {
2987 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2988 sym->name, NULL) == FAILURE)
2989 {
2990 m = MATCH_ERROR;
2991 break;
2992 }
2993
2994 e = gfc_get_expr ();
2995 e->symtree = symtree;
2996 e->expr_type = EXPR_VARIABLE;
2997 m = gfc_match_varspec (e, 0, false, true);
2998 break;
2999 }
3000
3001 /* Name is not an array, so we peek to see if a '(' implies a
3002 function call or a substring reference. Otherwise the
3003 variable is just a scalar. */
3004
3005 gfc_gobble_whitespace ();
3006 if (gfc_peek_ascii_char () != '(')
3007 {
3008 /* Assume a scalar variable */
3009 e = gfc_get_expr ();
3010 e->symtree = symtree;
3011 e->expr_type = EXPR_VARIABLE;
3012
3013 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
3014 sym->name, NULL) == FAILURE)
3015 {
3016 m = MATCH_ERROR;
3017 break;
3018 }
3019
3020 /*FIXME:??? gfc_match_varspec does set this for us: */
3021 e->ts = sym->ts;
3022 m = gfc_match_varspec (e, 0, false, true);
3023 break;
3024 }
3025
3026 /* See if this is a function reference with a keyword argument
3027 as first argument. We do this because otherwise a spurious
3028 symbol would end up in the symbol table. */
3029
3030 old_loc = gfc_current_locus;
3031 m2 = gfc_match (" ( %n =", argname);
3032 gfc_current_locus = old_loc;
3033
3034 e = gfc_get_expr ();
3035 e->symtree = symtree;
3036
3037 if (m2 != MATCH_YES)
3038 {
3039 /* Try to figure out whether we're dealing with a character type.
3040 We're peeking ahead here, because we don't want to call
3041 match_substring if we're dealing with an implicitly typed
3042 non-character variable. */
3043 implicit_char = false;
3044 if (sym->ts.type == BT_UNKNOWN)
3045 {
3046 ts = gfc_get_default_type (sym->name, NULL);
3047 if (ts->type == BT_CHARACTER)
3048 implicit_char = true;
3049 }
3050
3051 /* See if this could possibly be a substring reference of a name
3052 that we're not sure is a variable yet. */
3053
3054 if ((implicit_char || sym->ts.type == BT_CHARACTER)
3055 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
3056 {
3057
3058 e->expr_type = EXPR_VARIABLE;
3059
3060 if (sym->attr.flavor != FL_VARIABLE
3061 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
3062 sym->name, NULL) == FAILURE)
3063 {
3064 m = MATCH_ERROR;
3065 break;
3066 }
3067
3068 if (sym->ts.type == BT_UNKNOWN
3069 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
3070 {
3071 m = MATCH_ERROR;
3072 break;
3073 }
3074
3075 e->ts = sym->ts;
3076 if (e->ref)
3077 e->ts.u.cl = NULL;
3078 m = MATCH_YES;
3079 break;
3080 }
3081 }
3082
3083 /* Give up, assume we have a function. */
3084
3085 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3086 sym = symtree->n.sym;
3087 e->expr_type = EXPR_FUNCTION;
3088
3089 if (!sym->attr.function
3090 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
3091 {
3092 m = MATCH_ERROR;
3093 break;
3094 }
3095
3096 sym->result = sym;
3097
3098 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3099 if (m == MATCH_NO)
3100 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
3101
3102 if (m != MATCH_YES)
3103 {
3104 m = MATCH_ERROR;
3105 break;
3106 }
3107
3108 /* If our new function returns a character, array or structure
3109 type, it might have subsequent references. */
3110
3111 m = gfc_match_varspec (e, 0, false, true);
3112 if (m == MATCH_NO)
3113 m = MATCH_YES;
3114
3115 break;
3116
3117 generic_function:
3118 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
3119
3120 e = gfc_get_expr ();
3121 e->symtree = symtree;
3122 e->expr_type = EXPR_FUNCTION;
3123
3124 if (sym->attr.flavor == FL_DERIVED)
3125 {
3126 e->value.function.esym = sym;
3127 e->symtree->n.sym->attr.generic = 1;
3128 }
3129
3130 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3131 break;
3132
3133 default:
3134 gfc_error ("Symbol at %C is not appropriate for an expression");
3135 return MATCH_ERROR;
3136 }
3137
3138 if (m == MATCH_YES)
3139 {
3140 e->where = where;
3141 *result = e;
3142 }
3143 else
3144 gfc_free_expr (e);
3145
3146 return m;
3147 }
3148
3149
3150 /* Match a variable, i.e. something that can be assigned to. This
3151 starts as a symbol, can be a structure component or an array
3152 reference. It can be a function if the function doesn't have a
3153 separate RESULT variable. If the symbol has not been previously
3154 seen, we assume it is a variable.
3155
3156 This function is called by two interface functions:
3157 gfc_match_variable, which has host_flag = 1, and
3158 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3159 match of the symbol to the local scope. */
3160
3161 static match
3162 match_variable (gfc_expr **result, int equiv_flag, int host_flag)
3163 {
3164 gfc_symbol *sym;
3165 gfc_symtree *st;
3166 gfc_expr *expr;
3167 locus where;
3168 match m;
3169
3170 /* Since nothing has any business being an lvalue in a module
3171 specification block, an interface block or a contains section,
3172 we force the changed_symbols mechanism to work by setting
3173 host_flag to 0. This prevents valid symbols that have the name
3174 of keywords, such as 'end', being turned into variables by
3175 failed matching to assignments for, e.g., END INTERFACE. */
3176 if (gfc_current_state () == COMP_MODULE
3177 || gfc_current_state () == COMP_INTERFACE
3178 || gfc_current_state () == COMP_CONTAINS)
3179 host_flag = 0;
3180
3181 where = gfc_current_locus;
3182 m = gfc_match_sym_tree (&st, host_flag);
3183 if (m != MATCH_YES)
3184 return m;
3185
3186 sym = st->n.sym;
3187
3188 /* If this is an implicit do loop index and implicitly typed,
3189 it should not be host associated. */
3190 m = check_for_implicit_index (&st, &sym);
3191 if (m != MATCH_YES)
3192 return m;
3193
3194 sym->attr.implied_index = 0;
3195
3196 gfc_set_sym_referenced (sym);
3197 switch (sym->attr.flavor)
3198 {
3199 case FL_VARIABLE:
3200 /* Everything is alright. */
3201 break;
3202
3203 case FL_UNKNOWN:
3204 {
3205 sym_flavor flavor = FL_UNKNOWN;
3206
3207 gfc_gobble_whitespace ();
3208
3209 if (sym->attr.external || sym->attr.procedure
3210 || sym->attr.function || sym->attr.subroutine)
3211 flavor = FL_PROCEDURE;
3212
3213 /* If it is not a procedure, is not typed and is host associated,
3214 we cannot give it a flavor yet. */
3215 else if (sym->ns == gfc_current_ns->parent
3216 && sym->ts.type == BT_UNKNOWN)
3217 break;
3218
3219 /* These are definitive indicators that this is a variable. */
3220 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
3221 || sym->attr.pointer || sym->as != NULL)
3222 flavor = FL_VARIABLE;
3223
3224 if (flavor != FL_UNKNOWN
3225 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3226 return MATCH_ERROR;
3227 }
3228 break;
3229
3230 case FL_PARAMETER:
3231 if (equiv_flag)
3232 {
3233 gfc_error ("Named constant at %C in an EQUIVALENCE");
3234 return MATCH_ERROR;
3235 }
3236 /* Otherwise this is checked for and an error given in the
3237 variable definition context checks. */
3238 break;
3239
3240 case FL_PROCEDURE:
3241 /* Check for a nonrecursive function result variable. */
3242 if (sym->attr.function
3243 && !sym->attr.external
3244 && sym->result == sym
3245 && (gfc_is_function_return_value (sym, gfc_current_ns)
3246 || (sym->attr.entry
3247 && sym->ns == gfc_current_ns)
3248 || (sym->attr.entry
3249 && sym->ns == gfc_current_ns->parent)))
3250 {
3251 /* If a function result is a derived type, then the derived
3252 type may still have to be resolved. */
3253
3254 if (sym->ts.type == BT_DERIVED
3255 && gfc_use_derived (sym->ts.u.derived) == NULL)
3256 return MATCH_ERROR;
3257 break;
3258 }
3259
3260 if (sym->attr.proc_pointer
3261 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
3262 break;
3263
3264 /* Fall through to error */
3265
3266 default:
3267 gfc_error ("'%s' at %C is not a variable", sym->name);
3268 return MATCH_ERROR;
3269 }
3270
3271 /* Special case for derived type variables that get their types
3272 via an IMPLICIT statement. This can't wait for the
3273 resolution phase. */
3274
3275 {
3276 gfc_namespace * implicit_ns;
3277
3278 if (gfc_current_ns->proc_name == sym)
3279 implicit_ns = gfc_current_ns;
3280 else
3281 implicit_ns = sym->ns;
3282
3283 if (gfc_peek_ascii_char () == '%'
3284 && sym->ts.type == BT_UNKNOWN
3285 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
3286 gfc_set_default_type (sym, 0, implicit_ns);
3287 }
3288
3289 expr = gfc_get_expr ();
3290
3291 expr->expr_type = EXPR_VARIABLE;
3292 expr->symtree = st;
3293 expr->ts = sym->ts;
3294 expr->where = where;
3295
3296 /* Now see if we have to do more. */
3297 m = gfc_match_varspec (expr, equiv_flag, false, false);
3298 if (m != MATCH_YES)
3299 {
3300 gfc_free_expr (expr);
3301 return m;
3302 }
3303
3304 *result = expr;
3305 return MATCH_YES;
3306 }
3307
3308
3309 match
3310 gfc_match_variable (gfc_expr **result, int equiv_flag)
3311 {
3312 return match_variable (result, equiv_flag, 1);
3313 }
3314
3315
3316 match
3317 gfc_match_equiv_variable (gfc_expr **result)
3318 {
3319 return match_variable (result, 1, 0);
3320 }
3321