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