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