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