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