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