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