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