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