]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/primary.c
sparc.c: Include tree-pass.h.
[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
fbdeeaac
JW
1722 if (gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1723 "at %C") == FAILURE)
1724 goto cleanup;
1725
6de9cd9a
DN
1726 tail->label = label;
1727 goto next;
1728 }
1729
1730 /* After the first keyword argument is seen, the following
edf1eac2 1731 arguments must also have keywords. */
6de9cd9a
DN
1732 if (seen_keyword)
1733 {
1734 m = match_keyword_arg (tail, head);
1735
1736 if (m == MATCH_ERROR)
1737 goto cleanup;
1738 if (m == MATCH_NO)
1739 {
edf1eac2 1740 gfc_error ("Missing keyword name in actual argument list at %C");
6de9cd9a
DN
1741 goto cleanup;
1742 }
1743
1744 }
1745 else
1746 {
7fcafa71
PT
1747 /* Try an argument list function, like %VAL. */
1748 m = match_arg_list_function (tail);
6de9cd9a
DN
1749 if (m == MATCH_ERROR)
1750 goto cleanup;
1751
7fcafa71
PT
1752 /* See if we have the first keyword argument. */
1753 if (m == MATCH_NO)
1754 {
1755 m = match_keyword_arg (tail, head);
1756 if (m == MATCH_YES)
1757 seen_keyword = 1;
1758 if (m == MATCH_ERROR)
1759 goto cleanup;
1760 }
1761
6de9cd9a
DN
1762 if (m == MATCH_NO)
1763 {
1764 /* Try for a non-keyword argument. */
1765 m = match_actual_arg (&tail->expr);
1766 if (m == MATCH_ERROR)
1767 goto cleanup;
1768 if (m == MATCH_NO)
1769 goto syntax;
1770 }
1771 }
1772
7fcafa71 1773
6de9cd9a
DN
1774 next:
1775 if (gfc_match_char (')') == MATCH_YES)
1776 break;
1777 if (gfc_match_char (',') != MATCH_YES)
1778 goto syntax;
1779 }
1780
1781 *argp = head;
837c4b78 1782 matching_actual_arglist--;
6de9cd9a
DN
1783 return MATCH_YES;
1784
1785syntax:
1786 gfc_error ("Syntax error in argument list at %C");
1787
1788cleanup:
1789 gfc_free_actual_arglist (head);
63645982 1790 gfc_current_locus = old_loc;
837c4b78 1791 matching_actual_arglist--;
6de9cd9a
DN
1792 return MATCH_ERROR;
1793}
1794
1795
8e1f752a 1796/* Used by gfc_match_varspec() to extend the reference list by one
6de9cd9a
DN
1797 element. */
1798
1799static gfc_ref *
edf1eac2 1800extend_ref (gfc_expr *primary, gfc_ref *tail)
6de9cd9a 1801{
6de9cd9a
DN
1802 if (primary->ref == NULL)
1803 primary->ref = tail = gfc_get_ref ();
1804 else
1805 {
1806 if (tail == NULL)
1807 gfc_internal_error ("extend_ref(): Bad tail");
1808 tail->next = gfc_get_ref ();
1809 tail = tail->next;
1810 }
1811
1812 return tail;
1813}
1814
1815
1816/* Match any additional specifications associated with the current
1817 variable like member references or substrings. If equiv_flag is
1818 set we only match stuff that is allowed inside an EQUIVALENCE
8e1f752a 1819 statement. sub_flag tells whether we expect a type-bound procedure found
713485cc
JW
1820 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1821 components, 'ppc_arg' determines whether the PPC may be called (with an
1822 argument list), or whether it may just be referred to as a pointer. */
6de9cd9a 1823
8e1f752a 1824match
713485cc
JW
1825gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1826 bool ppc_arg)
6de9cd9a
DN
1827{
1828 char name[GFC_MAX_SYMBOL_LEN + 1];
1829 gfc_ref *substring, *tail;
1830 gfc_component *component;
a8006d09 1831 gfc_symbol *sym = primary->symtree->n.sym;
6de9cd9a 1832 match m;
f2d3cb25 1833 bool unknown;
6de9cd9a
DN
1834
1835 tail = NULL;
1836
3c721513 1837 gfc_gobble_whitespace ();
d3a9eea2
TB
1838
1839 if (gfc_peek_ascii_char () == '[')
1840 {
c49ea23d
PT
1841 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1842 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1843 && CLASS_DATA (sym)->attr.dimension))
d3a9eea2
TB
1844 {
1845 gfc_error ("Array section designator, e.g. '(:)', is required "
1846 "besides the coarray designator '[...]' at %C");
1847 return MATCH_ERROR;
1848 }
c49ea23d
PT
1849 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1850 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1851 && !CLASS_DATA (sym)->attr.codimension))
d3a9eea2
TB
1852 {
1853 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1854 sym->name);
1855 return MATCH_ERROR;
1856 }
1857 }
1858
52bf62f9
DK
1859 /* For associate names, we may not yet know whether they are arrays or not.
1860 Thus if we have one and parentheses follow, we have to assume that it
1861 actually is one for now. The final decision will be made at
1862 resolution time, of course. */
1863 if (sym->assoc && gfc_peek_ascii_char () == '(')
1864 sym->attr.dimension = 1;
1865
c74b74a8 1866 if ((equiv_flag && gfc_peek_ascii_char () == '(')
d3a9eea2 1867 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
ce2ab24c 1868 || (sym->attr.dimension && sym->ts.type != BT_CLASS
2a573572 1869 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
f64edc8b 1870 && !(gfc_matching_procptr_assignment
cf2b3c22 1871 && sym->attr.flavor == FL_PROCEDURE))
22061030 1872 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
492792ed
TB
1873 && (CLASS_DATA (sym)->attr.dimension
1874 || CLASS_DATA (sym)->attr.codimension)))
6de9cd9a 1875 {
102344e2
TB
1876 gfc_array_spec *as;
1877
1878 tail = extend_ref (primary, tail);
1879 tail->type = REF_ARRAY;
1880
a8006d09
JJ
1881 /* In EQUIVALENCE, we don't know yet whether we are seeing
1882 an array, character variable or array of character
edf1eac2 1883 variables. We'll leave the decision till resolve time. */
6de9cd9a 1884
102344e2
TB
1885 if (equiv_flag)
1886 as = NULL;
1887 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1888 as = CLASS_DATA (sym)->as;
1889 else
1890 as = sym->as;
1891
1892 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1893 as ? as->corank : 0);
6de9cd9a
DN
1894 if (m != MATCH_YES)
1895 return m;
a8006d09 1896
3c721513 1897 gfc_gobble_whitespace ();
8fc541d3 1898 if (equiv_flag && gfc_peek_ascii_char () == '(')
a8006d09
JJ
1899 {
1900 tail = extend_ref (primary, tail);
1901 tail->type = REF_ARRAY;
1902
d3a9eea2 1903 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
a8006d09
JJ
1904 if (m != MATCH_YES)
1905 return m;
1906 }
6de9cd9a
DN
1907 }
1908
6de9cd9a
DN
1909 primary->ts = sym->ts;
1910
a8006d09
JJ
1911 if (equiv_flag)
1912 return MATCH_YES;
1913
ebac6d9c 1914 if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%'
713485cc 1915 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
ebac6d9c
DK
1916 gfc_set_default_type (sym, 0, sym->ns);
1917
6ee65df3
TB
1918 if (sym->ts.type == BT_UNKNOWN && gfc_match_char ('%') == MATCH_YES)
1919 {
1920 gfc_error ("Symbol '%s' at %C has no IMPLICIT type", sym->name);
1921 return MATCH_ERROR;
1922 }
1923 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1924 && gfc_match_char ('%') == MATCH_YES)
1925 {
1926 gfc_error ("Unexpected '%%' for nonderived-type variable '%s' at %C",
9f507235 1927 sym->name);
6ee65df3
TB
1928 return MATCH_ERROR;
1929 }
1930
cf2b3c22
TB
1931 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
1932 || gfc_match_char ('%') != MATCH_YES)
6de9cd9a
DN
1933 goto check_substring;
1934
bc21d315 1935 sym = sym->ts.u.derived;
6de9cd9a
DN
1936
1937 for (;;)
1938 {
8e1f752a 1939 gfc_try t;
e157f736 1940 gfc_symtree *tbp;
8e1f752a 1941
6de9cd9a
DN
1942 m = gfc_match_name (name);
1943 if (m == MATCH_NO)
1944 gfc_error ("Expected structure component name at %C");
1945 if (m != MATCH_YES)
1946 return MATCH_ERROR;
1947
b2acf594
PT
1948 if (sym->f2k_derived)
1949 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
1950 else
1951 tbp = NULL;
1952
8e1f752a
DK
1953 if (tbp)
1954 {
1955 gfc_symbol* tbp_sym;
1956
1957 if (t == FAILURE)
1958 return MATCH_ERROR;
1959
1960 gcc_assert (!tail || !tail->next);
4618de23
TB
1961 gcc_assert (primary->expr_type == EXPR_VARIABLE
1962 || (primary->expr_type == EXPR_STRUCTURE
1963 && primary->symtree && primary->symtree->n.sym
1964 && primary->symtree->n.sym->attr.flavor));
8e1f752a 1965
e34ccb4c 1966 if (tbp->n.tb->is_generic)
e157f736
DK
1967 tbp_sym = NULL;
1968 else
e34ccb4c 1969 tbp_sym = tbp->n.tb->u.specific->n.sym;
8e1f752a
DK
1970
1971 primary->expr_type = EXPR_COMPCALL;
e34ccb4c 1972 primary->value.compcall.tbp = tbp->n.tb;
e157f736 1973 primary->value.compcall.name = tbp->name;
4a44a72d
DK
1974 primary->value.compcall.ignore_pass = 0;
1975 primary->value.compcall.assign = 0;
1976 primary->value.compcall.base_object = NULL;
e157f736
DK
1977 gcc_assert (primary->symtree->n.sym->attr.referenced);
1978 if (tbp_sym)
1979 primary->ts = tbp_sym->ts;
049bb74e
JW
1980 else
1981 gfc_clear_ts (&primary->ts);
e157f736 1982
e34ccb4c 1983 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
8e1f752a
DK
1984 &primary->value.compcall.actual);
1985 if (m == MATCH_ERROR)
1986 return MATCH_ERROR;
1987 if (m == MATCH_NO)
1988 {
1989 if (sub_flag)
1990 primary->value.compcall.actual = NULL;
1991 else
1992 {
1993 gfc_error ("Expected argument list at %C");
1994 return MATCH_ERROR;
1995 }
1996 }
1997
8e1f752a
DK
1998 break;
1999 }
2000
9d1210f4 2001 component = gfc_find_component (sym, name, false, false);
6de9cd9a
DN
2002 if (component == NULL)
2003 return MATCH_ERROR;
2004
2005 tail = extend_ref (primary, tail);
2006 tail->type = REF_COMPONENT;
2007
2008 tail->u.c.component = component;
2009 tail->u.c.sym = sym;
2010
2011 primary->ts = component->ts;
2012
a4a76e52 2013 if (component->attr.proc_pointer && ppc_arg)
713485cc 2014 {
837c4b78 2015 /* Procedure pointer component call: Look for argument list. */
23878536 2016 m = gfc_match_actual_arglist (sub_flag,
713485cc
JW
2017 &primary->value.compcall.actual);
2018 if (m == MATCH_ERROR)
2019 return MATCH_ERROR;
837c4b78
JW
2020
2021 if (m == MATCH_NO && !gfc_matching_ptr_assignment
a4a76e52 2022 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
837c4b78
JW
2023 {
2024 gfc_error ("Procedure pointer component '%s' requires an "
2025 "argument list at %C", component->name);
2026 return MATCH_ERROR;
2027 }
2028
23878536
JW
2029 if (m == MATCH_YES)
2030 primary->expr_type = EXPR_PPC;
713485cc
JW
2031
2032 break;
2033 }
2034
c74b74a8 2035 if (component->as != NULL && !component->attr.proc_pointer)
6de9cd9a
DN
2036 {
2037 tail = extend_ref (primary, tail);
2038 tail->type = REF_ARRAY;
2039
d3a9eea2
TB
2040 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2041 component->as->corank);
6de9cd9a
DN
2042 if (m != MATCH_YES)
2043 return m;
2044 }
cf2b3c22 2045 else if (component->ts.type == BT_CLASS
7a08eda1 2046 && CLASS_DATA (component)->as != NULL
cf2b3c22
TB
2047 && !component->attr.proc_pointer)
2048 {
2049 tail = extend_ref (primary, tail);
2050 tail->type = REF_ARRAY;
6de9cd9a 2051
7a08eda1 2052 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
d3a9eea2 2053 equiv_flag,
7a08eda1 2054 CLASS_DATA (component)->as->corank);
cf2b3c22
TB
2055 if (m != MATCH_YES)
2056 return m;
2057 }
2058
2059 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
6de9cd9a
DN
2060 || gfc_match_char ('%') != MATCH_YES)
2061 break;
2062
bc21d315 2063 sym = component->ts.u.derived;
6de9cd9a
DN
2064 }
2065
2066check_substring:
f2d3cb25 2067 unknown = false;
cf2b3c22 2068 if (primary->ts.type == BT_UNKNOWN && sym->attr.flavor != FL_DERIVED)
c040ffff 2069 {
713485cc 2070 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
c040ffff 2071 {
edf1eac2
SK
2072 gfc_set_default_type (sym, 0, sym->ns);
2073 primary->ts = sym->ts;
f2d3cb25 2074 unknown = true;
c040ffff
TS
2075 }
2076 }
2077
6de9cd9a
DN
2078 if (primary->ts.type == BT_CHARACTER)
2079 {
bc21d315 2080 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring))
6de9cd9a
DN
2081 {
2082 case MATCH_YES:
2083 if (tail == NULL)
2084 primary->ref = substring;
2085 else
2086 tail->next = substring;
2087
2088 if (primary->expr_type == EXPR_CONSTANT)
2089 primary->expr_type = EXPR_SUBSTRING;
2090
860c8f3b 2091 if (substring)
bc21d315 2092 primary->ts.u.cl = NULL;
860c8f3b 2093
6de9cd9a
DN
2094 break;
2095
2096 case MATCH_NO:
f2d3cb25 2097 if (unknown)
858f1fa2
DK
2098 {
2099 gfc_clear_ts (&primary->ts);
2100 gfc_clear_ts (&sym->ts);
2101 }
6de9cd9a
DN
2102 break;
2103
2104 case MATCH_ERROR:
2105 return MATCH_ERROR;
2106 }
2107 }
2108
d3a9eea2
TB
2109 /* F2008, C727. */
2110 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2111 {
2112 gfc_error ("Coindexed procedure-pointer component at %C");
2113 return MATCH_ERROR;
2114 }
2115
6de9cd9a
DN
2116 return MATCH_YES;
2117}
2118
2119
2120/* Given an expression that is a variable, figure out what the
2121 ultimate variable's type and attribute is, traversing the reference
2122 structures if necessary.
2123
2124 This subroutine is trickier than it looks. We start at the base
2125 symbol and store the attribute. Component references load a
2126 completely new attribute.
2127
2128 A couple of rules come into play. Subobjects of targets are always
2129 targets themselves. If we see a component that goes through a
2130 pointer, then the expression must also be a target, since the
2131 pointer is associated with something (if it isn't core will soon be
2132 dumped). If we see a full part or section of an array, the
2133 expression is also an array.
2134
f7b529fa 2135 We can have at most one full array reference. */
6de9cd9a
DN
2136
2137symbol_attribute
edf1eac2 2138gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
6de9cd9a 2139{
5046aff5 2140 int dimension, pointer, allocatable, target;
6de9cd9a
DN
2141 symbol_attribute attr;
2142 gfc_ref *ref;
cf2b3c22
TB
2143 gfc_symbol *sym;
2144 gfc_component *comp;
6de9cd9a 2145
50dbf0b4 2146 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
6de9cd9a
DN
2147 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2148
cf2b3c22
TB
2149 sym = expr->symtree->n.sym;
2150 attr = sym->attr;
6de9cd9a 2151
528622fd 2152 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
cf2b3c22 2153 {
7a08eda1 2154 dimension = CLASS_DATA (sym)->attr.dimension;
d40477b4 2155 pointer = CLASS_DATA (sym)->attr.class_pointer;
7a08eda1 2156 allocatable = CLASS_DATA (sym)->attr.allocatable;
cf2b3c22
TB
2157 }
2158 else
2159 {
2160 dimension = attr.dimension;
2161 pointer = attr.pointer;
2162 allocatable = attr.allocatable;
2163 }
6de9cd9a
DN
2164
2165 target = attr.target;
713485cc 2166 if (pointer || attr.proc_pointer)
6de9cd9a
DN
2167 target = 1;
2168
2169 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
cf2b3c22 2170 *ts = sym->ts;
6de9cd9a 2171
8c91ab34 2172 for (ref = expr->ref; ref; ref = ref->next)
6de9cd9a
DN
2173 switch (ref->type)
2174 {
2175 case REF_ARRAY:
2176
2177 switch (ref->u.ar.type)
2178 {
2179 case AR_FULL:
2180 dimension = 1;
2181 break;
2182
2183 case AR_SECTION:
5046aff5 2184 allocatable = pointer = 0;
6de9cd9a
DN
2185 dimension = 1;
2186 break;
2187
2188 case AR_ELEMENT:
d3a9eea2
TB
2189 /* Handle coarrays. */
2190 if (ref->u.ar.dimen > 0)
2191 allocatable = pointer = 0;
6de9cd9a
DN
2192 break;
2193
2194 case AR_UNKNOWN:
2195 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2196 }
2197
2198 break;
2199
2200 case REF_COMPONENT:
cf2b3c22
TB
2201 comp = ref->u.c.component;
2202 attr = comp->attr;
6de9cd9a 2203 if (ts != NULL)
e8a25349 2204 {
cf2b3c22 2205 *ts = comp->ts;
e8a25349
TS
2206 /* Don't set the string length if a substring reference
2207 follows. */
2208 if (ts->type == BT_CHARACTER
2209 && ref->next && ref->next->type == REF_SUBSTRING)
bc21d315 2210 ts->u.cl = NULL;
e8a25349 2211 }
6de9cd9a 2212
cf2b3c22
TB
2213 if (comp->ts.type == BT_CLASS)
2214 {
d40477b4 2215 pointer = CLASS_DATA (comp)->attr.class_pointer;
7a08eda1 2216 allocatable = CLASS_DATA (comp)->attr.allocatable;
cf2b3c22
TB
2217 }
2218 else
2219 {
2220 pointer = comp->attr.pointer;
2221 allocatable = comp->attr.allocatable;
2222 }
713485cc 2223 if (pointer || attr.proc_pointer)
6de9cd9a
DN
2224 target = 1;
2225
2226 break;
2227
2228 case REF_SUBSTRING:
5046aff5 2229 allocatable = pointer = 0;
6de9cd9a
DN
2230 break;
2231 }
2232
2233 attr.dimension = dimension;
2234 attr.pointer = pointer;
5046aff5 2235 attr.allocatable = allocatable;
6de9cd9a 2236 attr.target = target;
80f95228 2237 attr.save = sym->attr.save;
6de9cd9a
DN
2238
2239 return attr;
2240}
2241
2242
2243/* Return the attribute from a general expression. */
2244
2245symbol_attribute
edf1eac2 2246gfc_expr_attr (gfc_expr *e)
6de9cd9a
DN
2247{
2248 symbol_attribute attr;
2249
2250 switch (e->expr_type)
2251 {
2252 case EXPR_VARIABLE:
2253 attr = gfc_variable_attr (e, NULL);
2254 break;
2255
2256 case EXPR_FUNCTION:
2257 gfc_clear_attr (&attr);
2258
2259 if (e->value.function.esym != NULL)
cf2b3c22
TB
2260 {
2261 gfc_symbol *sym = e->value.function.esym->result;
2262 attr = sym->attr;
2263 if (sym->ts.type == BT_CLASS)
2264 {
7a08eda1 2265 attr.dimension = CLASS_DATA (sym)->attr.dimension;
d40477b4 2266 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
7a08eda1 2267 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
cf2b3c22
TB
2268 }
2269 }
50dbf0b4
JW
2270 else
2271 attr = gfc_variable_attr (e, NULL);
6de9cd9a
DN
2272
2273 /* TODO: NULL() returns pointers. May have to take care of this
edf1eac2 2274 here. */
6de9cd9a
DN
2275
2276 break;
2277
2278 default:
2279 gfc_clear_attr (&attr);
2280 break;
2281 }
2282
2283 return attr;
2284}
2285
2286
2287/* Match a structure constructor. The initial symbol has already been
2288 seen. */
2289
fa9290d3
DK
2290typedef struct gfc_structure_ctor_component
2291{
2292 char* name;
2293 gfc_expr* val;
2294 locus where;
2295 struct gfc_structure_ctor_component* next;
2296}
2297gfc_structure_ctor_component;
2298
ece3f663 2299#define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
fa9290d3
DK
2300
2301static void
2302gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2303{
cede9502 2304 free (comp->name);
fa9290d3 2305 gfc_free_expr (comp->val);
cede9502 2306 free (comp);
fa9290d3
DK
2307}
2308
7d1f1e61
PT
2309
2310/* Translate the component list into the actual constructor by sorting it in
2311 the order required; this also checks along the way that each and every
2312 component actually has an initializer and handles default initializers
2313 for components without explicit value given. */
2314static gfc_try
2315build_actual_constructor (gfc_structure_ctor_component **comp_head,
b7e75771 2316 gfc_constructor_base *ctor_head, gfc_symbol *sym)
6de9cd9a 2317{
fa9290d3 2318 gfc_structure_ctor_component *comp_iter;
7d1f1e61
PT
2319 gfc_component *comp;
2320
2321 for (comp = sym->components; comp; comp = comp->next)
2322 {
2323 gfc_structure_ctor_component **next_ptr;
2324 gfc_expr *value = NULL;
2325
2326 /* Try to find the initializer for the current component by name. */
2327 next_ptr = comp_head;
2328 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2329 {
2330 if (!strcmp (comp_iter->name, comp->name))
2331 break;
2332 next_ptr = &comp_iter->next;
2333 }
2334
2335 /* If an extension, try building the parent derived type by building
2336 a value expression for the parent derived type and calling self. */
2337 if (!comp_iter && comp == sym->components && sym->attr.extension)
2338 {
b7e75771
JD
2339 value = gfc_get_structure_constructor_expr (comp->ts.type,
2340 comp->ts.kind,
2341 &gfc_current_locus);
7d1f1e61 2342 value->ts = comp->ts;
7d1f1e61
PT
2343
2344 if (build_actual_constructor (comp_head, &value->value.constructor,
bc21d315 2345 comp->ts.u.derived) == FAILURE)
7d1f1e61
PT
2346 {
2347 gfc_free_expr (value);
2348 return FAILURE;
2349 }
b7e75771
JD
2350
2351 gfc_constructor_append_expr (ctor_head, value, NULL);
7d1f1e61
PT
2352 continue;
2353 }
2354
2355 /* If it was not found, try the default initializer if there's any;
2356 otherwise, it's an error. */
2357 if (!comp_iter)
2358 {
2359 if (comp->initializer)
2360 {
9717f7a1 2361 if (gfc_notify_std (GFC_STD_F2003, "Structure"
7d1f1e61
PT
2362 " constructor with missing optional arguments"
2363 " at %C") == FAILURE)
2364 return FAILURE;
2365 value = gfc_copy_expr (comp->initializer);
2366 }
2367 else
2368 {
2369 gfc_error ("No initializer for component '%s' given in the"
2370 " structure constructor at %C!", comp->name);
2371 return FAILURE;
2372 }
2373 }
2374 else
2375 value = comp_iter->val;
2376
2377 /* Add the value to the constructor chain built. */
b7e75771 2378 gfc_constructor_append_expr (ctor_head, value, NULL);
7d1f1e61
PT
2379
2380 /* Remove the entry from the component list. We don't want the expression
2381 value to be free'd, so set it to NULL. */
2382 if (comp_iter)
2383 {
2384 *next_ptr = comp_iter->next;
2385 comp_iter->val = NULL;
2386 gfc_free_structure_ctor_component (comp_iter);
2387 }
2388 }
2389 return SUCCESS;
2390}
2391
c3f34952
TB
2392
2393gfc_try
2394gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2395 gfc_actual_arglist **arglist,
2396 bool parent)
7d1f1e61 2397{
c3f34952 2398 gfc_actual_arglist *actual;
7d1f1e61 2399 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
b7e75771 2400 gfc_constructor_base ctor_head = NULL;
fa9290d3 2401 gfc_component *comp; /* Is set NULL when named component is first seen */
fa9290d3 2402 const char* last_name = NULL;
c3f34952
TB
2403 locus old_locus;
2404 gfc_expr *expr;
6de9cd9a 2405
c3f34952
TB
2406 expr = parent ? *cexpr : e;
2407 old_locus = gfc_current_locus;
2408 if (parent)
2409 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2410 else
2411 gfc_current_locus = expr->where;
6de9cd9a 2412
c3f34952 2413 comp_tail = comp_head = NULL;
6de9cd9a 2414
52f49934
DK
2415 if (!parent && sym->attr.abstract)
2416 {
c3f34952
TB
2417 gfc_error ("Can't construct ABSTRACT type '%s' at %L",
2418 sym->name, &expr->where);
2419 goto cleanup;
52f49934
DK
2420 }
2421
c3f34952
TB
2422 comp = sym->components;
2423 actual = parent ? *arglist : expr->value.function.actual;
2424 for ( ; actual; )
6de9cd9a 2425 {
c3f34952 2426 gfc_component *this_comp = NULL;
6de9cd9a 2427
c3f34952
TB
2428 if (!comp_head)
2429 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2430 else
2431 {
2432 comp_tail->next = gfc_get_structure_ctor_component ();
2433 comp_tail = comp_tail->next;
2434 }
2435 if (actual->name)
2436 {
9717f7a1 2437 if (gfc_notify_std (GFC_STD_F2003, "Structure"
c3f34952
TB
2438 " constructor with named arguments at %C")
2439 == FAILURE)
2440 goto cleanup;
6de9cd9a 2441
c3f34952
TB
2442 comp_tail->name = xstrdup (actual->name);
2443 last_name = comp_tail->name;
2444 comp = NULL;
2445 }
2446 else
2447 {
2448 /* Components without name are not allowed after the first named
2449 component initializer! */
2450 if (!comp)
fa9290d3 2451 {
c3f34952
TB
2452 if (last_name)
2453 gfc_error ("Component initializer without name after component"
2454 " named %s at %L!", last_name,
2455 actual->expr ? &actual->expr->where
2456 : &gfc_current_locus);
2457 else
2458 gfc_error ("Too many components in structure constructor at "
2459 "%L!", actual->expr ? &actual->expr->where
2460 : &gfc_current_locus);
2461 goto cleanup;
fa9290d3 2462 }
fa9290d3 2463
c3f34952
TB
2464 comp_tail->name = xstrdup (comp->name);
2465 }
fa9290d3 2466
c3f34952 2467 /* Find the current component in the structure definition and check
9d1210f4 2468 its access is not private. */
c3f34952
TB
2469 if (comp)
2470 this_comp = gfc_find_component (sym, comp->name, false, false);
2471 else
2472 {
2473 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
2474 false, false);
2475 comp = NULL; /* Reset needed! */
2476 }
6de9cd9a 2477
c3f34952
TB
2478 /* Here we can check if a component name is given which does not
2479 correspond to any component of the defined structure. */
2480 if (!this_comp)
2481 goto cleanup;
fa9290d3 2482
c3f34952
TB
2483 comp_tail->val = actual->expr;
2484 if (actual->expr != NULL)
2485 comp_tail->where = actual->expr->where;
2486 actual->expr = NULL;
fa9290d3 2487
c3f34952
TB
2488 /* Check if this component is already given a value. */
2489 for (comp_iter = comp_head; comp_iter != comp_tail;
2490 comp_iter = comp_iter->next)
2491 {
2492 gcc_assert (comp_iter);
2493 if (!strcmp (comp_iter->name, comp_tail->name))
d3a9eea2 2494 {
c3f34952
TB
2495 gfc_error ("Component '%s' is initialized twice in the structure"
2496 " constructor at %L!", comp_tail->name,
2497 comp_tail->val ? &comp_tail->where
2498 : &gfc_current_locus);
d3a9eea2 2499 goto cleanup;
c3f34952
TB
2500 }
2501 }
d3a9eea2 2502
c3f34952
TB
2503 /* F2008, R457/C725, for PURE C1283. */
2504 if (this_comp->attr.pointer && comp_tail->val
2505 && gfc_is_coindexed (comp_tail->val))
2506 {
2507 gfc_error ("Coindexed expression to pointer component '%s' in "
2508 "structure constructor at %L!", comp_tail->name,
2509 &comp_tail->where);
2510 goto cleanup;
2511 }
d3a9eea2 2512
c3f34952
TB
2513 /* If not explicitly a parent constructor, gather up the components
2514 and build one. */
2515 if (comp && comp == sym->components
2516 && sym->attr.extension
2517 && comp_tail->val
2518 && (comp_tail->val->ts.type != BT_DERIVED
2519 ||
2520 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2521 {
2522 gfc_try m;
2523 gfc_actual_arglist *arg_null = NULL;
6de9cd9a 2524
c3f34952
TB
2525 actual->expr = comp_tail->val;
2526 comp_tail->val = NULL;
6de9cd9a 2527
c3f34952
TB
2528 m = gfc_convert_to_structure_constructor (NULL,
2529 comp->ts.u.derived, &comp_tail->val,
2530 comp->ts.u.derived->attr.zero_comp
2531 ? &arg_null : &actual, true);
2532 if (m == FAILURE)
2533 goto cleanup;
2eae3dc7 2534
c3f34952
TB
2535 if (comp->ts.u.derived->attr.zero_comp)
2536 {
2537 comp = comp->next;
2538 continue;
2539 }
2540 }
fa9290d3 2541
c3f34952
TB
2542 if (comp)
2543 comp = comp->next;
2544 if (parent && !comp)
2545 break;
fa9290d3 2546
c3f34952 2547 actual = actual->next;
6de9cd9a
DN
2548 }
2549
7d1f1e61
PT
2550 if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
2551 goto cleanup;
2552
fa9290d3
DK
2553 /* No component should be left, as this should have caused an error in the
2554 loop constructing the component-list (name that does not correspond to any
2555 component in the structure definition). */
c3f34952 2556 if (comp_head && sym->attr.extension)
7d1f1e61
PT
2557 {
2558 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2559 {
2560 gfc_error ("component '%s' at %L has already been set by a "
2561 "parent derived type constructor", comp_iter->name,
2562 &comp_iter->where);
2563 }
2564 goto cleanup;
2565 }
c3f34952
TB
2566 else
2567 gcc_assert (!comp_head);
fa9290d3 2568
c3f34952
TB
2569 if (parent)
2570 {
2571 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2572 expr->ts.u.derived = sym;
2573 expr->value.constructor = ctor_head;
2574 *cexpr = expr;
2575 }
2576 else
2577 {
2578 expr->ts.u.derived = sym;
2579 expr->ts.kind = 0;
2580 expr->ts.type = BT_DERIVED;
2581 expr->value.constructor = ctor_head;
2582 expr->expr_type = EXPR_STRUCTURE;
2583 }
6de9cd9a 2584
c3f34952
TB
2585 gfc_current_locus = old_locus;
2586 if (parent)
2587 *arglist = actual;
2588 return SUCCESS;
6de9cd9a 2589
c3f34952
TB
2590 cleanup:
2591 gfc_current_locus = old_locus;
6de9cd9a 2592
fa9290d3
DK
2593 for (comp_iter = comp_head; comp_iter; )
2594 {
2595 gfc_structure_ctor_component *next = comp_iter->next;
2596 gfc_free_structure_ctor_component (comp_iter);
2597 comp_iter = next;
2598 }
b7e75771 2599 gfc_constructor_free (ctor_head);
c3f34952
TB
2600
2601 return FAILURE;
2602}
2603
2604
2605match
2606gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2607{
2608 match m;
2609 gfc_expr *e;
2610 gfc_symtree *symtree;
2611
2612 gfc_get_sym_tree (sym->name, NULL, &symtree, false); /* Can't fail */
2613
2614 e = gfc_get_expr ();
2615 e->symtree = symtree;
2616 e->expr_type = EXPR_FUNCTION;
2617
2618 gcc_assert (sym->attr.flavor == FL_DERIVED
2619 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2620 e->value.function.esym = sym;
2621 e->symtree->n.sym->attr.generic = 1;
2622
2623 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2624 if (m != MATCH_YES)
2625 {
2626 gfc_free_expr (e);
2627 return m;
2628 }
2629
2630 if (gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false)
2631 != SUCCESS)
2632 {
2633 gfc_free_expr (e);
2634 return MATCH_ERROR;
2635 }
2636
2637 *result = e;
2638 return MATCH_YES;
6de9cd9a
DN
2639}
2640
2641
9a3db5a3
PT
2642/* If the symbol is an implicit do loop index and implicitly typed,
2643 it should not be host associated. Provide a symtree from the
2644 current namespace. */
2645static match
2646check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2647{
2648 if ((*sym)->attr.flavor == FL_VARIABLE
2649 && (*sym)->ns != gfc_current_ns
2650 && (*sym)->attr.implied_index
2651 && (*sym)->attr.implicit_type
2652 && !(*sym)->attr.use_assoc)
2653 {
2654 int i;
08a6b8e0 2655 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
9a3db5a3
PT
2656 if (i)
2657 return MATCH_ERROR;
2658 *sym = (*st)->n.sym;
2659 }
2660 return MATCH_YES;
2661}
2662
2663
3070bab4
JW
2664/* Procedure pointer as function result: Replace the function symbol by the
2665 auto-generated hidden result variable named "ppr@". */
2666
2667static gfc_try
2668replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2669{
2670 /* Check for procedure pointer result variable. */
2671 if ((*sym)->attr.function && !(*sym)->attr.external
2672 && (*sym)->result && (*sym)->result != *sym
2673 && (*sym)->result->attr.proc_pointer
2674 && (*sym) == gfc_current_ns->proc_name
2675 && (*sym) == (*sym)->result->ns->proc_name
2676 && strcmp ("ppr@", (*sym)->result->name) == 0)
2677 {
2678 /* Automatic replacement with "hidden" result variable. */
2679 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2680 *sym = (*sym)->result;
2681 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
2682 return SUCCESS;
2683 }
2684 return FAILURE;
2685}
2686
2687
6de9cd9a
DN
2688/* Matches a variable name followed by anything that might follow it--
2689 array reference, argument list of a function, etc. */
2690
2691match
edf1eac2 2692gfc_match_rvalue (gfc_expr **result)
6de9cd9a
DN
2693{
2694 gfc_actual_arglist *actual_arglist;
d3fcc995 2695 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
6de9cd9a
DN
2696 gfc_state_data *st;
2697 gfc_symbol *sym;
2698 gfc_symtree *symtree;
d3fcc995 2699 locus where, old_loc;
6de9cd9a 2700 gfc_expr *e;
d3fcc995 2701 match m, m2;
6de9cd9a 2702 int i;
5270c302
AL
2703 gfc_typespec *ts;
2704 bool implicit_char;
a99288e5 2705 gfc_ref *ref;
6de9cd9a
DN
2706
2707 m = gfc_match_name (name);
2708 if (m != MATCH_YES)
2709 return m;
2710
2a6dcee5
TB
2711 if (gfc_find_state (COMP_INTERFACE) == SUCCESS
2712 && !gfc_current_ns->has_import_set)
08a6b8e0 2713 i = gfc_get_sym_tree (name, NULL, &symtree, false);
6de9cd9a
DN
2714 else
2715 i = gfc_get_ha_sym_tree (name, &symtree);
2716
2717 if (i)
2718 return MATCH_ERROR;
2719
2720 sym = symtree->n.sym;
2721 e = NULL;
63645982 2722 where = gfc_current_locus;
6de9cd9a 2723
3070bab4
JW
2724 replace_hidden_procptr_result (&sym, &symtree);
2725
9a3db5a3
PT
2726 /* If this is an implicit do loop index and implicitly typed,
2727 it should not be host associated. */
2728 m = check_for_implicit_index (&symtree, &sym);
2729 if (m != MATCH_YES)
2730 return m;
2731
6de9cd9a 2732 gfc_set_sym_referenced (sym);
9a3db5a3 2733 sym->attr.implied_index = 0;
6de9cd9a 2734
0921bc44
JJ
2735 if (sym->attr.function && sym->result == sym)
2736 {
811849c0
PT
2737 /* See if this is a directly recursive function call. */
2738 gfc_gobble_whitespace ();
2739 if (sym->attr.recursive
8fc541d3 2740 && gfc_peek_ascii_char () == '('
fc2d8680
PT
2741 && gfc_current_ns->proc_name == sym
2742 && !sym->attr.dimension)
811849c0 2743 {
fc2d8680
PT
2744 gfc_error ("'%s' at %C is the name of a recursive function "
2745 "and so refers to the result variable. Use an "
2746 "explicit RESULT variable for direct recursion "
2747 "(12.5.2.1)", sym->name);
811849c0
PT
2748 return MATCH_ERROR;
2749 }
fc2d8680 2750
2d71b918 2751 if (gfc_is_function_return_value (sym, gfc_current_ns))
0921bc44
JJ
2752 goto variable;
2753
2754 if (sym->attr.entry
2755 && (sym->ns == gfc_current_ns
2756 || sym->ns == gfc_current_ns->parent))
2757 {
2758 gfc_entry_list *el = NULL;
2759
2760 for (el = sym->ns->entries; el; el = el->next)
2761 if (sym == el->sym)
2762 goto variable;
2763 }
2764 }
6de9cd9a 2765
8fb74da4
JW
2766 if (gfc_matching_procptr_assignment)
2767 goto procptr0;
2768
6de9cd9a
DN
2769 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
2770 goto function0;
2771
2772 if (sym->attr.generic)
2773 goto generic_function;
2774
2775 switch (sym->attr.flavor)
2776 {
2777 case FL_VARIABLE:
2778 variable:
6de9cd9a
DN
2779 e = gfc_get_expr ();
2780
2781 e->expr_type = EXPR_VARIABLE;
2782 e->symtree = symtree;
2783
713485cc 2784 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
2785 break;
2786
2787 case FL_PARAMETER:
b7263e8f
EE
2788 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2789 end up here. Unfortunately, sym->value->expr_type is set to
2790 EXPR_CONSTANT, and so the if () branch would be followed without
2791 the !sym->as check. */
2792 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
6de9cd9a
DN
2793 e = gfc_copy_expr (sym->value);
2794 else
2795 {
2796 e = gfc_get_expr ();
2797 e->expr_type = EXPR_VARIABLE;
2798 }
2799
2800 e->symtree = symtree;
713485cc 2801 m = gfc_match_varspec (e, 0, false, true);
a99288e5
PT
2802
2803 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
2804 break;
2805
927171bf
PT
2806 /* Variable array references to derived type parameters cause
2807 all sorts of headaches in simplification. Treating such
2808 expressions as variable works just fine for all array
2809 references. */
2810 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
a99288e5
PT
2811 {
2812 for (ref = e->ref; ref; ref = ref->next)
2813 if (ref->type == REF_ARRAY)
2814 break;
2815
927171bf 2816 if (ref == NULL || ref->u.ar.type == AR_FULL)
a99288e5
PT
2817 break;
2818
2819 ref = e->ref;
2820 e->ref = NULL;
2821 gfc_free_expr (e);
2822 e = gfc_get_expr ();
2823 e->expr_type = EXPR_VARIABLE;
2824 e->symtree = symtree;
2825 e->ref = ref;
a99288e5
PT
2826 }
2827
6de9cd9a
DN
2828 break;
2829
2830 case FL_DERIVED:
2831 sym = gfc_use_derived (sym);
2832 if (sym == NULL)
2833 m = MATCH_ERROR;
2834 else
c3f34952 2835 goto generic_function;
6de9cd9a
DN
2836 break;
2837
2838 /* If we're here, then the name is known to be the name of a
2839 procedure, yet it is not sure to be the name of a function. */
2840 case FL_PROCEDURE:
8fb74da4
JW
2841
2842 /* Procedure Pointer Assignments. */
2843 procptr0:
2844 if (gfc_matching_procptr_assignment)
2845 {
2846 gfc_gobble_whitespace ();
e35bbb23 2847 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
8fb74da4
JW
2848 /* Parse functions returning a procptr. */
2849 goto function0;
2850
8fb74da4
JW
2851 e = gfc_get_expr ();
2852 e->expr_type = EXPR_VARIABLE;
2853 e->symtree = symtree;
713485cc 2854 m = gfc_match_varspec (e, 0, false, true);
2dda89a8
JW
2855 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
2856 && sym->ts.type == BT_UNKNOWN
2857 && gfc_add_flavor (&sym->attr, FL_PROCEDURE,
2858 sym->name, NULL) == FAILURE)
2859 {
2860 m = MATCH_ERROR;
2861 break;
2862 }
8fb74da4
JW
2863 break;
2864 }
2865
6de9cd9a
DN
2866 if (sym->attr.subroutine)
2867 {
2868 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2869 sym->name);
2870 m = MATCH_ERROR;
2871 break;
2872 }
2873
2874 /* At this point, the name has to be a non-statement function.
edf1eac2
SK
2875 If the name is the same as the current function being
2876 compiled, then we have a variable reference (to the function
2877 result) if the name is non-recursive. */
6de9cd9a
DN
2878
2879 st = gfc_enclosing_unit (NULL);
2880
2881 if (st != NULL && st->state == COMP_FUNCTION
2882 && st->sym == sym
2883 && !sym->attr.recursive)
2884 {
2885 e = gfc_get_expr ();
2886 e->symtree = symtree;
2887 e->expr_type = EXPR_VARIABLE;
2888
713485cc 2889 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
2890 break;
2891 }
2892
2893 /* Match a function reference. */
2894 function0:
2895 m = gfc_match_actual_arglist (0, &actual_arglist);
2896 if (m == MATCH_NO)
2897 {
2898 if (sym->attr.proc == PROC_ST_FUNCTION)
2899 gfc_error ("Statement function '%s' requires argument list at %C",
2900 sym->name);
2901 else
2902 gfc_error ("Function '%s' requires an argument list at %C",
2903 sym->name);
2904
2905 m = MATCH_ERROR;
2906 break;
2907 }
2908
2909 if (m != MATCH_YES)
2910 {
2911 m = MATCH_ERROR;
2912 break;
2913 }
2914
2915 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2916 sym = symtree->n.sym;
2917
3070bab4
JW
2918 replace_hidden_procptr_result (&sym, &symtree);
2919
6de9cd9a
DN
2920 e = gfc_get_expr ();
2921 e->symtree = symtree;
2922 e->expr_type = EXPR_FUNCTION;
2923 e->value.function.actual = actual_arglist;
63645982 2924 e->where = gfc_current_locus;
6de9cd9a 2925
102344e2
TB
2926 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
2927 && CLASS_DATA (sym)->as)
2928 e->rank = CLASS_DATA (sym)->as->rank;
2929 else if (sym->as != NULL)
6de9cd9a
DN
2930 e->rank = sym->as->rank;
2931
2932 if (!sym->attr.function
231b2fcc 2933 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
6de9cd9a
DN
2934 {
2935 m = MATCH_ERROR;
2936 break;
2937 }
2938
a8b3b0b6
CR
2939 /* Check here for the existence of at least one argument for the
2940 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2941 argument(s) given will be checked in gfc_iso_c_func_interface,
2942 during resolution of the function call. */
2943 if (sym->attr.is_iso_c == 1
2944 && (sym->from_intmod == INTMOD_ISO_C_BINDING
2945 && (sym->intmod_sym_id == ISOCBINDING_LOC
2946 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
2947 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
2948 {
2949 /* make sure we were given a param */
2950 if (actual_arglist == NULL)
2951 {
2952 gfc_error ("Missing argument to '%s' at %C", sym->name);
2953 m = MATCH_ERROR;
2954 break;
2955 }
2956 }
2957
6de9cd9a
DN
2958 if (sym->result == NULL)
2959 sym->result = sym;
2960
2961 m = MATCH_YES;
2962 break;
2963
2964 case FL_UNKNOWN:
2965
2966 /* Special case for derived type variables that get their types
edf1eac2
SK
2967 via an IMPLICIT statement. This can't wait for the
2968 resolution phase. */
6de9cd9a 2969
8fc541d3 2970 if (gfc_peek_ascii_char () == '%'
0dd973dd 2971 && sym->ts.type == BT_UNKNOWN
713485cc 2972 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
6de9cd9a
DN
2973 gfc_set_default_type (sym, 0, sym->ns);
2974
492792ed 2975 /* If the symbol has a (co)dimension attribute, the expression is a
edf1eac2 2976 variable. */
6de9cd9a 2977
492792ed 2978 if (sym->attr.dimension || sym->attr.codimension)
6de9cd9a 2979 {
231b2fcc
TS
2980 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2981 sym->name, NULL) == FAILURE)
6de9cd9a
DN
2982 {
2983 m = MATCH_ERROR;
2984 break;
2985 }
2986
2987 e = gfc_get_expr ();
2988 e->symtree = symtree;
2989 e->expr_type = EXPR_VARIABLE;
713485cc 2990 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
2991 break;
2992 }
2993
cd99c23c 2994 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
492792ed
TB
2995 && (CLASS_DATA (sym)->attr.dimension
2996 || CLASS_DATA (sym)->attr.codimension))
c49ea23d
PT
2997 {
2998 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2999 sym->name, NULL) == FAILURE)
3000 {
3001 m = MATCH_ERROR;
3002 break;
3003 }
3004
3005 e = gfc_get_expr ();
3006 e->symtree = symtree;
3007 e->expr_type = EXPR_VARIABLE;
3008 m = gfc_match_varspec (e, 0, false, true);
3009 break;
3010 }
3011
6de9cd9a 3012 /* Name is not an array, so we peek to see if a '(' implies a
edf1eac2
SK
3013 function call or a substring reference. Otherwise the
3014 variable is just a scalar. */
6de9cd9a
DN
3015
3016 gfc_gobble_whitespace ();
8fc541d3 3017 if (gfc_peek_ascii_char () != '(')
6de9cd9a
DN
3018 {
3019 /* Assume a scalar variable */
3020 e = gfc_get_expr ();
3021 e->symtree = symtree;
3022 e->expr_type = EXPR_VARIABLE;
3023
231b2fcc
TS
3024 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
3025 sym->name, NULL) == FAILURE)
6de9cd9a
DN
3026 {
3027 m = MATCH_ERROR;
3028 break;
3029 }
3030
8e1f752a 3031 /*FIXME:??? gfc_match_varspec does set this for us: */
6de9cd9a 3032 e->ts = sym->ts;
713485cc 3033 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3034 break;
3035 }
3036
d3fcc995
TS
3037 /* See if this is a function reference with a keyword argument
3038 as first argument. We do this because otherwise a spurious
3039 symbol would end up in the symbol table. */
3040
3041 old_loc = gfc_current_locus;
3042 m2 = gfc_match (" ( %n =", argname);
3043 gfc_current_locus = old_loc;
6de9cd9a
DN
3044
3045 e = gfc_get_expr ();
3046 e->symtree = symtree;
3047
d3fcc995 3048 if (m2 != MATCH_YES)
6de9cd9a 3049 {
5270c302
AL
3050 /* Try to figure out whether we're dealing with a character type.
3051 We're peeking ahead here, because we don't want to call
3052 match_substring if we're dealing with an implicitly typed
3053 non-character variable. */
3054 implicit_char = false;
3055 if (sym->ts.type == BT_UNKNOWN)
3056 {
713485cc 3057 ts = gfc_get_default_type (sym->name, NULL);
5270c302
AL
3058 if (ts->type == BT_CHARACTER)
3059 implicit_char = true;
3060 }
3061
d3fcc995
TS
3062 /* See if this could possibly be a substring reference of a name
3063 that we're not sure is a variable yet. */
6de9cd9a 3064
5270c302 3065 if ((implicit_char || sym->ts.type == BT_CHARACTER)
bc21d315 3066 && match_substring (sym->ts.u.cl, 0, &e->ref) == MATCH_YES)
6de9cd9a 3067 {
6de9cd9a 3068
d3fcc995
TS
3069 e->expr_type = EXPR_VARIABLE;
3070
3071 if (sym->attr.flavor != FL_VARIABLE
231b2fcc
TS
3072 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
3073 sym->name, NULL) == FAILURE)
d3fcc995
TS
3074 {
3075 m = MATCH_ERROR;
3076 break;
3077 }
3078
3079 if (sym->ts.type == BT_UNKNOWN
3080 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
3081 {
3082 m = MATCH_ERROR;
3083 break;
3084 }
3085
3086 e->ts = sym->ts;
860c8f3b 3087 if (e->ref)
bc21d315 3088 e->ts.u.cl = NULL;
d3fcc995 3089 m = MATCH_YES;
6de9cd9a
DN
3090 break;
3091 }
6de9cd9a
DN
3092 }
3093
3094 /* Give up, assume we have a function. */
3095
08a6b8e0 3096 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
6de9cd9a
DN
3097 sym = symtree->n.sym;
3098 e->expr_type = EXPR_FUNCTION;
3099
3100 if (!sym->attr.function
231b2fcc 3101 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
6de9cd9a
DN
3102 {
3103 m = MATCH_ERROR;
3104 break;
3105 }
3106
3107 sym->result = sym;
3108
3109 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3110 if (m == MATCH_NO)
3111 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
3112
3113 if (m != MATCH_YES)
3114 {
3115 m = MATCH_ERROR;
3116 break;
3117 }
3118
3119 /* If our new function returns a character, array or structure
edf1eac2 3120 type, it might have subsequent references. */
6de9cd9a 3121
713485cc 3122 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3123 if (m == MATCH_NO)
3124 m = MATCH_YES;
3125
3126 break;
3127
3128 generic_function:
08a6b8e0 3129 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
6de9cd9a
DN
3130
3131 e = gfc_get_expr ();
3132 e->symtree = symtree;
3133 e->expr_type = EXPR_FUNCTION;
3134
c3f34952
TB
3135 if (sym->attr.flavor == FL_DERIVED)
3136 {
3137 e->value.function.esym = sym;
3138 e->symtree->n.sym->attr.generic = 1;
3139 }
3140
6de9cd9a
DN
3141 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3142 break;
3143
3144 default:
3145 gfc_error ("Symbol at %C is not appropriate for an expression");
3146 return MATCH_ERROR;
3147 }
3148
3149 if (m == MATCH_YES)
3150 {
3151 e->where = where;
3152 *result = e;
3153 }
3154 else
3155 gfc_free_expr (e);
3156
3157 return m;
3158}
3159
3160
df2fba9e 3161/* Match a variable, i.e. something that can be assigned to. This
6de9cd9a
DN
3162 starts as a symbol, can be a structure component or an array
3163 reference. It can be a function if the function doesn't have a
3164 separate RESULT variable. If the symbol has not been previously
30aabb86 3165 seen, we assume it is a variable.
6de9cd9a 3166
30aabb86
PT
3167 This function is called by two interface functions:
3168 gfc_match_variable, which has host_flag = 1, and
3169 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3170 match of the symbol to the local scope. */
3171
3172static match
edf1eac2 3173match_variable (gfc_expr **result, int equiv_flag, int host_flag)
6de9cd9a
DN
3174{
3175 gfc_symbol *sym;
3176 gfc_symtree *st;
3177 gfc_expr *expr;
3178 locus where;
3179 match m;
3180
fd2aa7ad
PT
3181 /* Since nothing has any business being an lvalue in a module
3182 specification block, an interface block or a contains section,
3183 we force the changed_symbols mechanism to work by setting
3184 host_flag to 0. This prevents valid symbols that have the name
3185 of keywords, such as 'end', being turned into variables by
df2fba9e 3186 failed matching to assignments for, e.g., END INTERFACE. */
fd2aa7ad
PT
3187 if (gfc_current_state () == COMP_MODULE
3188 || gfc_current_state () == COMP_INTERFACE
3189 || gfc_current_state () == COMP_CONTAINS)
3190 host_flag = 0;
3191
618f4f46 3192 where = gfc_current_locus;
30aabb86 3193 m = gfc_match_sym_tree (&st, host_flag);
6de9cd9a
DN
3194 if (m != MATCH_YES)
3195 return m;
6de9cd9a
DN
3196
3197 sym = st->n.sym;
9a3db5a3
PT
3198
3199 /* If this is an implicit do loop index and implicitly typed,
3200 it should not be host associated. */
3201 m = check_for_implicit_index (&st, &sym);
3202 if (m != MATCH_YES)
3203 return m;
3204
3205 sym->attr.implied_index = 0;
3206
6de9cd9a
DN
3207 gfc_set_sym_referenced (sym);
3208 switch (sym->attr.flavor)
3209 {
3210 case FL_VARIABLE:
8c91ab34 3211 /* Everything is alright. */
6de9cd9a
DN
3212 break;
3213
3214 case FL_UNKNOWN:
d7e2fcd0
TB
3215 {
3216 sym_flavor flavor = FL_UNKNOWN;
3217
3218 gfc_gobble_whitespace ();
3219
3220 if (sym->attr.external || sym->attr.procedure
3221 || sym->attr.function || sym->attr.subroutine)
3222 flavor = FL_PROCEDURE;
b9332b09
PT
3223
3224 /* If it is not a procedure, is not typed and is host associated,
3225 we cannot give it a flavor yet. */
3226 else if (sym->ns == gfc_current_ns->parent
3227 && sym->ts.type == BT_UNKNOWN)
3228 break;
3229
3230 /* These are definitive indicators that this is a variable. */
8fc541d3 3231 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
d7e2fcd0
TB
3232 || sym->attr.pointer || sym->as != NULL)
3233 flavor = FL_VARIABLE;
3234
3235 if (flavor != FL_UNKNOWN
3236 && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE)
3237 return MATCH_ERROR;
3238 }
6de9cd9a
DN
3239 break;
3240
5056a350
SK
3241 case FL_PARAMETER:
3242 if (equiv_flag)
8c91ab34
DK
3243 {
3244 gfc_error ("Named constant at %C in an EQUIVALENCE");
3245 return MATCH_ERROR;
3246 }
3247 /* Otherwise this is checked for and an error given in the
3248 variable definition context checks. */
5056a350
SK
3249 break;
3250
6de9cd9a 3251 case FL_PROCEDURE:
01d2a7d7
DF
3252 /* Check for a nonrecursive function result variable. */
3253 if (sym->attr.function
8c91ab34
DK
3254 && !sym->attr.external
3255 && sym->result == sym
3256 && (gfc_is_function_return_value (sym, gfc_current_ns)
3257 || (sym->attr.entry
3258 && sym->ns == gfc_current_ns)
3259 || (sym->attr.entry
3260 && sym->ns == gfc_current_ns->parent)))
6de9cd9a 3261 {
6de9cd9a
DN
3262 /* If a function result is a derived type, then the derived
3263 type may still have to be resolved. */
3264
3265 if (sym->ts.type == BT_DERIVED
bc21d315 3266 && gfc_use_derived (sym->ts.u.derived) == NULL)
6de9cd9a 3267 return MATCH_ERROR;
6de9cd9a
DN
3268 break;
3269 }
3270
3070bab4
JW
3271 if (sym->attr.proc_pointer
3272 || replace_hidden_procptr_result (&sym, &st) == SUCCESS)
8fb74da4
JW
3273 break;
3274
6de9cd9a
DN
3275 /* Fall through to error */
3276
3277 default:
d7e2fcd0 3278 gfc_error ("'%s' at %C is not a variable", sym->name);
6de9cd9a
DN
3279 return MATCH_ERROR;
3280 }
3281
0dd973dd
PB
3282 /* Special case for derived type variables that get their types
3283 via an IMPLICIT statement. This can't wait for the
3284 resolution phase. */
3285
3286 {
3287 gfc_namespace * implicit_ns;
3288
3289 if (gfc_current_ns->proc_name == sym)
3290 implicit_ns = gfc_current_ns;
3291 else
3292 implicit_ns = sym->ns;
3293
8fc541d3 3294 if (gfc_peek_ascii_char () == '%'
0dd973dd 3295 && sym->ts.type == BT_UNKNOWN
713485cc 3296 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
0dd973dd
PB
3297 gfc_set_default_type (sym, 0, implicit_ns);
3298 }
3299
6de9cd9a
DN
3300 expr = gfc_get_expr ();
3301
3302 expr->expr_type = EXPR_VARIABLE;
3303 expr->symtree = st;
3304 expr->ts = sym->ts;
3305 expr->where = where;
3306
3307 /* Now see if we have to do more. */
713485cc 3308 m = gfc_match_varspec (expr, equiv_flag, false, false);
6de9cd9a
DN
3309 if (m != MATCH_YES)
3310 {
3311 gfc_free_expr (expr);
3312 return m;
3313 }
3314
3315 *result = expr;
3316 return MATCH_YES;
3317}
30aabb86 3318
edf1eac2 3319
30aabb86 3320match
edf1eac2 3321gfc_match_variable (gfc_expr **result, int equiv_flag)
30aabb86
PT
3322{
3323 return match_variable (result, equiv_flag, 1);
3324}
3325
edf1eac2 3326
30aabb86 3327match
edf1eac2 3328gfc_match_equiv_variable (gfc_expr **result)
30aabb86
PT
3329{
3330 return match_variable (result, 1, 0);
3331}
3332