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