]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/primary.c
bpabi.S (aeabi_ldivmod): Add DWARF information for computing the location of the...
[thirdparty/gcc.git] / gcc / fortran / primary.c
CommitLineData
6de9cd9a 1/* Primary expression subroutines
d1e082c2 2 Copyright (C) 2000-2013 Free Software Foundation, Inc.
6de9cd9a
DN
3 Contributed by Andy Vaught
4
d1d61a00 5This file is part of GCC.
6de9cd9a 6
d1d61a00
TS
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
d234d788 9Software Foundation; either version 3, or (at your option) any later
d1d61a00 10version.
6de9cd9a 11
d1d61a00
TS
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
6de9cd9a
DN
16
17You should have received a copy of the GNU General Public License
d234d788
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
6de9cd9a 20
6de9cd9a
DN
21#include "config.h"
22#include "system.h"
953bee7c 23#include "coretypes.h"
6de9cd9a 24#include "flags.h"
6de9cd9a
DN
25#include "gfortran.h"
26#include "arith.h"
27#include "match.h"
28#include "parse.h"
b7e75771 29#include "constructor.h"
6de9cd9a 30
837c4b78
JW
31int matching_actual_arglist = 0;
32
6de9cd9a
DN
33/* Matches a kind-parameter expression, which is either a named
34 symbolic constant or a nonnegative integer constant. If
bee64a2b
JW
35 successful, sets the kind value to the correct integer.
36 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
37 symbol like e.g. 'c_int'. */
6de9cd9a
DN
38
39static match
bee64a2b 40match_kind_param (int *kind, int *is_iso_c)
6de9cd9a
DN
41{
42 char name[GFC_MAX_SYMBOL_LEN + 1];
43 gfc_symbol *sym;
44 const char *p;
45 match m;
46
bee64a2b
JW
47 *is_iso_c = 0;
48
5cf54585 49 m = gfc_match_small_literal_int (kind, NULL);
6de9cd9a
DN
50 if (m != MATCH_NO)
51 return m;
52
53 m = gfc_match_name (name);
54 if (m != MATCH_YES)
55 return m;
56
57 if (gfc_find_symbol (name, NULL, 1, &sym))
58 return MATCH_ERROR;
59
60 if (sym == NULL)
61 return MATCH_NO;
62
fbe468a5
JW
63 *is_iso_c = sym->attr.is_iso_c;
64
6de9cd9a
DN
65 if (sym->attr.flavor != FL_PARAMETER)
66 return MATCH_NO;
67
1d8e1d5d
PT
68 if (sym->value == NULL)
69 return MATCH_NO;
70
6de9cd9a
DN
71 p = gfc_extract_int (sym->value, kind);
72 if (p != NULL)
73 return MATCH_NO;
74
a39fafac
FXC
75 gfc_set_sym_referenced (sym);
76
6de9cd9a
DN
77 if (*kind < 0)
78 return MATCH_NO;
79
80 return MATCH_YES;
81}
82
83
84/* Get a trailing kind-specification for non-character variables.
85 Returns:
bee64a2b
JW
86 * the integer kind value or
87 * -1 if an error was generated,
88 * -2 if no kind was found.
89 The argument 'is_iso_c' signals whether the kind is an ISO_C_BINDING
90 symbol like e.g. 'c_int'. */
6de9cd9a
DN
91
92static int
bee64a2b 93get_kind (int *is_iso_c)
6de9cd9a
DN
94{
95 int kind;
96 match m;
97
bee64a2b
JW
98 *is_iso_c = 0;
99
6de9cd9a
DN
100 if (gfc_match_char ('_') != MATCH_YES)
101 return -2;
102
bee64a2b 103 m = match_kind_param (&kind, is_iso_c);
6de9cd9a
DN
104 if (m == MATCH_NO)
105 gfc_error ("Missing kind-parameter at %C");
106
107 return (m == MATCH_YES) ? kind : -1;
108}
109
110
111/* Given a character and a radix, see if the character is a valid
112 digit in that radix. */
113
8fc541d3
FXC
114int
115gfc_check_digit (char c, int radix)
6de9cd9a
DN
116{
117 int r;
118
119 switch (radix)
120 {
121 case 2:
122 r = ('0' <= c && c <= '1');
123 break;
124
125 case 8:
126 r = ('0' <= c && c <= '7');
127 break;
128
129 case 10:
130 r = ('0' <= c && c <= '9');
131 break;
132
133 case 16:
da8309c6 134 r = ISXDIGIT (c);
6de9cd9a
DN
135 break;
136
137 default:
8fc541d3 138 gfc_internal_error ("gfc_check_digit(): bad radix");
6de9cd9a
DN
139 }
140
141 return r;
142}
143
144
145/* Match the digit string part of an integer if signflag is not set,
146 the signed digit string part if signflag is set. If the buffer
147 is NULL, we just count characters for the resolution pass. Returns
148 the number of characters matched, -1 for no match. */
149
150static int
151match_digits (int signflag, int radix, char *buffer)
152{
153 locus old_loc;
8fc541d3
FXC
154 int length;
155 char c;
6de9cd9a
DN
156
157 length = 0;
8fc541d3 158 c = gfc_next_ascii_char ();
6de9cd9a
DN
159
160 if (signflag && (c == '+' || c == '-'))
161 {
162 if (buffer != NULL)
163 *buffer++ = c;
69029c61 164 gfc_gobble_whitespace ();
8fc541d3 165 c = gfc_next_ascii_char ();
6de9cd9a
DN
166 length++;
167 }
168
8fc541d3 169 if (!gfc_check_digit (c, radix))
6de9cd9a
DN
170 return -1;
171
172 length++;
173 if (buffer != NULL)
174 *buffer++ = c;
175
176 for (;;)
177 {
63645982 178 old_loc = gfc_current_locus;
8fc541d3 179 c = gfc_next_ascii_char ();
6de9cd9a 180
8fc541d3 181 if (!gfc_check_digit (c, radix))
6de9cd9a
DN
182 break;
183
184 if (buffer != NULL)
185 *buffer++ = c;
186 length++;
187 }
188
63645982 189 gfc_current_locus = old_loc;
6de9cd9a
DN
190
191 return length;
192}
193
194
195/* Match an integer (digit string and optional kind).
196 A sign will be accepted if signflag is set. */
197
198static match
edf1eac2 199match_integer_constant (gfc_expr **result, int signflag)
6de9cd9a 200{
bee64a2b 201 int length, kind, is_iso_c;
6de9cd9a
DN
202 locus old_loc;
203 char *buffer;
204 gfc_expr *e;
205
63645982 206 old_loc = gfc_current_locus;
6de9cd9a
DN
207 gfc_gobble_whitespace ();
208
209 length = match_digits (signflag, 10, NULL);
63645982 210 gfc_current_locus = old_loc;
6de9cd9a
DN
211 if (length == -1)
212 return MATCH_NO;
213
ece3f663 214 buffer = (char *) alloca (length + 1);
6de9cd9a
DN
215 memset (buffer, '\0', length + 1);
216
217 gfc_gobble_whitespace ();
218
219 match_digits (signflag, 10, buffer);
220
bee64a2b 221 kind = get_kind (&is_iso_c);
6de9cd9a 222 if (kind == -2)
9d64df18 223 kind = gfc_default_integer_kind;
6de9cd9a
DN
224 if (kind == -1)
225 return MATCH_ERROR;
226
f4347334
ZG
227 if (kind == 4 && gfc_option.flag_integer4_kind == 8)
228 kind = 8;
229
e7a2d5fb 230 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
6de9cd9a
DN
231 {
232 gfc_error ("Integer kind %d at %C not available", kind);
233 return MATCH_ERROR;
234 }
235
63645982 236 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
bee64a2b 237 e->ts.is_c_interop = is_iso_c;
6de9cd9a
DN
238
239 if (gfc_range_check (e) != ARITH_OK)
240 {
b2458f91
TB
241 gfc_error ("Integer too big for its kind at %C. This check can be "
242 "disabled with the option -fno-range-check");
6de9cd9a
DN
243
244 gfc_free_expr (e);
245 return MATCH_ERROR;
246 }
247
248 *result = e;
249 return MATCH_YES;
250}
251
252
d3642f89
FW
253/* Match a Hollerith constant. */
254
255static match
edf1eac2 256match_hollerith_constant (gfc_expr **result)
d3642f89
FW
257{
258 locus old_loc;
edf1eac2
SK
259 gfc_expr *e = NULL;
260 const char *msg;
401fcd3b 261 int num, pad;
24bce1fd 262 int i;
d3642f89
FW
263
264 old_loc = gfc_current_locus;
265 gfc_gobble_whitespace ();
266
267 if (match_integer_constant (&e, 0) == MATCH_YES
edf1eac2 268 && gfc_match_char ('h') == MATCH_YES)
d3642f89 269 {
9717f7a1 270 if (gfc_notify_std (GFC_STD_LEGACY, "Hollerith constant "
edf1eac2 271 "at %C") == FAILURE)
d3642f89
FW
272 goto cleanup;
273
274 msg = gfc_extract_int (e, &num);
275 if (msg != NULL)
276 {
277 gfc_error (msg);
278 goto cleanup;
279 }
280 if (num == 0)
281 {
edf1eac2
SK
282 gfc_error ("Invalid Hollerith constant: %L must contain at least "
283 "one character", &old_loc);
d3642f89
FW
284 goto cleanup;
285 }
286 if (e->ts.kind != gfc_default_integer_kind)
287 {
eb6d74fa 288 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
edf1eac2 289 "should be default", &old_loc);
d3642f89
FW
290 goto cleanup;
291 }
292 else
293 {
d3642f89 294 gfc_free_expr (e);
b7e75771
JD
295 e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
296 &gfc_current_locus);
20585ad6 297
401fcd3b
JD
298 /* Calculate padding needed to fit default integer memory. */
299 pad = gfc_default_integer_kind - (num % gfc_default_integer_kind);
300
301 e->representation.string = XCNEWVEC (char, num + pad + 1);
8fc541d3 302
20585ad6 303 for (i = 0; i < num; i++)
00660189 304 {
696abb30 305 gfc_char_t c = gfc_next_char_literal (INSTRING_WARN);
00660189
FXC
306 if (! gfc_wide_fits_in_byte (c))
307 {
308 gfc_error ("Invalid Hollerith constant at %L contains a "
309 "wide character", &old_loc);
310 goto cleanup;
311 }
312
313 e->representation.string[i] = (unsigned char) c;
314 }
8fc541d3 315
401fcd3b
JD
316 /* Now pad with blanks and end with a null char. */
317 for (i = 0; i < pad; i++)
318 e->representation.string[num + i] = ' ';
319
320 e->representation.string[num + i] = '\0';
321 e->representation.length = num + pad;
322 e->ts.u.pad = pad;
20585ad6 323
d3642f89
FW
324 *result = e;
325 return MATCH_YES;
326 }
327 }
328
329 gfc_free_expr (e);
330 gfc_current_locus = old_loc;
331 return MATCH_NO;
332
333cleanup:
334 gfc_free_expr (e);
335 return MATCH_ERROR;
336}
337
338
6de9cd9a 339/* Match a binary, octal or hexadecimal constant that can be found in
78019d16
SK
340 a DATA statement. The standard permits b'010...', o'73...', and
341 z'a1...' where b, o, and z can be capital letters. This function
342 also accepts postfixed forms of the constants: '01...'b, '73...'o,
343 and 'a1...'z. An additional extension is the use of x for z. */
6de9cd9a
DN
344
345static match
edf1eac2 346match_boz_constant (gfc_expr **result)
6de9cd9a 347{
8fc541d3 348 int radix, length, x_hex, kind;
78019d16 349 locus old_loc, start_loc;
8fc541d3 350 char *buffer, post, delim;
6de9cd9a 351 gfc_expr *e;
6de9cd9a 352
78019d16 353 start_loc = old_loc = gfc_current_locus;
6de9cd9a
DN
354 gfc_gobble_whitespace ();
355
88199e7c 356 x_hex = 0;
8fc541d3 357 switch (post = gfc_next_ascii_char ())
6de9cd9a
DN
358 {
359 case 'b':
360 radix = 2;
78019d16 361 post = 0;
6de9cd9a
DN
362 break;
363 case 'o':
364 radix = 8;
78019d16 365 post = 0;
6de9cd9a
DN
366 break;
367 case 'x':
88199e7c 368 x_hex = 1;
6de9cd9a
DN
369 /* Fall through. */
370 case 'z':
371 radix = 16;
78019d16
SK
372 post = 0;
373 break;
374 case '\'':
375 /* Fall through. */
376 case '\"':
377 delim = post;
378 post = 1;
379 radix = 16; /* Set to accept any valid digit string. */
6de9cd9a
DN
380 break;
381 default:
382 goto backup;
383 }
384
385 /* No whitespace allowed here. */
386
78019d16 387 if (post == 0)
8fc541d3 388 delim = gfc_next_ascii_char ();
78019d16 389
6de9cd9a
DN
390 if (delim != '\'' && delim != '\"')
391 goto backup;
392
00a4618b 393 if (x_hex
9717f7a1 394 && (gfc_notify_std (GFC_STD_GNU, "Hexadecimal "
0bf0efd5 395 "constant at %C uses non-standard syntax")
5d874166
TS
396 == FAILURE))
397 return MATCH_ERROR;
398
63645982 399 old_loc = gfc_current_locus;
6de9cd9a
DN
400
401 length = match_digits (0, radix, NULL);
402 if (length == -1)
403 {
78019d16 404 gfc_error ("Empty set of digits in BOZ constant at %C");
6de9cd9a
DN
405 return MATCH_ERROR;
406 }
407
8fc541d3 408 if (gfc_next_ascii_char () != delim)
6de9cd9a 409 {
78019d16
SK
410 gfc_error ("Illegal character in BOZ constant at %C");
411 return MATCH_ERROR;
412 }
413
414 if (post == 1)
415 {
8fc541d3 416 switch (gfc_next_ascii_char ())
78019d16
SK
417 {
418 case 'b':
419 radix = 2;
21dac32c 420 break;
78019d16
SK
421 case 'o':
422 radix = 8;
21dac32c 423 break;
78019d16
SK
424 case 'x':
425 /* Fall through. */
426 case 'z':
427 radix = 16;
21dac32c 428 break;
31043f6c 429 default:
78019d16 430 goto backup;
31043f6c 431 }
0bf0efd5 432
9717f7a1 433 if (gfc_notify_std (GFC_STD_GNU, "BOZ constant "
0bf0efd5
TB
434 "at %C uses non-standard postfix syntax")
435 == FAILURE)
436 return MATCH_ERROR;
6de9cd9a
DN
437 }
438
63645982 439 gfc_current_locus = old_loc;
6de9cd9a 440
ece3f663 441 buffer = (char *) alloca (length + 1);
6de9cd9a
DN
442 memset (buffer, '\0', length + 1);
443
444 match_digits (0, radix, buffer);
8fc541d3 445 gfc_next_ascii_char (); /* Eat delimiter. */
78019d16 446 if (post == 1)
8fc541d3 447 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
6de9cd9a 448
f4e7375a
SK
449 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
450 "If a data-stmt-constant is a boz-literal-constant, the corresponding
451 variable shall be of type integer. The boz-literal-constant is treated
452 as if it were an int-literal-constant with a kind-param that specifies
453 the representation method with the largest decimal exponent range
454 supported by the processor." */
455
456 kind = gfc_max_integer_kind;
5d874166 457 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
6de9cd9a 458
00a4618b
TB
459 /* Mark as boz variable. */
460 e->is_boz = 1;
461
6de9cd9a
DN
462 if (gfc_range_check (e) != ARITH_OK)
463 {
5d874166 464 gfc_error ("Integer too big for integer kind %i at %C", kind);
88199e7c
TS
465 gfc_free_expr (e);
466 return MATCH_ERROR;
467 }
468
0bf0efd5 469 if (!gfc_in_match_data ()
9717f7a1 470 && (gfc_notify_std (GFC_STD_F2003, "BOZ used outside a DATA "
0bf0efd5
TB
471 "statement at %C")
472 == FAILURE))
473 return MATCH_ERROR;
474
6de9cd9a
DN
475 *result = e;
476 return MATCH_YES;
477
478backup:
78019d16 479 gfc_current_locus = start_loc;
6de9cd9a
DN
480 return MATCH_NO;
481}
482
483
69029c61 484/* Match a real constant of some sort. Allow a signed constant if signflag
00a4618b 485 is nonzero. */
6de9cd9a
DN
486
487static match
edf1eac2 488match_real_constant (gfc_expr **result, int signflag)
6de9cd9a 489{
bee64a2b 490 int kind, count, seen_dp, seen_digits, is_iso_c;
6de9cd9a 491 locus old_loc, temp_loc;
8fc541d3 492 char *p, *buffer, c, exp_char;
6de9cd9a 493 gfc_expr *e;
69029c61 494 bool negate;
6de9cd9a 495
63645982 496 old_loc = gfc_current_locus;
6de9cd9a
DN
497 gfc_gobble_whitespace ();
498
499 e = NULL;
500
501 count = 0;
502 seen_dp = 0;
503 seen_digits = 0;
504 exp_char = ' ';
69029c61 505 negate = FALSE;
6de9cd9a 506
8fc541d3 507 c = gfc_next_ascii_char ();
6de9cd9a
DN
508 if (signflag && (c == '+' || c == '-'))
509 {
69029c61
PB
510 if (c == '-')
511 negate = TRUE;
512
513 gfc_gobble_whitespace ();
8fc541d3 514 c = gfc_next_ascii_char ();
6de9cd9a
DN
515 }
516
02712c16 517 /* Scan significand. */
8fc541d3 518 for (;; c = gfc_next_ascii_char (), count++)
6de9cd9a
DN
519 {
520 if (c == '.')
521 {
522 if (seen_dp)
523 goto done;
524
edf1eac2
SK
525 /* Check to see if "." goes with a following operator like
526 ".eq.". */
63645982 527 temp_loc = gfc_current_locus;
8fc541d3 528 c = gfc_next_ascii_char ();
6de9cd9a
DN
529
530 if (c == 'e' || c == 'd' || c == 'q')
531 {
8fc541d3 532 c = gfc_next_ascii_char ();
6de9cd9a 533 if (c == '.')
f7b529fa 534 goto done; /* Operator named .e. or .d. */
6de9cd9a
DN
535 }
536
537 if (ISALPHA (c))
538 goto done; /* Distinguish 1.e9 from 1.eq.2 */
539
63645982 540 gfc_current_locus = temp_loc;
6de9cd9a
DN
541 seen_dp = 1;
542 continue;
543 }
544
545 if (ISDIGIT (c))
546 {
547 seen_digits = 1;
548 continue;
549 }
550
551 break;
552 }
553
edf1eac2 554 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
6de9cd9a
DN
555 goto done;
556 exp_char = c;
557
5a17346a
SK
558
559 if (c == 'q')
560 {
9717f7a1 561 if (gfc_notify_std (GFC_STD_GNU, "exponent-letter 'q' in "
5a17346a
SK
562 "real-literal-constant at %C") == FAILURE)
563 return MATCH_ERROR;
564 else if (gfc_option.warn_real_q_constant)
565 gfc_warning("Extension: exponent-letter 'q' in real-literal-constant "
566 "at %C");
567 }
568
6de9cd9a 569 /* Scan exponent. */
8fc541d3 570 c = gfc_next_ascii_char ();
6de9cd9a
DN
571 count++;
572
573 if (c == '+' || c == '-')
574 { /* optional sign */
8fc541d3 575 c = gfc_next_ascii_char ();
6de9cd9a
DN
576 count++;
577 }
578
579 if (!ISDIGIT (c))
580 {
6de9cd9a
DN
581 gfc_error ("Missing exponent in real number at %C");
582 return MATCH_ERROR;
583 }
584
585 while (ISDIGIT (c))
586 {
8fc541d3 587 c = gfc_next_ascii_char ();
6de9cd9a
DN
588 count++;
589 }
590
591done:
69029c61 592 /* Check that we have a numeric constant. */
6de9cd9a
DN
593 if (!seen_digits || (!seen_dp && exp_char == ' '))
594 {
63645982 595 gfc_current_locus = old_loc;
6de9cd9a
DN
596 return MATCH_NO;
597 }
598
599 /* Convert the number. */
63645982 600 gfc_current_locus = old_loc;
6de9cd9a
DN
601 gfc_gobble_whitespace ();
602
ece3f663 603 buffer = (char *) alloca (count + 1);
6de9cd9a
DN
604 memset (buffer, '\0', count + 1);
605
6de9cd9a 606 p = buffer;
8fc541d3 607 c = gfc_next_ascii_char ();
69029c61 608 if (c == '+' || c == '-')
6de9cd9a 609 {
69029c61 610 gfc_gobble_whitespace ();
8fc541d3 611 c = gfc_next_ascii_char ();
69029c61
PB
612 }
613
614 /* Hack for mpfr_set_str(). */
615 for (;;)
616 {
617 if (c == 'd' || c == 'q')
6de9cd9a 618 *p = 'e';
69029c61
PB
619 else
620 *p = c;
6de9cd9a 621 p++;
69029c61
PB
622 if (--count == 0)
623 break;
624
8fc541d3 625 c = gfc_next_ascii_char ();
6de9cd9a
DN
626 }
627
bee64a2b 628 kind = get_kind (&is_iso_c);
6de9cd9a
DN
629 if (kind == -1)
630 goto cleanup;
631
632 switch (exp_char)
633 {
634 case 'd':
635 if (kind != -2)
636 {
edf1eac2
SK
637 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
638 "kind");
6de9cd9a
DN
639 goto cleanup;
640 }
9d64df18 641 kind = gfc_default_double_kind;
f4347334
ZG
642
643 if (kind == 4)
644 {
645 if (gfc_option.flag_real4_kind == 8)
646 kind = 8;
647 if (gfc_option.flag_real4_kind == 10)
648 kind = 10;
649 if (gfc_option.flag_real4_kind == 16)
650 kind = 16;
651 }
652
653 if (kind == 8)
654 {
655 if (gfc_option.flag_real8_kind == 4)
656 kind = 4;
657 if (gfc_option.flag_real8_kind == 10)
658 kind = 10;
659 if (gfc_option.flag_real8_kind == 16)
660 kind = 16;
661 }
6de9cd9a
DN
662 break;
663
5a17346a
SK
664 case 'q':
665 if (kind != -2)
666 {
667 gfc_error ("Real number at %C has a 'q' exponent and an explicit "
668 "kind");
669 goto cleanup;
670 }
671
672 /* The maximum possible real kind type parameter is 16. First, try
673 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
674 extended precision. If neither value works, just given up. */
675 kind = 16;
676 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
677 {
678 kind = 10;
679 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
680 {
681 gfc_error ("Invalid exponent-letter 'q' in "
682 "real-literal-constant at %C");
683 goto cleanup;
684 }
685 }
686 break;
687
6de9cd9a
DN
688 default:
689 if (kind == -2)
9d64df18 690 kind = gfc_default_real_kind;
6de9cd9a 691
f4347334
ZG
692 if (kind == 4)
693 {
694 if (gfc_option.flag_real4_kind == 8)
695 kind = 8;
696 if (gfc_option.flag_real4_kind == 10)
697 kind = 10;
698 if (gfc_option.flag_real4_kind == 16)
699 kind = 16;
700 }
701
702 if (kind == 8)
703 {
704 if (gfc_option.flag_real8_kind == 4)
705 kind = 4;
706 if (gfc_option.flag_real8_kind == 10)
707 kind = 10;
708 if (gfc_option.flag_real8_kind == 16)
709 kind = 16;
710 }
711
e7a2d5fb 712 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
6de9cd9a
DN
713 {
714 gfc_error ("Invalid real kind %d at %C", kind);
715 goto cleanup;
716 }
717 }
718
63645982 719 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
69029c61
PB
720 if (negate)
721 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
bee64a2b 722 e->ts.is_c_interop = is_iso_c;
6de9cd9a
DN
723
724 switch (gfc_range_check (e))
725 {
726 case ARITH_OK:
727 break;
728 case ARITH_OVERFLOW:
729 gfc_error ("Real constant overflows its kind at %C");
730 goto cleanup;
731
732 case ARITH_UNDERFLOW:
2d8b59df 733 if (gfc_option.warn_underflow)
edf1eac2 734 gfc_warning ("Real constant underflows its kind at %C");
f8e566e5 735 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
2d8b59df 736 break;
6de9cd9a
DN
737
738 default:
739 gfc_internal_error ("gfc_range_check() returned bad value");
740 }
741
742 *result = e;
743 return MATCH_YES;
744
745cleanup:
746 gfc_free_expr (e);
747 return MATCH_ERROR;
748}
749
750
751/* Match a substring reference. */
752
753static match
edf1eac2 754match_substring (gfc_charlen *cl, int init, gfc_ref **result)
6de9cd9a
DN
755{
756 gfc_expr *start, *end;
757 locus old_loc;
758 gfc_ref *ref;
759 match m;
760
761 start = NULL;
762 end = NULL;
763
63645982 764 old_loc = gfc_current_locus;
6de9cd9a
DN
765
766 m = gfc_match_char ('(');
767 if (m != MATCH_YES)
768 return MATCH_NO;
769
770 if (gfc_match_char (':') != MATCH_YES)
771 {
772 if (init)
773 m = gfc_match_init_expr (&start);
774 else
775 m = gfc_match_expr (&start);
776
777 if (m != MATCH_YES)
778 {
779 m = MATCH_NO;
780 goto cleanup;
781 }
782
783 m = gfc_match_char (':');
784 if (m != MATCH_YES)
785 goto cleanup;
786 }
787
788 if (gfc_match_char (')') != MATCH_YES)
789 {
790 if (init)
791 m = gfc_match_init_expr (&end);
792 else
793 m = gfc_match_expr (&end);
794
795 if (m == MATCH_NO)
796 goto syntax;
797 if (m == MATCH_ERROR)
798 goto cleanup;
799
800 m = gfc_match_char (')');
801 if (m == MATCH_NO)
802 goto syntax;
803 }
804
805 /* Optimize away the (:) reference. */
806 if (start == NULL && end == NULL)
807 ref = NULL;
808 else
809 {
810 ref = gfc_get_ref ();
811
812 ref->type = REF_SUBSTRING;
813 if (start == NULL)
b7e75771 814 start = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1);
6de9cd9a
DN
815 ref->u.ss.start = start;
816 if (end == NULL && cl)
817 end = gfc_copy_expr (cl->length);
818 ref->u.ss.end = end;
819 ref->u.ss.length = cl;
820 }
821
822 *result = ref;
823 return MATCH_YES;
824
825syntax:
826 gfc_error ("Syntax error in SUBSTRING specification at %C");
827 m = MATCH_ERROR;
828
829cleanup:
830 gfc_free_expr (start);
831 gfc_free_expr (end);
832
63645982 833 gfc_current_locus = old_loc;
6de9cd9a
DN
834 return m;
835}
836
837
838/* Reads the next character of a string constant, taking care to
839 return doubled delimiters on the input as a single instance of
840 the delimiter.
841
8fc541d3 842 Special return values for "ret" argument are:
6de9cd9a
DN
843 -1 End of the string, as determined by the delimiter
844 -2 Unterminated string detected
845
846 Backslash codes are also expanded at this time. */
847
8fc541d3
FXC
848static gfc_char_t
849next_string_char (gfc_char_t delimiter, int *ret)
6de9cd9a
DN
850{
851 locus old_locus;
8fc541d3 852 gfc_char_t c;
6de9cd9a 853
696abb30 854 c = gfc_next_char_literal (INSTRING_WARN);
8fc541d3 855 *ret = 0;
6de9cd9a
DN
856
857 if (c == '\n')
8fc541d3
FXC
858 {
859 *ret = -2;
860 return 0;
861 }
6de9cd9a 862
131c66cd 863 if (gfc_option.flag_backslash && c == '\\')
6de9cd9a 864 {
63645982 865 old_locus = gfc_current_locus;
6de9cd9a 866
a88a266c
SK
867 if (gfc_match_special_char (&c) == MATCH_NO)
868 gfc_current_locus = old_locus;
2e6a83a7
SK
869
870 if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings)
871 gfc_warning ("Extension: backslash character at %C");
6de9cd9a
DN
872 }
873
874 if (c != delimiter)
875 return c;
876
63645982 877 old_locus = gfc_current_locus;
696abb30 878 c = gfc_next_char_literal (NONSTRING);
6de9cd9a
DN
879
880 if (c == delimiter)
881 return c;
63645982 882 gfc_current_locus = old_locus;
6de9cd9a 883
8fc541d3
FXC
884 *ret = -1;
885 return 0;
6de9cd9a
DN
886}
887
888
889/* Special case of gfc_match_name() that matches a parameter kind name
890 before a string constant. This takes case of the weird but legal
4f8ea09e 891 case of:
6de9cd9a
DN
892
893 kind_____'string'
894
895 where kind____ is a parameter. gfc_match_name() will happily slurp
896 up all the underscores, which leads to problems. If we return
897 MATCH_YES, the parse pointer points to the final underscore, which
898 is not part of the name. We never return MATCH_ERROR-- errors in
899 the name will be detected later. */
900
901static match
902match_charkind_name (char *name)
903{
904 locus old_loc;
905 char c, peek;
906 int len;
907
908 gfc_gobble_whitespace ();
8fc541d3 909 c = gfc_next_ascii_char ();
6de9cd9a
DN
910 if (!ISALPHA (c))
911 return MATCH_NO;
912
913 *name++ = c;
914 len = 1;
915
916 for (;;)
917 {
63645982 918 old_loc = gfc_current_locus;
8fc541d3 919 c = gfc_next_ascii_char ();
6de9cd9a
DN
920
921 if (c == '_')
922 {
8fc541d3 923 peek = gfc_peek_ascii_char ();
6de9cd9a
DN
924
925 if (peek == '\'' || peek == '\"')
926 {
63645982 927 gfc_current_locus = old_loc;
6de9cd9a
DN
928 *name = '\0';
929 return MATCH_YES;
930 }
931 }
932
933 if (!ISALNUM (c)
934 && c != '_'
ffa61a5e 935 && (c != '$' || !gfc_option.flag_dollar_ok))
6de9cd9a
DN
936 break;
937
938 *name++ = c;
939 if (++len > GFC_MAX_SYMBOL_LEN)
940 break;
941 }
942
943 return MATCH_NO;
944}
945
946
947/* See if the current input matches a character constant. Lots of
948 contortions have to be done to match the kind parameter which comes
949 before the actual string. The main consideration is that we don't
950 want to error out too quickly. For example, we don't actually do
951 any validation of the kinds until we have actually seen a legal
952 delimiter. Using match_kind_param() generates errors too quickly. */
953
954static match
edf1eac2 955match_string_constant (gfc_expr **result)
6de9cd9a 956{
00660189 957 char name[GFC_MAX_SYMBOL_LEN + 1], peek;
8fc541d3 958 int i, kind, length, warn_ampersand, ret;
6de9cd9a
DN
959 locus old_locus, start_locus;
960 gfc_symbol *sym;
961 gfc_expr *e;
962 const char *q;
963 match m;
00660189 964 gfc_char_t c, delimiter, *p;
6de9cd9a 965
63645982 966 old_locus = gfc_current_locus;
6de9cd9a
DN
967
968 gfc_gobble_whitespace ();
969
6de9cd9a
DN
970 c = gfc_next_char ();
971 if (c == '\'' || c == '"')
972 {
9d64df18 973 kind = gfc_default_character_kind;
66faed76 974 start_locus = gfc_current_locus;
6de9cd9a
DN
975 goto got_delim;
976 }
977
8fc541d3 978 if (gfc_wide_is_digit (c))
6de9cd9a
DN
979 {
980 kind = 0;
981
8fc541d3 982 while (gfc_wide_is_digit (c))
6de9cd9a
DN
983 {
984 kind = kind * 10 + c - '0';
985 if (kind > 9999999)
986 goto no_match;
987 c = gfc_next_char ();
988 }
989
990 }
991 else
992 {
63645982 993 gfc_current_locus = old_locus;
6de9cd9a
DN
994
995 m = match_charkind_name (name);
996 if (m != MATCH_YES)
997 goto no_match;
998
999 if (gfc_find_symbol (name, NULL, 1, &sym)
1000 || sym == NULL
1001 || sym->attr.flavor != FL_PARAMETER)
1002 goto no_match;
1003
1004 kind = -1;
1005 c = gfc_next_char ();
1006 }
1007
1008 if (c == ' ')
1009 {
1010 gfc_gobble_whitespace ();
1011 c = gfc_next_char ();
1012 }
1013
1014 if (c != '_')
1015 goto no_match;
1016
1017 gfc_gobble_whitespace ();
6de9cd9a
DN
1018
1019 c = gfc_next_char ();
1020 if (c != '\'' && c != '"')
1021 goto no_match;
1022
66faed76
DF
1023 start_locus = gfc_current_locus;
1024
6de9cd9a
DN
1025 if (kind == -1)
1026 {
1027 q = gfc_extract_int (sym->value, &kind);
1028 if (q != NULL)
1029 {
1030 gfc_error (q);
1031 return MATCH_ERROR;
1032 }
a39fafac 1033 gfc_set_sym_referenced (sym);
6de9cd9a
DN
1034 }
1035
e7a2d5fb 1036 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
6de9cd9a
DN
1037 {
1038 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
1039 return MATCH_ERROR;
1040 }
1041
1042got_delim:
1043 /* Scan the string into a block of memory by first figuring out how
1044 long it is, allocating the structure, then re-reading it. This
1045 isn't particularly efficient, but string constants aren't that
1046 common in most code. TODO: Use obstacks? */
1047
1048 delimiter = c;
1049 length = 0;
1050
1051 for (;;)
1052 {
8fc541d3
FXC
1053 c = next_string_char (delimiter, &ret);
1054 if (ret == -1)
6de9cd9a 1055 break;
8fc541d3 1056 if (ret == -2)
6de9cd9a 1057 {
63645982 1058 gfc_current_locus = start_locus;
6de9cd9a
DN
1059 gfc_error ("Unterminated character constant beginning at %C");
1060 return MATCH_ERROR;
1061 }
1062
1063 length++;
1064 }
1065
78019d16
SK
1066 /* Peek at the next character to see if it is a b, o, z, or x for the
1067 postfixed BOZ literal constants. */
8fc541d3
FXC
1068 peek = gfc_peek_ascii_char ();
1069 if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x')
78019d16
SK
1070 goto no_match;
1071
b7e75771 1072 e = gfc_get_character_expr (kind, &start_locus, NULL, length);
6de9cd9a 1073
63645982 1074 gfc_current_locus = start_locus;
6de9cd9a 1075
1355d8e7
TB
1076 /* We disable the warning for the following loop as the warning has already
1077 been printed in the loop above. */
1078 warn_ampersand = gfc_option.warn_ampersand;
1079 gfc_option.warn_ampersand = 0;
1080
b7e75771 1081 p = e->value.character.string;
6de9cd9a 1082 for (i = 0; i < length; i++)
8fc541d3
FXC
1083 {
1084 c = next_string_char (delimiter, &ret);
1085
d393bbd7 1086 if (!gfc_check_character_range (c, kind))
8fc541d3 1087 {
efb63364 1088 gfc_free_expr (e);
d393bbd7
FXC
1089 gfc_error ("Character '%s' in string at %C is not representable "
1090 "in character kind %d", gfc_print_wide_char (c), kind);
8fc541d3
FXC
1091 return MATCH_ERROR;
1092 }
1093
00660189 1094 *p++ = c;
8fc541d3 1095 }
6de9cd9a
DN
1096
1097 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
1355d8e7 1098 gfc_option.warn_ampersand = warn_ampersand;
6de9cd9a 1099
8fc541d3
FXC
1100 next_string_char (delimiter, &ret);
1101 if (ret != -1)
6de9cd9a
DN
1102 gfc_internal_error ("match_string_constant(): Delimiter not found");
1103
1104 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1105 e->expr_type = EXPR_SUBSTRING;
1106
1107 *result = e;
1108
1109 return MATCH_YES;
1110
1111no_match:
63645982 1112 gfc_current_locus = old_locus;
6de9cd9a
DN
1113 return MATCH_NO;
1114}
1115
1116
500f8f7b
RS
1117/* Match a .true. or .false. Returns 1 if a .true. was found,
1118 0 if a .false. was found, and -1 otherwise. */
1119static int
1120match_logical_constant_string (void)
1121{
1122 locus orig_loc = gfc_current_locus;
1123
1124 gfc_gobble_whitespace ();
8fc541d3 1125 if (gfc_next_ascii_char () == '.')
500f8f7b 1126 {
8fc541d3 1127 char ch = gfc_next_ascii_char ();
500f8f7b
RS
1128 if (ch == 'f')
1129 {
8fc541d3
FXC
1130 if (gfc_next_ascii_char () == 'a'
1131 && gfc_next_ascii_char () == 'l'
1132 && gfc_next_ascii_char () == 's'
1133 && gfc_next_ascii_char () == 'e'
1134 && gfc_next_ascii_char () == '.')
500f8f7b
RS
1135 /* Matched ".false.". */
1136 return 0;
1137 }
1138 else if (ch == 't')
1139 {
8fc541d3
FXC
1140 if (gfc_next_ascii_char () == 'r'
1141 && gfc_next_ascii_char () == 'u'
1142 && gfc_next_ascii_char () == 'e'
1143 && gfc_next_ascii_char () == '.')
500f8f7b
RS
1144 /* Matched ".true.". */
1145 return 1;
1146 }
1147 }
1148 gfc_current_locus = orig_loc;
1149 return -1;
1150}
1151
6de9cd9a
DN
1152/* Match a .true. or .false. */
1153
1154static match
edf1eac2 1155match_logical_constant (gfc_expr **result)
6de9cd9a 1156{
6de9cd9a 1157 gfc_expr *e;
bee64a2b 1158 int i, kind, is_iso_c;
6de9cd9a 1159
500f8f7b 1160 i = match_logical_constant_string ();
6de9cd9a
DN
1161 if (i == -1)
1162 return MATCH_NO;
1163
bee64a2b 1164 kind = get_kind (&is_iso_c);
6de9cd9a
DN
1165 if (kind == -1)
1166 return MATCH_ERROR;
1167 if (kind == -2)
9d64df18 1168 kind = gfc_default_logical_kind;
6de9cd9a 1169
e7a2d5fb 1170 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
eb62be44
SK
1171 {
1172 gfc_error ("Bad kind for logical constant at %C");
1173 return MATCH_ERROR;
1174 }
6de9cd9a 1175
b7e75771 1176 e = gfc_get_logical_expr (kind, &gfc_current_locus, i);
bee64a2b 1177 e->ts.is_c_interop = is_iso_c;
6de9cd9a
DN
1178
1179 *result = e;
1180 return MATCH_YES;
1181}
1182
1183
1184/* Match a real or imaginary part of a complex constant that is a
1185 symbolic constant. */
1186
1187static match
edf1eac2 1188match_sym_complex_part (gfc_expr **result)
6de9cd9a
DN
1189{
1190 char name[GFC_MAX_SYMBOL_LEN + 1];
1191 gfc_symbol *sym;
1192 gfc_expr *e;
1193 match m;
1194
1195 m = gfc_match_name (name);
1196 if (m != MATCH_YES)
1197 return m;
1198
1199 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1200 return MATCH_NO;
1201
1202 if (sym->attr.flavor != FL_PARAMETER)
1203 {
1204 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1205 return MATCH_ERROR;
1206 }
1207
1208 if (!gfc_numeric_ts (&sym->value->ts))
1209 {
1210 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1211 return MATCH_ERROR;
1212 }
1213
1214 if (sym->value->rank != 0)
1215 {
1216 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1217 return MATCH_ERROR;
1218 }
1219
9717f7a1 1220 if (gfc_notify_std (GFC_STD_F2003, "PARAMETER symbol in "
e227ac57
FXC
1221 "complex constant at %C") == FAILURE)
1222 return MATCH_ERROR;
1223
6de9cd9a
DN
1224 switch (sym->value->ts.type)
1225 {
1226 case BT_REAL:
1227 e = gfc_copy_expr (sym->value);
1228 break;
1229
1230 case BT_COMPLEX:
1231 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1232 if (e == NULL)
1233 goto error;
1234 break;
1235
1236 case BT_INTEGER:
9d64df18 1237 e = gfc_int2real (sym->value, gfc_default_real_kind);
6de9cd9a
DN
1238 if (e == NULL)
1239 goto error;
1240 break;
1241
1242 default:
1243 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1244 }
1245
edf1eac2 1246 *result = e; /* e is a scalar, real, constant expression. */
6de9cd9a
DN
1247 return MATCH_YES;
1248
1249error:
1250 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1251 return MATCH_ERROR;
1252}
1253
1254
6de9cd9a
DN
1255/* Match a real or imaginary part of a complex number. */
1256
1257static match
edf1eac2 1258match_complex_part (gfc_expr **result)
6de9cd9a
DN
1259{
1260 match m;
1261
1262 m = match_sym_complex_part (result);
1263 if (m != MATCH_NO)
1264 return m;
1265
69029c61
PB
1266 m = match_real_constant (result, 1);
1267 if (m != MATCH_NO)
1268 return m;
1269
1270 return match_integer_constant (result, 1);
6de9cd9a
DN
1271}
1272
1273
1274/* Try to match a complex constant. */
1275
1276static match
edf1eac2 1277match_complex_constant (gfc_expr **result)
6de9cd9a
DN
1278{
1279 gfc_expr *e, *real, *imag;
1280 gfc_error_buf old_error;
1281 gfc_typespec target;
1282 locus old_loc;
1283 int kind;
1284 match m;
1285
63645982 1286 old_loc = gfc_current_locus;
6de9cd9a
DN
1287 real = imag = e = NULL;
1288
1289 m = gfc_match_char ('(');
1290 if (m != MATCH_YES)
1291 return m;
1292
1293 gfc_push_error (&old_error);
1294
1295 m = match_complex_part (&real);
1296 if (m == MATCH_NO)
d71b89ca
JJ
1297 {
1298 gfc_free_error (&old_error);
1299 goto cleanup;
1300 }
6de9cd9a
DN
1301
1302 if (gfc_match_char (',') == MATCH_NO)
1303 {
1304 gfc_pop_error (&old_error);
1305 m = MATCH_NO;
1306 goto cleanup;
1307 }
1308
1309 /* If m is error, then something was wrong with the real part and we
1310 assume we have a complex constant because we've seen the ','. An
1311 ambiguous case here is the start of an iterator list of some
1312 sort. These sort of lists are matched prior to coming here. */
1313
1314 if (m == MATCH_ERROR)
d71b89ca
JJ
1315 {
1316 gfc_free_error (&old_error);
1317 goto cleanup;
1318 }
6de9cd9a
DN
1319 gfc_pop_error (&old_error);
1320
1321 m = match_complex_part (&imag);
1322 if (m == MATCH_NO)
1323 goto syntax;
1324 if (m == MATCH_ERROR)
1325 goto cleanup;
1326
1327 m = gfc_match_char (')');
1328 if (m == MATCH_NO)
87ebdf2f
SK
1329 {
1330 /* Give the matcher for implied do-loops a chance to run. This
1331 yields a much saner error message for (/ (i, 4=i, 6) /). */
8fc541d3 1332 if (gfc_peek_ascii_char () == '=')
87ebdf2f
SK
1333 {
1334 m = MATCH_ERROR;
1335 goto cleanup;
1336 }
1337 else
6de9cd9a 1338 goto syntax;
87ebdf2f 1339 }
6de9cd9a
DN
1340
1341 if (m == MATCH_ERROR)
1342 goto cleanup;
1343
1344 /* Decide on the kind of this complex number. */
69029c61
PB
1345 if (real->ts.type == BT_REAL)
1346 {
1347 if (imag->ts.type == BT_REAL)
1348 kind = gfc_kind_max (real, imag);
1349 else
1350 kind = real->ts.kind;
1351 }
1352 else
1353 {
1354 if (imag->ts.type == BT_REAL)
1355 kind = imag->ts.kind;
1356 else
1357 kind = gfc_default_real_kind;
1358 }
d91909c0 1359 gfc_clear_ts (&target);
6de9cd9a
DN
1360 target.type = BT_REAL;
1361 target.kind = kind;
1362
69029c61 1363 if (real->ts.type != BT_REAL || kind != real->ts.kind)
6de9cd9a 1364 gfc_convert_type (real, &target, 2);
69029c61 1365 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
6de9cd9a
DN
1366 gfc_convert_type (imag, &target, 2);
1367
1368 e = gfc_convert_complex (real, imag, kind);
63645982 1369 e->where = gfc_current_locus;
6de9cd9a
DN
1370
1371 gfc_free_expr (real);
1372 gfc_free_expr (imag);
1373
1374 *result = e;
1375 return MATCH_YES;
1376
1377syntax:
1378 gfc_error ("Syntax error in COMPLEX constant at %C");
1379 m = MATCH_ERROR;
1380
1381cleanup:
1382 gfc_free_expr (e);
1383 gfc_free_expr (real);
1384 gfc_free_expr (imag);
63645982 1385 gfc_current_locus = old_loc;
6de9cd9a
DN
1386
1387 return m;
1388}
1389
1390
1391/* Match constants in any of several forms. Returns nonzero for a
1392 match, zero for no match. */
1393
1394match
edf1eac2 1395gfc_match_literal_constant (gfc_expr **result, int signflag)
6de9cd9a
DN
1396{
1397 match m;
1398
1399 m = match_complex_constant (result);
1400 if (m != MATCH_NO)
1401 return m;
1402
1403 m = match_string_constant (result);
1404 if (m != MATCH_NO)
1405 return m;
1406
1407 m = match_boz_constant (result);
1408 if (m != MATCH_NO)
1409 return m;
1410
1411 m = match_real_constant (result, signflag);
1412 if (m != MATCH_NO)
1413 return m;
1414
d3642f89
FW
1415 m = match_hollerith_constant (result);
1416 if (m != MATCH_NO)
1417 return m;
1418
6de9cd9a
DN
1419 m = match_integer_constant (result, signflag);
1420 if (m != MATCH_NO)
1421 return m;
1422
1423 m = match_logical_constant (result);
1424 if (m != MATCH_NO)
1425 return m;
1426
1427 return MATCH_NO;
1428}
1429
1430
2d71b918
JW
1431/* This checks if a symbol is the return value of an encompassing function.
1432 Function nesting can be maximally two levels deep, but we may have
1433 additional local namespaces like BLOCK etc. */
1434
1435bool
1436gfc_is_function_return_value (gfc_symbol *sym, gfc_namespace *ns)
1437{
1438 if (!sym->attr.function || (sym->result != sym))
1439 return false;
1440 while (ns)
1441 {
1442 if (ns->proc_name == sym)
1443 return true;
1444 ns = ns->parent;
1445 }
1446 return false;
1447}
1448
1449
6de9cd9a
DN
1450/* Match a single actual argument value. An actual argument is
1451 usually an expression, but can also be a procedure name. If the
1452 argument is a single name, it is not always possible to tell
1453 whether the name is a dummy procedure or not. We treat these cases
1454 by creating an argument that looks like a dummy procedure and
1455 fixing things later during resolution. */
1456
1457static match
edf1eac2 1458match_actual_arg (gfc_expr **result)
6de9cd9a
DN
1459{
1460 char name[GFC_MAX_SYMBOL_LEN + 1];
1461 gfc_symtree *symtree;
1462 locus where, w;
1463 gfc_expr *e;
8fc541d3 1464 char c;
6de9cd9a 1465
618f4f46 1466 gfc_gobble_whitespace ();
63645982 1467 where = gfc_current_locus;
6de9cd9a
DN
1468
1469 switch (gfc_match_name (name))
1470 {
1471 case MATCH_ERROR:
1472 return MATCH_ERROR;
1473
1474 case MATCH_NO:
1475 break;
1476
1477 case MATCH_YES:
63645982 1478 w = gfc_current_locus;
6de9cd9a 1479 gfc_gobble_whitespace ();
8fc541d3 1480 c = gfc_next_ascii_char ();
63645982 1481 gfc_current_locus = w;
6de9cd9a
DN
1482
1483 if (c != ',' && c != ')')
1484 break;
1485
1486 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1487 break;
1488 /* Handle error elsewhere. */
1489
1490 /* Eliminate a couple of common cases where we know we don't
edf1eac2 1491 have a function argument. */
6de9cd9a 1492 if (symtree == NULL)
edf1eac2 1493 {
08a6b8e0 1494 gfc_get_sym_tree (name, NULL, &symtree, false);
edf1eac2
SK
1495 gfc_set_sym_referenced (symtree->n.sym);
1496 }
6de9cd9a
DN
1497 else
1498 {
edf1eac2 1499 gfc_symbol *sym;
6de9cd9a 1500
edf1eac2
SK
1501 sym = symtree->n.sym;
1502 gfc_set_sym_referenced (sym);
6de9cd9a
DN
1503 if (sym->attr.flavor != FL_PROCEDURE
1504 && sym->attr.flavor != FL_UNKNOWN)
1505 break;
1506
6f9c9d6d
TB
1507 if (sym->attr.in_common && !sym->attr.proc_pointer)
1508 {
efb63364
TB
1509 if (gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name,
1510 &sym->declared_at) == FAILURE)
1511 return MATCH_ERROR;
6f9c9d6d
TB
1512 break;
1513 }
1514
6de9cd9a
DN
1515 /* If the symbol is a function with itself as the result and
1516 is being defined, then we have a variable. */
7a4ef45b
JJ
1517 if (sym->attr.function && sym->result == sym)
1518 {
2d71b918 1519 if (gfc_is_function_return_value (sym, gfc_current_ns))
7a4ef45b
JJ
1520 break;
1521
1522 if (sym->attr.entry
1523 && (sym->ns == gfc_current_ns
1524 || sym->ns == gfc_current_ns->parent))
1525 {
1526 gfc_entry_list *el = NULL;
1527
1528 for (el = sym->ns->entries; el; el = el->next)
1529 if (sym == el->sym)
1530 break;
1531
1532 if (el)
1533 break;
1534 }
1535 }
6de9cd9a
DN
1536 }
1537
1538 e = gfc_get_expr (); /* Leave it unknown for now */
1539 e->symtree = symtree;
1540 e->expr_type = EXPR_VARIABLE;
1541 e->ts.type = BT_PROCEDURE;
1542 e->where = where;
1543
1544 *result = e;
1545 return MATCH_YES;
1546 }
1547
63645982 1548 gfc_current_locus = where;
6de9cd9a
DN
1549 return gfc_match_expr (result);
1550}
1551
1552
1553/* Match a keyword argument. */
1554
1555static match
edf1eac2 1556match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
6de9cd9a
DN
1557{
1558 char name[GFC_MAX_SYMBOL_LEN + 1];
1559 gfc_actual_arglist *a;
1560 locus name_locus;
1561 match m;
1562
63645982 1563 name_locus = gfc_current_locus;
6de9cd9a
DN
1564 m = gfc_match_name (name);
1565
1566 if (m != MATCH_YES)
1567 goto cleanup;
1568 if (gfc_match_char ('=') != MATCH_YES)
1569 {
1570 m = MATCH_NO;
1571 goto cleanup;
1572 }
1573
1574 m = match_actual_arg (&actual->expr);
1575 if (m != MATCH_YES)
1576 goto cleanup;
1577
1578 /* Make sure this name has not appeared yet. */
1579
1580 if (name[0] != '\0')
1581 {
1582 for (a = base; a; a = a->next)
cb9e4f55 1583 if (a->name != NULL && strcmp (a->name, name) == 0)
6de9cd9a 1584 {
edf1eac2
SK
1585 gfc_error ("Keyword '%s' at %C has already appeared in the "
1586 "current argument list", name);
6de9cd9a
DN
1587 return MATCH_ERROR;
1588 }
1589 }
1590
cb9e4f55 1591 actual->name = gfc_get_string (name);
6de9cd9a
DN
1592 return MATCH_YES;
1593
1594cleanup:
63645982 1595 gfc_current_locus = name_locus;
6de9cd9a
DN
1596 return m;
1597}
1598
1599
7fcafa71
PT
1600/* Match an argument list function, such as %VAL. */
1601
1602static match
1603match_arg_list_function (gfc_actual_arglist *result)
1604{
1605 char name[GFC_MAX_SYMBOL_LEN + 1];
1606 locus old_locus;
1607 match m;
1608
1609 old_locus = gfc_current_locus;
1610
1611 if (gfc_match_char ('%') != MATCH_YES)
1612 {
1613 m = MATCH_NO;
1614 goto cleanup;
1615 }
1616
1617 m = gfc_match ("%n (", name);
1618 if (m != MATCH_YES)
1619 goto cleanup;
1620
1621 if (name[0] != '\0')
1622 {
1623 switch (name[0])
1624 {
1625 case 'l':
edf1eac2 1626 if (strncmp (name, "loc", 3) == 0)
7fcafa71
PT
1627 {
1628 result->name = "%LOC";
1629 break;
1630 }
1631 case 'r':
edf1eac2 1632 if (strncmp (name, "ref", 3) == 0)
7fcafa71
PT
1633 {
1634 result->name = "%REF";
1635 break;
1636 }
1637 case 'v':
edf1eac2 1638 if (strncmp (name, "val", 3) == 0)
7fcafa71
PT
1639 {
1640 result->name = "%VAL";
1641 break;
1642 }
1643 default:
1644 m = MATCH_ERROR;
1645 goto cleanup;
1646 }
1647 }
1648
9717f7a1 1649 if (gfc_notify_std (GFC_STD_GNU, "argument list "
7fcafa71
PT
1650 "function at %C") == FAILURE)
1651 {
1652 m = MATCH_ERROR;
1653 goto cleanup;
1654 }
1655
1656 m = match_actual_arg (&result->expr);
1657 if (m != MATCH_YES)
1658 goto cleanup;
1659
1660 if (gfc_match_char (')') != MATCH_YES)
1661 {
1662 m = MATCH_NO;
1663 goto cleanup;
1664 }
1665
1666 return MATCH_YES;
1667
1668cleanup:
1669 gfc_current_locus = old_locus;
1670 return m;
1671}
1672
1673
6de9cd9a
DN
1674/* Matches an actual argument list of a function or subroutine, from
1675 the opening parenthesis to the closing parenthesis. The argument
1676 list is assumed to allow keyword arguments because we don't know if
1677 the symbol associated with the procedure has an implicit interface
ed5ee445 1678 or not. We make sure keywords are unique. If sub_flag is set,
d3fcc995 1679 we're matching the argument list of a subroutine. */
6de9cd9a
DN
1680
1681match
edf1eac2 1682gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
6de9cd9a
DN
1683{
1684 gfc_actual_arglist *head, *tail;
1685 int seen_keyword;
1686 gfc_st_label *label;
1687 locus old_loc;
1688 match m;
1689
1690 *argp = tail = NULL;
63645982 1691 old_loc = gfc_current_locus;
6de9cd9a
DN
1692
1693 seen_keyword = 0;
1694
1695 if (gfc_match_char ('(') == MATCH_NO)
1696 return (sub_flag) ? MATCH_YES : MATCH_NO;
1697
1698 if (gfc_match_char (')') == MATCH_YES)
1699 return MATCH_YES;
1700 head = NULL;
1701
837c4b78
JW
1702 matching_actual_arglist++;
1703
6de9cd9a
DN
1704 for (;;)
1705 {
1706 if (head == NULL)
1707 head = tail = gfc_get_actual_arglist ();
1708 else
1709 {
1710 tail->next = gfc_get_actual_arglist ();
1711 tail = tail->next;
1712 }
1713
1714 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1715 {
a34a91f0 1716 m = gfc_match_st_label (&label);
6de9cd9a
DN
1717 if (m == MATCH_NO)
1718 gfc_error ("Expected alternate return label at %C");
1719 if (m != MATCH_YES)
1720 goto cleanup;
1721
1722 tail->label = label;
1723 goto next;
1724 }
1725
1726 /* After the first keyword argument is seen, the following
edf1eac2 1727 arguments must also have keywords. */
6de9cd9a
DN
1728 if (seen_keyword)
1729 {
1730 m = match_keyword_arg (tail, head);
1731
1732 if (m == MATCH_ERROR)
1733 goto cleanup;
1734 if (m == MATCH_NO)
1735 {
edf1eac2 1736 gfc_error ("Missing keyword name in actual argument list at %C");
6de9cd9a
DN
1737 goto cleanup;
1738 }
1739
1740 }
1741 else
1742 {
7fcafa71
PT
1743 /* Try an argument list function, like %VAL. */
1744 m = match_arg_list_function (tail);
6de9cd9a
DN
1745 if (m == MATCH_ERROR)
1746 goto cleanup;
1747
7fcafa71
PT
1748 /* See if we have the first keyword argument. */
1749 if (m == MATCH_NO)
1750 {
1751 m = match_keyword_arg (tail, head);
1752 if (m == MATCH_YES)
1753 seen_keyword = 1;
1754 if (m == MATCH_ERROR)
1755 goto cleanup;
1756 }
1757
6de9cd9a
DN
1758 if (m == MATCH_NO)
1759 {
1760 /* Try for a non-keyword argument. */
1761 m = match_actual_arg (&tail->expr);
1762 if (m == MATCH_ERROR)
1763 goto cleanup;
1764 if (m == MATCH_NO)
1765 goto syntax;
1766 }
1767 }
1768
7fcafa71 1769
6de9cd9a
DN
1770 next:
1771 if (gfc_match_char (')') == MATCH_YES)
1772 break;
1773 if (gfc_match_char (',') != MATCH_YES)
1774 goto syntax;
1775 }
1776
1777 *argp = head;
837c4b78 1778 matching_actual_arglist--;
6de9cd9a
DN
1779 return MATCH_YES;
1780
1781syntax:
1782 gfc_error ("Syntax error in argument list at %C");
1783
1784cleanup:
1785 gfc_free_actual_arglist (head);
63645982 1786 gfc_current_locus = old_loc;
837c4b78 1787 matching_actual_arglist--;
6de9cd9a
DN
1788 return MATCH_ERROR;
1789}
1790
1791
8e1f752a 1792/* Used by gfc_match_varspec() to extend the reference list by one
6de9cd9a
DN
1793 element. */
1794
1795static gfc_ref *
edf1eac2 1796extend_ref (gfc_expr *primary, gfc_ref *tail)
6de9cd9a 1797{
6de9cd9a
DN
1798 if (primary->ref == NULL)
1799 primary->ref = tail = gfc_get_ref ();
1800 else
1801 {
1802 if (tail == NULL)
1803 gfc_internal_error ("extend_ref(): Bad tail");
1804 tail->next = gfc_get_ref ();
1805 tail = tail->next;
1806 }
1807
1808 return tail;
1809}
1810
1811
1812/* Match any additional specifications associated with the current
1813 variable like member references or substrings. If equiv_flag is
1814 set we only match stuff that is allowed inside an EQUIVALENCE
8e1f752a 1815 statement. sub_flag tells whether we expect a type-bound procedure found
713485cc
JW
1816 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1817 components, 'ppc_arg' determines whether the PPC may be called (with an
1818 argument list), or whether it may just be referred to as a pointer. */
6de9cd9a 1819
8e1f752a 1820match
713485cc
JW
1821gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1822 bool ppc_arg)
6de9cd9a
DN
1823{
1824 char name[GFC_MAX_SYMBOL_LEN + 1];
1825 gfc_ref *substring, *tail;
1826 gfc_component *component;
a8006d09 1827 gfc_symbol *sym = primary->symtree->n.sym;
6de9cd9a 1828 match m;
f2d3cb25 1829 bool unknown;
6de9cd9a
DN
1830
1831 tail = NULL;
1832
3c721513 1833 gfc_gobble_whitespace ();
d3a9eea2
TB
1834
1835 if (gfc_peek_ascii_char () == '[')
1836 {
c49ea23d
PT
1837 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1838 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1839 && CLASS_DATA (sym)->attr.dimension))
d3a9eea2
TB
1840 {
1841 gfc_error ("Array section designator, e.g. '(:)', is required "
1842 "besides the coarray designator '[...]' at %C");
1843 return MATCH_ERROR;
1844 }
c49ea23d
PT
1845 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1846 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1847 && !CLASS_DATA (sym)->attr.codimension))
d3a9eea2
TB
1848 {
1849 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1850 sym->name);
1851 return MATCH_ERROR;
1852 }
1853 }
1854
52bf62f9
DK
1855 /* For associate names, we may not yet know whether they are arrays or not.
1856 Thus if we have one and parentheses follow, we have to assume that it
1857 actually is one for now. The final decision will be made at
1858 resolution time, of course. */
1859 if (sym->assoc && gfc_peek_ascii_char () == '(')
1860 sym->attr.dimension = 1;
1861
c74b74a8 1862 if ((equiv_flag && gfc_peek_ascii_char () == '(')
d3a9eea2 1863 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
ce2ab24c 1864 || (sym->attr.dimension && sym->ts.type != BT_CLASS
2a573572 1865 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
f64edc8b 1866 && !(gfc_matching_procptr_assignment
cf2b3c22 1867 && sym->attr.flavor == FL_PROCEDURE))
22061030 1868 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
492792ed
TB
1869 && (CLASS_DATA (sym)->attr.dimension
1870 || CLASS_DATA (sym)->attr.codimension)))
6de9cd9a 1871 {
102344e2
TB
1872 gfc_array_spec *as;
1873
1874 tail = extend_ref (primary, tail);
1875 tail->type = REF_ARRAY;
1876
a8006d09
JJ
1877 /* In EQUIVALENCE, we don't know yet whether we are seeing
1878 an array, character variable or array of character
edf1eac2 1879 variables. We'll leave the decision till resolve time. */
6de9cd9a 1880
102344e2
TB
1881 if (equiv_flag)
1882 as = NULL;
1883 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1884 as = CLASS_DATA (sym)->as;
1885 else
1886 as = sym->as;
1887
1888 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1889 as ? as->corank : 0);
6de9cd9a
DN
1890 if (m != MATCH_YES)
1891 return m;
a8006d09 1892
3c721513 1893 gfc_gobble_whitespace ();
8fc541d3 1894 if (equiv_flag && gfc_peek_ascii_char () == '(')
a8006d09
JJ
1895 {
1896 tail = extend_ref (primary, tail);
1897 tail->type = REF_ARRAY;
1898
d3a9eea2 1899 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
a8006d09
JJ
1900 if (m != MATCH_YES)
1901 return m;
1902 }
6de9cd9a
DN
1903 }
1904
6de9cd9a
DN
1905 primary->ts = sym->ts;
1906
a8006d09
JJ
1907 if (equiv_flag)
1908 return MATCH_YES;
1909
ebac6d9c 1910 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
713485cc 1911 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
ebac6d9c
DK
1912 gfc_set_default_type (sym, 0, sym->ns);
1913
6ee65df3
TB
1914 if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES)
1915 {
1916 gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name);
1917 return MATCH_ERROR;
1918 }
1919 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1920 && gfc_match_char ('%') == MATCH_YES)
1921 {
1922 gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C",
9f507235 1923 sym->name);
6ee65df3
TB
1924 return MATCH_ERROR;
1925 }
1926
cf2b3c22
TB
1927 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1928 || gfc_match_char ('%') != MATCH_YES)
6de9cd9a
DN
1929 goto check_substring;
1930
bc21d315 1931 sym = sym->ts.u.derived;
6de9cd9a
DN
1932
1933 for (;;)
1934 {
8e1f752a 1935 gfc_try t;
e157f736 1936 gfc_symtree *tbp;
8e1f752a 1937
6de9cd9a
DN
1938 m = gfc_match_name (name);
1939 if (m == MATCH_NO)
1940 gfc_error ("Expected structure component name at %C");
1941 if (m != MATCH_YES)
1942 return MATCH_ERROR;
1943
b2acf594
PT
1944 if (sym->f2k_derived)
1945 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1946 else
1947 tbp = NULL;
1948
8e1f752a
DK
1949 if (tbp)
1950 {
1951 gfc_symbol* tbp_sym;
1952
1953 if (t == FAILURE)
1954 return MATCH_ERROR;
1955
1956 gcc_assert (!tail || !tail->next);
4618de23
TB
1957 gcc_assert (primary->expr_type == EXPR_VARIABLE
1958 || (primary->expr_type == EXPR_STRUCTURE
1959 && primary->symtree && primary->symtree->n.sym
1960 && primary->symtree->n.sym->attr.flavor));
8e1f752a 1961
e34ccb4c 1962 if (tbp->n.tb->is_generic)
e157f736
DK
1963 tbp_sym = NULL;
1964 else
e34ccb4c 1965 tbp_sym = tbp->n.tb->u.specific->n.sym;
8e1f752a
DK
1966
1967 primary->expr_type = EXPR_COMPCALL;
e34ccb4c 1968 primary->value.compcall.tbp = tbp->n.tb;
e157f736 1969 primary->value.compcall.name = tbp->name;
4a44a72d
DK
1970 primary->value.compcall.ignore_pass = 0;
1971 primary->value.compcall.assign = 0;
1972 primary->value.compcall.base_object = NULL;
e157f736
DK
1973 gcc_assert (primary->symtree->n.sym->attr.referenced);
1974 if (tbp_sym)
1975 primary->ts = tbp_sym->ts;
049bb74e
JW
1976 else
1977 gfc_clear_ts (&primary->ts);
e157f736 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