]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/fortran/primary.c
utils.c (convert): When converting to a padding type...
[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
1612/* Match a keyword argument. */
1613
1614static match
edf1eac2 1615match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base)
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
1633 m = match_actual_arg (&actual->expr);
1634 if (m != MATCH_YES)
1635 goto cleanup;
1636
1637 /* Make sure this name has not appeared yet. */
1638
1639 if (name[0] != '\0')
1640 {
1641 for (a = base; a; a = a->next)
cb9e4f55 1642 if (a->name != NULL && strcmp (a->name, name) == 0)
6de9cd9a 1643 {
a4d9b221 1644 gfc_error ("Keyword %qs at %C has already appeared in the "
edf1eac2 1645 "current argument list", name);
6de9cd9a
DN
1646 return MATCH_ERROR;
1647 }
1648 }
1649
51f03c6b 1650 actual->name = gfc_get_string ("%s", name);
6de9cd9a
DN
1651 return MATCH_YES;
1652
1653cleanup:
63645982 1654 gfc_current_locus = name_locus;
6de9cd9a
DN
1655 return m;
1656}
1657
1658
7fcafa71
PT
1659/* Match an argument list function, such as %VAL. */
1660
1661static match
1662match_arg_list_function (gfc_actual_arglist *result)
1663{
1664 char name[GFC_MAX_SYMBOL_LEN + 1];
1665 locus old_locus;
1666 match m;
1667
1668 old_locus = gfc_current_locus;
1669
1670 if (gfc_match_char ('%') != MATCH_YES)
1671 {
1672 m = MATCH_NO;
1673 goto cleanup;
1674 }
1675
1676 m = gfc_match ("%n (", name);
1677 if (m != MATCH_YES)
1678 goto cleanup;
1679
1680 if (name[0] != '\0')
1681 {
1682 switch (name[0])
1683 {
1684 case 'l':
edf1eac2 1685 if (strncmp (name, "loc", 3) == 0)
7fcafa71
PT
1686 {
1687 result->name = "%LOC";
1688 break;
1689 }
191816a3 1690 /* FALLTHRU */
7fcafa71 1691 case 'r':
edf1eac2 1692 if (strncmp (name, "ref", 3) == 0)
7fcafa71
PT
1693 {
1694 result->name = "%REF";
1695 break;
1696 }
191816a3 1697 /* FALLTHRU */
7fcafa71 1698 case 'v':
edf1eac2 1699 if (strncmp (name, "val", 3) == 0)
7fcafa71
PT
1700 {
1701 result->name = "%VAL";
1702 break;
1703 }
191816a3 1704 /* FALLTHRU */
7fcafa71
PT
1705 default:
1706 m = MATCH_ERROR;
1707 goto cleanup;
1708 }
1709 }
1710
524af0d6 1711 if (!gfc_notify_std (GFC_STD_GNU, "argument list function at %C"))
7fcafa71
PT
1712 {
1713 m = MATCH_ERROR;
1714 goto cleanup;
1715 }
1716
1717 m = match_actual_arg (&result->expr);
1718 if (m != MATCH_YES)
1719 goto cleanup;
1720
1721 if (gfc_match_char (')') != MATCH_YES)
1722 {
1723 m = MATCH_NO;
1724 goto cleanup;
1725 }
1726
1727 return MATCH_YES;
1728
1729cleanup:
1730 gfc_current_locus = old_locus;
1731 return m;
1732}
1733
1734
6de9cd9a
DN
1735/* Matches an actual argument list of a function or subroutine, from
1736 the opening parenthesis to the closing parenthesis. The argument
1737 list is assumed to allow keyword arguments because we don't know if
1738 the symbol associated with the procedure has an implicit interface
ed5ee445 1739 or not. We make sure keywords are unique. If sub_flag is set,
d3fcc995 1740 we're matching the argument list of a subroutine. */
6de9cd9a
DN
1741
1742match
edf1eac2 1743gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp)
6de9cd9a
DN
1744{
1745 gfc_actual_arglist *head, *tail;
1746 int seen_keyword;
1747 gfc_st_label *label;
1748 locus old_loc;
1749 match m;
1750
1751 *argp = tail = NULL;
63645982 1752 old_loc = gfc_current_locus;
6de9cd9a
DN
1753
1754 seen_keyword = 0;
1755
1756 if (gfc_match_char ('(') == MATCH_NO)
1757 return (sub_flag) ? MATCH_YES : MATCH_NO;
1758
1759 if (gfc_match_char (')') == MATCH_YES)
1760 return MATCH_YES;
1761 head = NULL;
1762
837c4b78
JW
1763 matching_actual_arglist++;
1764
6de9cd9a
DN
1765 for (;;)
1766 {
1767 if (head == NULL)
1768 head = tail = gfc_get_actual_arglist ();
1769 else
1770 {
1771 tail->next = gfc_get_actual_arglist ();
1772 tail = tail->next;
1773 }
1774
1775 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1776 {
a34a91f0 1777 m = gfc_match_st_label (&label);
6de9cd9a
DN
1778 if (m == MATCH_NO)
1779 gfc_error ("Expected alternate return label at %C");
1780 if (m != MATCH_YES)
1781 goto cleanup;
1782
524af0d6
JB
1783 if (!gfc_notify_std (GFC_STD_F95_OBS, "Alternate-return argument "
1784 "at %C"))
fbdeeaac
JW
1785 goto cleanup;
1786
6de9cd9a
DN
1787 tail->label = label;
1788 goto next;
1789 }
1790
1791 /* After the first keyword argument is seen, the following
edf1eac2 1792 arguments must also have keywords. */
6de9cd9a
DN
1793 if (seen_keyword)
1794 {
1795 m = match_keyword_arg (tail, head);
1796
1797 if (m == MATCH_ERROR)
1798 goto cleanup;
1799 if (m == MATCH_NO)
1800 {
edf1eac2 1801 gfc_error ("Missing keyword name in actual argument list at %C");
6de9cd9a
DN
1802 goto cleanup;
1803 }
1804
1805 }
1806 else
1807 {
7fcafa71
PT
1808 /* Try an argument list function, like %VAL. */
1809 m = match_arg_list_function (tail);
6de9cd9a
DN
1810 if (m == MATCH_ERROR)
1811 goto cleanup;
1812
7fcafa71
PT
1813 /* See if we have the first keyword argument. */
1814 if (m == MATCH_NO)
1815 {
1816 m = match_keyword_arg (tail, head);
1817 if (m == MATCH_YES)
1818 seen_keyword = 1;
1819 if (m == MATCH_ERROR)
1820 goto cleanup;
1821 }
1822
6de9cd9a
DN
1823 if (m == MATCH_NO)
1824 {
1825 /* Try for a non-keyword argument. */
1826 m = match_actual_arg (&tail->expr);
1827 if (m == MATCH_ERROR)
1828 goto cleanup;
1829 if (m == MATCH_NO)
1830 goto syntax;
1831 }
1832 }
1833
7fcafa71 1834
6de9cd9a
DN
1835 next:
1836 if (gfc_match_char (')') == MATCH_YES)
1837 break;
1838 if (gfc_match_char (',') != MATCH_YES)
1839 goto syntax;
1840 }
1841
1842 *argp = head;
837c4b78 1843 matching_actual_arglist--;
6de9cd9a
DN
1844 return MATCH_YES;
1845
1846syntax:
1847 gfc_error ("Syntax error in argument list at %C");
1848
1849cleanup:
1850 gfc_free_actual_arglist (head);
63645982 1851 gfc_current_locus = old_loc;
837c4b78 1852 matching_actual_arglist--;
6de9cd9a
DN
1853 return MATCH_ERROR;
1854}
1855
1856
8e1f752a 1857/* Used by gfc_match_varspec() to extend the reference list by one
6de9cd9a
DN
1858 element. */
1859
1860static gfc_ref *
edf1eac2 1861extend_ref (gfc_expr *primary, gfc_ref *tail)
6de9cd9a 1862{
6de9cd9a
DN
1863 if (primary->ref == NULL)
1864 primary->ref = tail = gfc_get_ref ();
1865 else
1866 {
1867 if (tail == NULL)
1868 gfc_internal_error ("extend_ref(): Bad tail");
1869 tail->next = gfc_get_ref ();
1870 tail = tail->next;
1871 }
1872
1873 return tail;
1874}
1875
1876
1877/* Match any additional specifications associated with the current
1878 variable like member references or substrings. If equiv_flag is
1879 set we only match stuff that is allowed inside an EQUIVALENCE
8e1f752a 1880 statement. sub_flag tells whether we expect a type-bound procedure found
713485cc
JW
1881 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1882 components, 'ppc_arg' determines whether the PPC may be called (with an
1883 argument list), or whether it may just be referred to as a pointer. */
6de9cd9a 1884
8e1f752a 1885match
713485cc
JW
1886gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
1887 bool ppc_arg)
6de9cd9a
DN
1888{
1889 char name[GFC_MAX_SYMBOL_LEN + 1];
f6288c24 1890 gfc_ref *substring, *tail, *tmp;
6de9cd9a 1891 gfc_component *component;
a8006d09 1892 gfc_symbol *sym = primary->symtree->n.sym;
6de9cd9a 1893 match m;
f2d3cb25 1894 bool unknown;
f6288c24 1895 char sep;
6de9cd9a
DN
1896
1897 tail = NULL;
1898
3c721513 1899 gfc_gobble_whitespace ();
d3a9eea2
TB
1900
1901 if (gfc_peek_ascii_char () == '[')
1902 {
c49ea23d
PT
1903 if ((sym->ts.type != BT_CLASS && sym->attr.dimension)
1904 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1905 && CLASS_DATA (sym)->attr.dimension))
d3a9eea2
TB
1906 {
1907 gfc_error ("Array section designator, e.g. '(:)', is required "
1908 "besides the coarray designator '[...]' at %C");
1909 return MATCH_ERROR;
1910 }
c49ea23d
PT
1911 if ((sym->ts.type != BT_CLASS && !sym->attr.codimension)
1912 || (sym->ts.type == BT_CLASS && CLASS_DATA (sym)
1913 && !CLASS_DATA (sym)->attr.codimension))
d3a9eea2 1914 {
a4d9b221 1915 gfc_error ("Coarray designator at %C but %qs is not a coarray",
d3a9eea2
TB
1916 sym->name);
1917 return MATCH_ERROR;
1918 }
1919 }
1920
52bf62f9 1921 /* For associate names, we may not yet know whether they are arrays or not.
b125dc1e
PT
1922 If the selector expression is unambiguously an array; eg. a full array
1923 or an array section, then the associate name must be an array and we can
1924 fix it now. Otherwise, if parentheses follow and it is not a character
1925 type, we have to assume that it actually is one for now. The final
1926 decision will be made at resolution, of course. */
1927 if (sym->assoc
1928 && gfc_peek_ascii_char () == '('
1929 && sym->ts.type != BT_CLASS
1930 && !sym->attr.dimension)
1931 {
1932 if ((!sym->assoc->dangling
1933 && sym->assoc->target
1934 && sym->assoc->target->ref
1935 && sym->assoc->target->ref->type == REF_ARRAY
1936 && (sym->assoc->target->ref->u.ar.type == AR_FULL
1937 || sym->assoc->target->ref->u.ar.type == AR_SECTION))
1938 ||
1939 (!(sym->assoc->dangling || sym->ts.type == BT_CHARACTER)
1940 && sym->assoc->st
e207c522 1941 && sym->assoc->st->n.sym
b125dc1e
PT
1942 && sym->assoc->st->n.sym->attr.dimension == 0))
1943 {
52bf62f9 1944 sym->attr.dimension = 1;
b125dc1e
PT
1945 if (sym->as == NULL && sym->assoc
1946 && sym->assoc->st
1947 && sym->assoc->st->n.sym
1948 && sym->assoc->st->n.sym->as)
1949 sym->as = gfc_copy_array_spec (sym->assoc->st->n.sym->as);
1950 }
1951 }
52bf62f9 1952
c74b74a8 1953 if ((equiv_flag && gfc_peek_ascii_char () == '(')
d3a9eea2 1954 || gfc_peek_ascii_char () == '[' || sym->attr.codimension
ce2ab24c 1955 || (sym->attr.dimension && sym->ts.type != BT_CLASS
2a573572 1956 && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary)
f64edc8b 1957 && !(gfc_matching_procptr_assignment
cf2b3c22 1958 && sym->attr.flavor == FL_PROCEDURE))
22061030 1959 || (sym->ts.type == BT_CLASS && sym->attr.class_ok
492792ed
TB
1960 && (CLASS_DATA (sym)->attr.dimension
1961 || CLASS_DATA (sym)->attr.codimension)))
6de9cd9a 1962 {
102344e2
TB
1963 gfc_array_spec *as;
1964
1965 tail = extend_ref (primary, tail);
1966 tail->type = REF_ARRAY;
1967
a8006d09
JJ
1968 /* In EQUIVALENCE, we don't know yet whether we are seeing
1969 an array, character variable or array of character
edf1eac2 1970 variables. We'll leave the decision till resolve time. */
6de9cd9a 1971
102344e2
TB
1972 if (equiv_flag)
1973 as = NULL;
1974 else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
1975 as = CLASS_DATA (sym)->as;
1976 else
1977 as = sym->as;
1978
1979 m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag,
1980 as ? as->corank : 0);
6de9cd9a
DN
1981 if (m != MATCH_YES)
1982 return m;
a8006d09 1983
3c721513 1984 gfc_gobble_whitespace ();
8fc541d3 1985 if (equiv_flag && gfc_peek_ascii_char () == '(')
a8006d09
JJ
1986 {
1987 tail = extend_ref (primary, tail);
1988 tail->type = REF_ARRAY;
1989
d3a9eea2 1990 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag, 0);
a8006d09
JJ
1991 if (m != MATCH_YES)
1992 return m;
1993 }
6de9cd9a
DN
1994 }
1995
6de9cd9a
DN
1996 primary->ts = sym->ts;
1997
a8006d09
JJ
1998 if (equiv_flag)
1999 return MATCH_YES;
2000
f6288c24
FR
2001 /* With DEC extensions, member separator may be '.' or '%'. */
2002 sep = gfc_peek_ascii_char ();
2003 m = gfc_match_member_sep (sym);
2004 if (m == MATCH_ERROR)
2005 return MATCH_ERROR;
2006
2007 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES
713485cc 2008 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
ebac6d9c
DK
2009 gfc_set_default_type (sym, 0, sym->ns);
2010
f6288c24 2011 if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES)
6ee65df3 2012 {
a4d9b221 2013 gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name);
6ee65df3
TB
2014 return MATCH_ERROR;
2015 }
2016 else if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
f6288c24 2017 && m == MATCH_YES)
6ee65df3 2018 {
f6288c24
FR
2019 gfc_error ("Unexpected %<%c%> for nonderived-type variable %qs at %C",
2020 sep, sym->name);
6ee65df3
TB
2021 return MATCH_ERROR;
2022 }
2023
cf2b3c22 2024 if ((sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS)
f6288c24 2025 || m != MATCH_YES)
6de9cd9a
DN
2026 goto check_substring;
2027
bc21d315 2028 sym = sym->ts.u.derived;
6de9cd9a
DN
2029
2030 for (;;)
2031 {
524af0d6 2032 bool t;
e157f736 2033 gfc_symtree *tbp;
8e1f752a 2034
6de9cd9a
DN
2035 m = gfc_match_name (name);
2036 if (m == MATCH_NO)
2037 gfc_error ("Expected structure component name at %C");
2038 if (m != MATCH_YES)
2039 return MATCH_ERROR;
2040
d5c50b02 2041 if (sym && sym->f2k_derived)
b2acf594
PT
2042 tbp = gfc_find_typebound_proc (sym, &t, name, false, &gfc_current_locus);
2043 else
2044 tbp = NULL;
2045
8e1f752a
DK
2046 if (tbp)
2047 {
2048 gfc_symbol* tbp_sym;
2049
524af0d6 2050 if (!t)
8e1f752a
DK
2051 return MATCH_ERROR;
2052
2053 gcc_assert (!tail || !tail->next);
236e3815
JW
2054
2055 if (!(primary->expr_type == EXPR_VARIABLE
2056 || (primary->expr_type == EXPR_STRUCTURE
2057 && primary->symtree && primary->symtree->n.sym
2058 && primary->symtree->n.sym->attr.flavor)))
2059 return MATCH_ERROR;
8e1f752a 2060
e34ccb4c 2061 if (tbp->n.tb->is_generic)
e157f736
DK
2062 tbp_sym = NULL;
2063 else
e34ccb4c 2064 tbp_sym = tbp->n.tb->u.specific->n.sym;
8e1f752a
DK
2065
2066 primary->expr_type = EXPR_COMPCALL;
e34ccb4c 2067 primary->value.compcall.tbp = tbp->n.tb;
e157f736 2068 primary->value.compcall.name = tbp->name;
4a44a72d
DK
2069 primary->value.compcall.ignore_pass = 0;
2070 primary->value.compcall.assign = 0;
2071 primary->value.compcall.base_object = NULL;
e157f736
DK
2072 gcc_assert (primary->symtree->n.sym->attr.referenced);
2073 if (tbp_sym)
2074 primary->ts = tbp_sym->ts;
049bb74e
JW
2075 else
2076 gfc_clear_ts (&primary->ts);
e157f736 2077
e34ccb4c 2078 m = gfc_match_actual_arglist (tbp->n.tb->subroutine,
8e1f752a
DK
2079 &primary->value.compcall.actual);
2080 if (m == MATCH_ERROR)
2081 return MATCH_ERROR;
2082 if (m == MATCH_NO)
2083 {
2084 if (sub_flag)
2085 primary->value.compcall.actual = NULL;
2086 else
2087 {
2088 gfc_error ("Expected argument list at %C");
2089 return MATCH_ERROR;
2090 }
2091 }
2092
8e1f752a
DK
2093 break;
2094 }
2095
f6288c24 2096 component = gfc_find_component (sym, name, false, false, &tmp);
6de9cd9a
DN
2097 if (component == NULL)
2098 return MATCH_ERROR;
2099
f6288c24
FR
2100 /* Extend the reference chain determined by gfc_find_component. */
2101 if (primary->ref == NULL)
2102 primary->ref = tmp;
2103 else
2104 {
2105 /* Set by the for loop below for the last component ref. */
2106 gcc_assert (tail != NULL);
2107 tail->next = tmp;
2108 }
6de9cd9a 2109
f6288c24
FR
2110 /* The reference chain may be longer than one hop for union
2111 subcomponents; find the new tail. */
2112 for (tail = tmp; tail->next; tail = tail->next)
2113 ;
6de9cd9a
DN
2114
2115 primary->ts = component->ts;
2116
a4a76e52 2117 if (component->attr.proc_pointer && ppc_arg)
713485cc 2118 {
837c4b78 2119 /* Procedure pointer component call: Look for argument list. */
23878536 2120 m = gfc_match_actual_arglist (sub_flag,
713485cc
JW
2121 &primary->value.compcall.actual);
2122 if (m == MATCH_ERROR)
2123 return MATCH_ERROR;
837c4b78
JW
2124
2125 if (m == MATCH_NO && !gfc_matching_ptr_assignment
a4a76e52 2126 && !gfc_matching_procptr_assignment && !matching_actual_arglist)
837c4b78 2127 {
a4d9b221 2128 gfc_error ("Procedure pointer component %qs requires an "
837c4b78
JW
2129 "argument list at %C", component->name);
2130 return MATCH_ERROR;
2131 }
2132
23878536
JW
2133 if (m == MATCH_YES)
2134 primary->expr_type = EXPR_PPC;
713485cc
JW
2135
2136 break;
2137 }
2138
c74b74a8 2139 if (component->as != NULL && !component->attr.proc_pointer)
6de9cd9a
DN
2140 {
2141 tail = extend_ref (primary, tail);
2142 tail->type = REF_ARRAY;
2143
d3a9eea2
TB
2144 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag,
2145 component->as->corank);
6de9cd9a
DN
2146 if (m != MATCH_YES)
2147 return m;
2148 }
156c0160
JW
2149 else if (component->ts.type == BT_CLASS && component->attr.class_ok
2150 && CLASS_DATA (component)->as && !component->attr.proc_pointer)
cf2b3c22
TB
2151 {
2152 tail = extend_ref (primary, tail);
2153 tail->type = REF_ARRAY;
6de9cd9a 2154
7a08eda1 2155 m = gfc_match_array_ref (&tail->u.ar, CLASS_DATA (component)->as,
d3a9eea2 2156 equiv_flag,
7a08eda1 2157 CLASS_DATA (component)->as->corank);
cf2b3c22
TB
2158 if (m != MATCH_YES)
2159 return m;
2160 }
2161
2162 if ((component->ts.type != BT_DERIVED && component->ts.type != BT_CLASS)
f6288c24 2163 || gfc_match_member_sep (component->ts.u.derived) != MATCH_YES)
6de9cd9a
DN
2164 break;
2165
bc21d315 2166 sym = component->ts.u.derived;
6de9cd9a
DN
2167 }
2168
2169check_substring:
f2d3cb25 2170 unknown = false;
f6288c24 2171 if (primary->ts.type == BT_UNKNOWN && !gfc_fl_struct (sym->attr.flavor))
c040ffff 2172 {
713485cc 2173 if (gfc_get_default_type (sym->name, sym->ns)->type == BT_CHARACTER)
c040ffff 2174 {
edf1eac2
SK
2175 gfc_set_default_type (sym, 0, sym->ns);
2176 primary->ts = sym->ts;
f2d3cb25 2177 unknown = true;
c040ffff
TS
2178 }
2179 }
2180
6de9cd9a
DN
2181 if (primary->ts.type == BT_CHARACTER)
2182 {
38217d3e
PT
2183 bool def = primary->ts.deferred == 1;
2184 switch (match_substring (primary->ts.u.cl, equiv_flag, &substring, def))
6de9cd9a
DN
2185 {
2186 case MATCH_YES:
2187 if (tail == NULL)
2188 primary->ref = substring;
2189 else
2190 tail->next = substring;
2191
2192 if (primary->expr_type == EXPR_CONSTANT)
2193 primary->expr_type = EXPR_SUBSTRING;
2194
860c8f3b 2195 if (substring)
bc21d315 2196 primary->ts.u.cl = NULL;
860c8f3b 2197
6de9cd9a
DN
2198 break;
2199
2200 case MATCH_NO:
f2d3cb25 2201 if (unknown)
858f1fa2
DK
2202 {
2203 gfc_clear_ts (&primary->ts);
2204 gfc_clear_ts (&sym->ts);
2205 }
6de9cd9a
DN
2206 break;
2207
2208 case MATCH_ERROR:
2209 return MATCH_ERROR;
2210 }
2211 }
2212
4ceda204
JW
2213 /* F08:C611. */
2214 if (primary->ts.type == BT_DERIVED && primary->ref
2215 && primary->ts.u.derived && primary->ts.u.derived->attr.abstract)
2216 {
2217 gfc_error ("Nonpolymorphic reference to abstract type at %C");
2218 return MATCH_ERROR;
2219 }
2220
2221 /* F08:C727. */
d3a9eea2
TB
2222 if (primary->expr_type == EXPR_PPC && gfc_is_coindexed (primary))
2223 {
2224 gfc_error ("Coindexed procedure-pointer component at %C");
2225 return MATCH_ERROR;
2226 }
2227
6de9cd9a
DN
2228 return MATCH_YES;
2229}
2230
2231
2232/* Given an expression that is a variable, figure out what the
2233 ultimate variable's type and attribute is, traversing the reference
2234 structures if necessary.
2235
2236 This subroutine is trickier than it looks. We start at the base
2237 symbol and store the attribute. Component references load a
2238 completely new attribute.
2239
2240 A couple of rules come into play. Subobjects of targets are always
2241 targets themselves. If we see a component that goes through a
2242 pointer, then the expression must also be a target, since the
2243 pointer is associated with something (if it isn't core will soon be
2244 dumped). If we see a full part or section of an array, the
2245 expression is also an array.
2246
f7b529fa 2247 We can have at most one full array reference. */
6de9cd9a
DN
2248
2249symbol_attribute
edf1eac2 2250gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
6de9cd9a 2251{
16acb1a8 2252 int dimension, codimension, pointer, allocatable, target;
6de9cd9a
DN
2253 symbol_attribute attr;
2254 gfc_ref *ref;
cf2b3c22
TB
2255 gfc_symbol *sym;
2256 gfc_component *comp;
6de9cd9a 2257
50dbf0b4 2258 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
6de9cd9a
DN
2259 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2260
cf2b3c22
TB
2261 sym = expr->symtree->n.sym;
2262 attr = sym->attr;
6de9cd9a 2263
528622fd 2264 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
cf2b3c22 2265 {
7a08eda1 2266 dimension = CLASS_DATA (sym)->attr.dimension;
83ba23b7 2267 codimension = CLASS_DATA (sym)->attr.codimension;
d40477b4 2268 pointer = CLASS_DATA (sym)->attr.class_pointer;
7a08eda1 2269 allocatable = CLASS_DATA (sym)->attr.allocatable;
cf2b3c22
TB
2270 }
2271 else
2272 {
2273 dimension = attr.dimension;
83ba23b7 2274 codimension = attr.codimension;
cf2b3c22
TB
2275 pointer = attr.pointer;
2276 allocatable = attr.allocatable;
2277 }
6de9cd9a
DN
2278
2279 target = attr.target;
713485cc 2280 if (pointer || attr.proc_pointer)
6de9cd9a
DN
2281 target = 1;
2282
2283 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
cf2b3c22 2284 *ts = sym->ts;
6de9cd9a 2285
8c91ab34 2286 for (ref = expr->ref; ref; ref = ref->next)
6de9cd9a
DN
2287 switch (ref->type)
2288 {
2289 case REF_ARRAY:
2290
2291 switch (ref->u.ar.type)
2292 {
2293 case AR_FULL:
2294 dimension = 1;
2295 break;
2296
2297 case AR_SECTION:
5046aff5 2298 allocatable = pointer = 0;
6de9cd9a
DN
2299 dimension = 1;
2300 break;
2301
2302 case AR_ELEMENT:
d3a9eea2
TB
2303 /* Handle coarrays. */
2304 if (ref->u.ar.dimen > 0)
2305 allocatable = pointer = 0;
6de9cd9a
DN
2306 break;
2307
2308 case AR_UNKNOWN:
bf1b77dd
PT
2309 /* If any of start, end or stride is not integer, there will
2310 already have been an error issued. */
16acb1a8
DH
2311 int errors;
2312 gfc_get_errors (NULL, &errors);
2313 if (errors == 0)
bf1b77dd 2314 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
6de9cd9a
DN
2315 }
2316
2317 break;
2318
2319 case REF_COMPONENT:
cf2b3c22
TB
2320 comp = ref->u.c.component;
2321 attr = comp->attr;
6de9cd9a 2322 if (ts != NULL)
e8a25349 2323 {
cf2b3c22 2324 *ts = comp->ts;
e8a25349
TS
2325 /* Don't set the string length if a substring reference
2326 follows. */
2327 if (ts->type == BT_CHARACTER
2328 && ref->next && ref->next->type == REF_SUBSTRING)
bc21d315 2329 ts->u.cl = NULL;
e8a25349 2330 }
6de9cd9a 2331
cf2b3c22
TB
2332 if (comp->ts.type == BT_CLASS)
2333 {
83ba23b7 2334 codimension = CLASS_DATA (comp)->attr.codimension;
d40477b4 2335 pointer = CLASS_DATA (comp)->attr.class_pointer;
7a08eda1 2336 allocatable = CLASS_DATA (comp)->attr.allocatable;
cf2b3c22
TB
2337 }
2338 else
2339 {
83ba23b7 2340 codimension = comp->attr.codimension;
cf2b3c22
TB
2341 pointer = comp->attr.pointer;
2342 allocatable = comp->attr.allocatable;
2343 }
713485cc 2344 if (pointer || attr.proc_pointer)
6de9cd9a
DN
2345 target = 1;
2346
2347 break;
2348
2349 case REF_SUBSTRING:
5046aff5 2350 allocatable = pointer = 0;
6de9cd9a
DN
2351 break;
2352 }
2353
2354 attr.dimension = dimension;
83ba23b7 2355 attr.codimension = codimension;
6de9cd9a 2356 attr.pointer = pointer;
5046aff5 2357 attr.allocatable = allocatable;
6de9cd9a 2358 attr.target = target;
80f95228 2359 attr.save = sym->attr.save;
6de9cd9a
DN
2360
2361 return attr;
2362}
2363
2364
2365/* Return the attribute from a general expression. */
2366
2367symbol_attribute
edf1eac2 2368gfc_expr_attr (gfc_expr *e)
6de9cd9a
DN
2369{
2370 symbol_attribute attr;
2371
2372 switch (e->expr_type)
2373 {
2374 case EXPR_VARIABLE:
2375 attr = gfc_variable_attr (e, NULL);
2376 break;
2377
2378 case EXPR_FUNCTION:
2379 gfc_clear_attr (&attr);
2380
50c7654b 2381 if (e->value.function.esym && e->value.function.esym->result)
cf2b3c22
TB
2382 {
2383 gfc_symbol *sym = e->value.function.esym->result;
2384 attr = sym->attr;
2385 if (sym->ts.type == BT_CLASS)
2386 {
7a08eda1 2387 attr.dimension = CLASS_DATA (sym)->attr.dimension;
d40477b4 2388 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
7a08eda1 2389 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
cf2b3c22
TB
2390 }
2391 }
574284e9
AV
2392 else if (e->value.function.isym
2393 && e->value.function.isym->transformational
2394 && e->ts.type == BT_CLASS)
2395 attr = CLASS_DATA (e)->attr;
50dbf0b4
JW
2396 else
2397 attr = gfc_variable_attr (e, NULL);
6de9cd9a
DN
2398
2399 /* TODO: NULL() returns pointers. May have to take care of this
edf1eac2 2400 here. */
6de9cd9a
DN
2401
2402 break;
2403
2404 default:
3c9f5092
AV
2405 gfc_clear_attr (&attr);
2406 break;
2407 }
2408
2409 return attr;
2410}
2411
2412
2413/* Given an expression, figure out what the ultimate expression
2414 attribute is. This routine is similar to gfc_variable_attr with
2415 parts of gfc_expr_attr, but focuses more on the needs of
2416 coarrays. For coarrays a codimension attribute is kind of
ba85c8c3
AV
2417 "infectious" being propagated once set and never cleared.
2418 The coarray_comp is only set, when the expression refs a coarray
2419 component. REFS_COMP is set when present to true only, when this EXPR
2420 refs a (non-_data) component. To check whether EXPR refs an allocatable
2421 component in a derived type coarray *refs_comp needs to be set and
2422 coarray_comp has to false. */
3c9f5092
AV
2423
2424static symbol_attribute
ba85c8c3 2425caf_variable_attr (gfc_expr *expr, bool in_allocate, bool *refs_comp)
3c9f5092 2426{
de91486c 2427 int dimension, codimension, pointer, allocatable, target, coarray_comp;
3c9f5092
AV
2428 symbol_attribute attr;
2429 gfc_ref *ref;
2430 gfc_symbol *sym;
2431 gfc_component *comp;
2432
2433 if (expr->expr_type != EXPR_VARIABLE && expr->expr_type != EXPR_FUNCTION)
2434 gfc_internal_error ("gfc_caf_attr(): Expression isn't a variable");
2435
2436 sym = expr->symtree->n.sym;
2437 gfc_clear_attr (&attr);
2438
ba85c8c3 2439 if (refs_comp)
525a5e33 2440 *refs_comp = false;
ba85c8c3 2441
3c9f5092
AV
2442 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
2443 {
2444 dimension = CLASS_DATA (sym)->attr.dimension;
2445 codimension = CLASS_DATA (sym)->attr.codimension;
2446 pointer = CLASS_DATA (sym)->attr.class_pointer;
2447 allocatable = CLASS_DATA (sym)->attr.allocatable;
de91486c
AV
2448 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
2449 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived->attr.pointer_comp;
3c9f5092
AV
2450 }
2451 else
2452 {
2453 dimension = sym->attr.dimension;
2454 codimension = sym->attr.codimension;
2455 pointer = sym->attr.pointer;
2456 allocatable = sym->attr.allocatable;
de91486c 2457 attr.alloc_comp = sym->ts.type == BT_DERIVED
3c9f5092 2458 ? sym->ts.u.derived->attr.alloc_comp : 0;
de91486c
AV
2459 attr.pointer_comp = sym->ts.type == BT_DERIVED
2460 ? sym->ts.u.derived->attr.pointer_comp : 0;
3c9f5092
AV
2461 }
2462
ba85c8c3 2463 target = coarray_comp = 0;
3c9f5092
AV
2464 if (pointer || attr.proc_pointer)
2465 target = 1;
2466
2467 for (ref = expr->ref; ref; ref = ref->next)
2468 switch (ref->type)
2469 {
2470 case REF_ARRAY:
2471
2472 switch (ref->u.ar.type)
2473 {
2474 case AR_FULL:
2475 case AR_SECTION:
2476 dimension = 1;
2477 break;
2478
2479 case AR_ELEMENT:
2480 /* Handle coarrays. */
2481 if (ref->u.ar.dimen > 0 && !in_allocate)
2482 allocatable = pointer = 0;
2483 break;
2484
2485 case AR_UNKNOWN:
2486 /* If any of start, end or stride is not integer, there will
2487 already have been an error issued. */
2488 int errors;
2489 gfc_get_errors (NULL, &errors);
2490 if (errors == 0)
2491 gfc_internal_error ("gfc_caf_attr(): Bad array reference");
2492 }
2493
2494 break;
2495
2496 case REF_COMPONENT:
2497 comp = ref->u.c.component;
2498
2499 if (comp->ts.type == BT_CLASS)
2500 {
ba85c8c3
AV
2501 /* Set coarray_comp only, when this component introduces the
2502 coarray. */
2503 coarray_comp = !codimension && CLASS_DATA (comp)->attr.codimension;
3c9f5092
AV
2504 codimension |= CLASS_DATA (comp)->attr.codimension;
2505 pointer = CLASS_DATA (comp)->attr.class_pointer;
2506 allocatable = CLASS_DATA (comp)->attr.allocatable;
3c9f5092
AV
2507 }
2508 else
2509 {
ba85c8c3
AV
2510 /* Set coarray_comp only, when this component introduces the
2511 coarray. */
2512 coarray_comp = !codimension && comp->attr.codimension;
3c9f5092
AV
2513 codimension |= comp->attr.codimension;
2514 pointer = comp->attr.pointer;
2515 allocatable = comp->attr.allocatable;
3c9f5092
AV
2516 }
2517
525a5e33
AV
2518 if (refs_comp && strcmp (comp->name, "_data") != 0
2519 && (ref->next == NULL
2520 || (ref->next->type == REF_ARRAY && ref->next->next == NULL)))
2521 *refs_comp = true;
ba85c8c3 2522
3c9f5092
AV
2523 if (pointer || attr.proc_pointer)
2524 target = 1;
2525
2526 break;
2527
2528 case REF_SUBSTRING:
2529 allocatable = pointer = 0;
2530 break;
2531 }
2532
2533 attr.dimension = dimension;
2534 attr.codimension = codimension;
2535 attr.pointer = pointer;
2536 attr.allocatable = allocatable;
2537 attr.target = target;
2538 attr.save = sym->attr.save;
2539 attr.coarray_comp = coarray_comp;
3c9f5092
AV
2540
2541 return attr;
2542}
2543
2544
2545symbol_attribute
ba85c8c3 2546gfc_caf_attr (gfc_expr *e, bool in_allocate, bool *refs_comp)
3c9f5092
AV
2547{
2548 symbol_attribute attr;
2549
2550 switch (e->expr_type)
2551 {
2552 case EXPR_VARIABLE:
ba85c8c3 2553 attr = caf_variable_attr (e, in_allocate, refs_comp);
3c9f5092
AV
2554 break;
2555
2556 case EXPR_FUNCTION:
2557 gfc_clear_attr (&attr);
2558
2559 if (e->value.function.esym && e->value.function.esym->result)
2560 {
2561 gfc_symbol *sym = e->value.function.esym->result;
2562 attr = sym->attr;
2563 if (sym->ts.type == BT_CLASS)
2564 {
2565 attr.dimension = CLASS_DATA (sym)->attr.dimension;
2566 attr.pointer = CLASS_DATA (sym)->attr.class_pointer;
2567 attr.allocatable = CLASS_DATA (sym)->attr.allocatable;
2568 attr.alloc_comp = CLASS_DATA (sym)->ts.u.derived->attr.alloc_comp;
de91486c
AV
2569 attr.pointer_comp = CLASS_DATA (sym)->ts.u.derived
2570 ->attr.pointer_comp;
3c9f5092
AV
2571 }
2572 }
2573 else if (e->symtree)
ba85c8c3 2574 attr = caf_variable_attr (e, in_allocate, refs_comp);
3c9f5092
AV
2575 else
2576 gfc_clear_attr (&attr);
2577 break;
2578
2579 default:
6de9cd9a
DN
2580 gfc_clear_attr (&attr);
2581 break;
2582 }
2583
2584 return attr;
2585}
2586
2587
2588/* Match a structure constructor. The initial symbol has already been
2589 seen. */
2590
fa9290d3
DK
2591typedef struct gfc_structure_ctor_component
2592{
2593 char* name;
2594 gfc_expr* val;
2595 locus where;
2596 struct gfc_structure_ctor_component* next;
2597}
2598gfc_structure_ctor_component;
2599
ece3f663 2600#define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
fa9290d3
DK
2601
2602static void
2603gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp)
2604{
cede9502 2605 free (comp->name);
fa9290d3 2606 gfc_free_expr (comp->val);
cede9502 2607 free (comp);
fa9290d3
DK
2608}
2609
7d1f1e61
PT
2610
2611/* Translate the component list into the actual constructor by sorting it in
2612 the order required; this also checks along the way that each and every
2613 component actually has an initializer and handles default initializers
2614 for components without explicit value given. */
524af0d6 2615static bool
7d1f1e61 2616build_actual_constructor (gfc_structure_ctor_component **comp_head,
b7e75771 2617 gfc_constructor_base *ctor_head, gfc_symbol *sym)
6de9cd9a 2618{
fa9290d3 2619 gfc_structure_ctor_component *comp_iter;
7d1f1e61
PT
2620 gfc_component *comp;
2621
2622 for (comp = sym->components; comp; comp = comp->next)
2623 {
2624 gfc_structure_ctor_component **next_ptr;
2625 gfc_expr *value = NULL;
2626
2627 /* Try to find the initializer for the current component by name. */
2628 next_ptr = comp_head;
2629 for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next)
2630 {
2631 if (!strcmp (comp_iter->name, comp->name))
2632 break;
2633 next_ptr = &comp_iter->next;
2634 }
2635
2636 /* If an extension, try building the parent derived type by building
2637 a value expression for the parent derived type and calling self. */
2638 if (!comp_iter && comp == sym->components && sym->attr.extension)
2639 {
b7e75771
JD
2640 value = gfc_get_structure_constructor_expr (comp->ts.type,
2641 comp->ts.kind,
2642 &gfc_current_locus);
7d1f1e61 2643 value->ts = comp->ts;
7d1f1e61 2644
bf1b77dd
PT
2645 if (!build_actual_constructor (comp_head,
2646 &value->value.constructor,
524af0d6 2647 comp->ts.u.derived))
7d1f1e61
PT
2648 {
2649 gfc_free_expr (value);
524af0d6 2650 return false;
7d1f1e61 2651 }
b7e75771
JD
2652
2653 gfc_constructor_append_expr (ctor_head, value, NULL);
7d1f1e61
PT
2654 continue;
2655 }
2656
2657 /* If it was not found, try the default initializer if there's any;
2b3dc0db 2658 otherwise, it's an error unless this is a deferred parameter. */
7d1f1e61
PT
2659 if (!comp_iter)
2660 {
2661 if (comp->initializer)
2662 {
524af0d6
JB
2663 if (!gfc_notify_std (GFC_STD_F2003, "Structure constructor "
2664 "with missing optional arguments at %C"))
2665 return false;
7d1f1e61
PT
2666 value = gfc_copy_expr (comp->initializer);
2667 }
9b548517
AV
2668 else if (comp->attr.allocatable
2669 || (comp->ts.type == BT_CLASS
2670 && CLASS_DATA (comp)->attr.allocatable))
7430df97
JW
2671 {
2672 if (!gfc_notify_std (GFC_STD_F2008, "No initializer for "
2f029c08 2673 "allocatable component %qs given in the "
9b548517 2674 "structure constructor at %C", comp->name))
7430df97
JW
2675 return false;
2676 }
9b548517 2677 else if (!comp->attr.artificial)
7d1f1e61 2678 {
a4d9b221 2679 gfc_error ("No initializer for component %qs given in the"
546c8974 2680 " structure constructor at %C", comp->name);
524af0d6 2681 return false;
7d1f1e61
PT
2682 }
2683 }
2684 else
2685 value = comp_iter->val;
2686
2687 /* Add the value to the constructor chain built. */
b7e75771 2688 gfc_constructor_append_expr (ctor_head, value, NULL);
7d1f1e61
PT
2689
2690 /* Remove the entry from the component list. We don't want the expression
2691 value to be free'd, so set it to NULL. */
2692 if (comp_iter)
2693 {
2694 *next_ptr = comp_iter->next;
2695 comp_iter->val = NULL;
2696 gfc_free_structure_ctor_component (comp_iter);
2697 }
2698 }
524af0d6 2699 return true;
7d1f1e61
PT
2700}
2701
c3f34952 2702
524af0d6 2703bool
c3f34952
TB
2704gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **cexpr,
2705 gfc_actual_arglist **arglist,
2706 bool parent)
7d1f1e61 2707{
c3f34952 2708 gfc_actual_arglist *actual;
7d1f1e61 2709 gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter;
b7e75771 2710 gfc_constructor_base ctor_head = NULL;
fa9290d3 2711 gfc_component *comp; /* Is set NULL when named component is first seen */
fa9290d3 2712 const char* last_name = NULL;
c3f34952
TB
2713 locus old_locus;
2714 gfc_expr *expr;
6de9cd9a 2715
c3f34952
TB
2716 expr = parent ? *cexpr : e;
2717 old_locus = gfc_current_locus;
2718 if (parent)
2719 ; /* gfc_current_locus = *arglist->expr ? ->where;*/
2720 else
2721 gfc_current_locus = expr->where;
6de9cd9a 2722
c3f34952 2723 comp_tail = comp_head = NULL;
6de9cd9a 2724
52f49934
DK
2725 if (!parent && sym->attr.abstract)
2726 {
a4d9b221 2727 gfc_error ("Can't construct ABSTRACT type %qs at %L",
c3f34952
TB
2728 sym->name, &expr->where);
2729 goto cleanup;
52f49934
DK
2730 }
2731
c3f34952
TB
2732 comp = sym->components;
2733 actual = parent ? *arglist : expr->value.function.actual;
2734 for ( ; actual; )
6de9cd9a 2735 {
c3f34952 2736 gfc_component *this_comp = NULL;
6de9cd9a 2737
c3f34952
TB
2738 if (!comp_head)
2739 comp_tail = comp_head = gfc_get_structure_ctor_component ();
2740 else
2741 {
2742 comp_tail->next = gfc_get_structure_ctor_component ();
2743 comp_tail = comp_tail->next;
2744 }
2745 if (actual->name)
2746 {
524af0d6
JB
2747 if (!gfc_notify_std (GFC_STD_F2003, "Structure"
2748 " constructor with named arguments at %C"))
c3f34952 2749 goto cleanup;
6de9cd9a 2750
c3f34952
TB
2751 comp_tail->name = xstrdup (actual->name);
2752 last_name = comp_tail->name;
2753 comp = NULL;
2754 }
2755 else
2756 {
2757 /* Components without name are not allowed after the first named
2758 component initializer! */
9b548517 2759 if (!comp || comp->attr.artificial)
fa9290d3 2760 {
c3f34952
TB
2761 if (last_name)
2762 gfc_error ("Component initializer without name after component"
546c8974 2763 " named %s at %L", last_name,
c3f34952
TB
2764 actual->expr ? &actual->expr->where
2765 : &gfc_current_locus);
2766 else
2767 gfc_error ("Too many components in structure constructor at "
546c8974
DM
2768 "%L", actual->expr ? &actual->expr->where
2769 : &gfc_current_locus);
c3f34952 2770 goto cleanup;
fa9290d3 2771 }
fa9290d3 2772
c3f34952
TB
2773 comp_tail->name = xstrdup (comp->name);
2774 }
fa9290d3 2775
c3f34952 2776 /* Find the current component in the structure definition and check
9d1210f4 2777 its access is not private. */
c3f34952 2778 if (comp)
f6288c24 2779 this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
c3f34952
TB
2780 else
2781 {
2782 this_comp = gfc_find_component (sym, (const char *)comp_tail->name,
f6288c24 2783 false, false, NULL);
c3f34952
TB
2784 comp = NULL; /* Reset needed! */
2785 }
6de9cd9a 2786
c3f34952
TB
2787 /* Here we can check if a component name is given which does not
2788 correspond to any component of the defined structure. */
2789 if (!this_comp)
2790 goto cleanup;
fa9290d3 2791
c3f34952
TB
2792 comp_tail->val = actual->expr;
2793 if (actual->expr != NULL)
2794 comp_tail->where = actual->expr->where;
2795 actual->expr = NULL;
fa9290d3 2796
c3f34952 2797 /* Check if this component is already given a value. */
bf1b77dd 2798 for (comp_iter = comp_head; comp_iter != comp_tail;
c3f34952
TB
2799 comp_iter = comp_iter->next)
2800 {
2801 gcc_assert (comp_iter);
2802 if (!strcmp (comp_iter->name, comp_tail->name))
d3a9eea2 2803 {
c4100eae 2804 gfc_error ("Component %qs is initialized twice in the structure"
546c8974 2805 " constructor at %L", comp_tail->name,
c3f34952
TB
2806 comp_tail->val ? &comp_tail->where
2807 : &gfc_current_locus);
d3a9eea2 2808 goto cleanup;
c3f34952
TB
2809 }
2810 }
d3a9eea2 2811
c3f34952
TB
2812 /* F2008, R457/C725, for PURE C1283. */
2813 if (this_comp->attr.pointer && comp_tail->val
2814 && gfc_is_coindexed (comp_tail->val))
2815 {
a4d9b221 2816 gfc_error ("Coindexed expression to pointer component %qs in "
546c8974 2817 "structure constructor at %L", comp_tail->name,
c3f34952
TB
2818 &comp_tail->where);
2819 goto cleanup;
2820 }
d3a9eea2 2821
c3f34952
TB
2822 /* If not explicitly a parent constructor, gather up the components
2823 and build one. */
2824 if (comp && comp == sym->components
2825 && sym->attr.extension
2826 && comp_tail->val
f6288c24 2827 && (!gfc_bt_struct (comp_tail->val->ts.type)
c3f34952
TB
2828 ||
2829 comp_tail->val->ts.u.derived != this_comp->ts.u.derived))
2830 {
524af0d6 2831 bool m;
c3f34952 2832 gfc_actual_arglist *arg_null = NULL;
6de9cd9a 2833
c3f34952
TB
2834 actual->expr = comp_tail->val;
2835 comp_tail->val = NULL;
6de9cd9a 2836
c3f34952
TB
2837 m = gfc_convert_to_structure_constructor (NULL,
2838 comp->ts.u.derived, &comp_tail->val,
2839 comp->ts.u.derived->attr.zero_comp
2840 ? &arg_null : &actual, true);
524af0d6 2841 if (!m)
c3f34952 2842 goto cleanup;
2eae3dc7 2843
c3f34952
TB
2844 if (comp->ts.u.derived->attr.zero_comp)
2845 {
2846 comp = comp->next;
2847 continue;
2848 }
2849 }
fa9290d3 2850
c3f34952
TB
2851 if (comp)
2852 comp = comp->next;
2853 if (parent && !comp)
2854 break;
fa9290d3 2855
792f7301
MM
2856 if (actual)
2857 actual = actual->next;
6de9cd9a
DN
2858 }
2859
524af0d6 2860 if (!build_actual_constructor (&comp_head, &ctor_head, sym))
7d1f1e61
PT
2861 goto cleanup;
2862
fa9290d3
DK
2863 /* No component should be left, as this should have caused an error in the
2864 loop constructing the component-list (name that does not correspond to any
2865 component in the structure definition). */
c3f34952 2866 if (comp_head && sym->attr.extension)
7d1f1e61
PT
2867 {
2868 for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next)
2869 {
a4d9b221 2870 gfc_error ("component %qs at %L has already been set by a "
7d1f1e61
PT
2871 "parent derived type constructor", comp_iter->name,
2872 &comp_iter->where);
2873 }
2874 goto cleanup;
2875 }
c3f34952
TB
2876 else
2877 gcc_assert (!comp_head);
fa9290d3 2878
c3f34952
TB
2879 if (parent)
2880 {
2881 expr = gfc_get_structure_constructor_expr (BT_DERIVED, 0, &gfc_current_locus);
2882 expr->ts.u.derived = sym;
2883 expr->value.constructor = ctor_head;
2884 *cexpr = expr;
2885 }
2886 else
2887 {
2888 expr->ts.u.derived = sym;
2889 expr->ts.kind = 0;
2890 expr->ts.type = BT_DERIVED;
2891 expr->value.constructor = ctor_head;
2892 expr->expr_type = EXPR_STRUCTURE;
2893 }
6de9cd9a 2894
bf1b77dd 2895 gfc_current_locus = old_locus;
c3f34952
TB
2896 if (parent)
2897 *arglist = actual;
524af0d6 2898 return true;
6de9cd9a 2899
c3f34952 2900 cleanup:
bf1b77dd 2901 gfc_current_locus = old_locus;
6de9cd9a 2902
fa9290d3
DK
2903 for (comp_iter = comp_head; comp_iter; )
2904 {
2905 gfc_structure_ctor_component *next = comp_iter->next;
2906 gfc_free_structure_ctor_component (comp_iter);
2907 comp_iter = next;
2908 }
b7e75771 2909 gfc_constructor_free (ctor_head);
c3f34952 2910
524af0d6 2911 return false;
c3f34952
TB
2912}
2913
2914
2915match
2916gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result)
2917{
2918 match m;
2919 gfc_expr *e;
2920 gfc_symtree *symtree;
2921
b64c3d06 2922 gfc_get_ha_sym_tree (sym->name, &symtree);
c3f34952
TB
2923
2924 e = gfc_get_expr ();
2925 e->symtree = symtree;
2926 e->expr_type = EXPR_FUNCTION;
2927
f6288c24 2928 gcc_assert (gfc_fl_struct (sym->attr.flavor)
c3f34952
TB
2929 && symtree->n.sym->attr.flavor == FL_PROCEDURE);
2930 e->value.function.esym = sym;
2931 e->symtree->n.sym->attr.generic = 1;
2932
49032565
SK
2933 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2934 if (m != MATCH_YES)
2935 {
2936 gfc_free_expr (e);
2937 return m;
2938 }
2939
2940 if (!gfc_convert_to_structure_constructor (e, sym, NULL, NULL, false))
2941 {
2942 gfc_free_expr (e);
2943 return MATCH_ERROR;
2944 }
2945
586dc38b
SK
2946 /* If a structure constructor is in a DATA statement, then each entity
2947 in the structure constructor must be a constant. Try to reduce the
2948 expression here. */
2949 if (gfc_in_match_data ())
2950 gfc_reduce_init_expr (e);
2951
49032565
SK
2952 *result = e;
2953 return MATCH_YES;
6de9cd9a
DN
2954}
2955
2956
9a3db5a3
PT
2957/* If the symbol is an implicit do loop index and implicitly typed,
2958 it should not be host associated. Provide a symtree from the
2959 current namespace. */
2960static match
2961check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym)
2962{
2963 if ((*sym)->attr.flavor == FL_VARIABLE
2964 && (*sym)->ns != gfc_current_ns
2965 && (*sym)->attr.implied_index
2966 && (*sym)->attr.implicit_type
2967 && !(*sym)->attr.use_assoc)
2968 {
2969 int i;
08a6b8e0 2970 i = gfc_get_sym_tree ((*sym)->name, NULL, st, false);
9a3db5a3
PT
2971 if (i)
2972 return MATCH_ERROR;
2973 *sym = (*st)->n.sym;
2974 }
2975 return MATCH_YES;
2976}
2977
2978
3070bab4
JW
2979/* Procedure pointer as function result: Replace the function symbol by the
2980 auto-generated hidden result variable named "ppr@". */
2981
524af0d6 2982static bool
3070bab4
JW
2983replace_hidden_procptr_result (gfc_symbol **sym, gfc_symtree **st)
2984{
2985 /* Check for procedure pointer result variable. */
2986 if ((*sym)->attr.function && !(*sym)->attr.external
2987 && (*sym)->result && (*sym)->result != *sym
2988 && (*sym)->result->attr.proc_pointer
2989 && (*sym) == gfc_current_ns->proc_name
2990 && (*sym) == (*sym)->result->ns->proc_name
2991 && strcmp ("ppr@", (*sym)->result->name) == 0)
2992 {
2993 /* Automatic replacement with "hidden" result variable. */
2994 (*sym)->result->attr.referenced = (*sym)->attr.referenced;
2995 *sym = (*sym)->result;
2996 *st = gfc_find_symtree ((*sym)->ns->sym_root, (*sym)->name);
524af0d6 2997 return true;
3070bab4 2998 }
524af0d6 2999 return false;
3070bab4
JW
3000}
3001
3002
6de9cd9a
DN
3003/* Matches a variable name followed by anything that might follow it--
3004 array reference, argument list of a function, etc. */
3005
3006match
edf1eac2 3007gfc_match_rvalue (gfc_expr **result)
6de9cd9a
DN
3008{
3009 gfc_actual_arglist *actual_arglist;
d3fcc995 3010 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
6de9cd9a
DN
3011 gfc_state_data *st;
3012 gfc_symbol *sym;
3013 gfc_symtree *symtree;
d3fcc995 3014 locus where, old_loc;
6de9cd9a 3015 gfc_expr *e;
d3fcc995 3016 match m, m2;
6de9cd9a 3017 int i;
5270c302
AL
3018 gfc_typespec *ts;
3019 bool implicit_char;
a99288e5 3020 gfc_ref *ref;
6de9cd9a 3021
cd714e1e
FR
3022 m = gfc_match ("%%loc");
3023 if (m == MATCH_YES)
3024 {
3025 if (!gfc_notify_std (GFC_STD_LEGACY, "%%LOC() as an rvalue at %C"))
3026 return MATCH_ERROR;
3027 strncpy (name, "loc", 4);
3028 }
3029
3030 else
3031 {
3032 m = gfc_match_name (name);
3033 if (m != MATCH_YES)
3034 return m;
3035 }
6de9cd9a 3036
f6288c24
FR
3037 /* Check if the symbol exists. */
3038 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
6de9cd9a
DN
3039 return MATCH_ERROR;
3040
f6288c24
FR
3041 /* If the symbol doesn't exist, create it unless the name matches a FL_STRUCT
3042 type. For derived types we create a generic symbol which links to the
3043 derived type symbol; STRUCTUREs are simpler and must not conflict with
3044 variables. */
3045 if (!symtree)
3046 if (gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree))
3047 return MATCH_ERROR;
3048 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3049 {
3050 if (gfc_find_state (COMP_INTERFACE)
3051 && !gfc_current_ns->has_import_set)
3052 i = gfc_get_sym_tree (name, NULL, &symtree, false);
3053 else
3054 i = gfc_get_ha_sym_tree (name, &symtree);
3055 if (i)
3056 return MATCH_ERROR;
3057 }
3058
3059
6de9cd9a
DN
3060 sym = symtree->n.sym;
3061 e = NULL;
63645982 3062 where = gfc_current_locus;
6de9cd9a 3063
3070bab4
JW
3064 replace_hidden_procptr_result (&sym, &symtree);
3065
9a3db5a3
PT
3066 /* If this is an implicit do loop index and implicitly typed,
3067 it should not be host associated. */
3068 m = check_for_implicit_index (&symtree, &sym);
3069 if (m != MATCH_YES)
3070 return m;
3071
6de9cd9a 3072 gfc_set_sym_referenced (sym);
9a3db5a3 3073 sym->attr.implied_index = 0;
6de9cd9a 3074
0921bc44
JJ
3075 if (sym->attr.function && sym->result == sym)
3076 {
811849c0
PT
3077 /* See if this is a directly recursive function call. */
3078 gfc_gobble_whitespace ();
3079 if (sym->attr.recursive
8fc541d3 3080 && gfc_peek_ascii_char () == '('
fc2d8680
PT
3081 && gfc_current_ns->proc_name == sym
3082 && !sym->attr.dimension)
811849c0 3083 {
a4d9b221 3084 gfc_error ("%qs at %C is the name of a recursive function "
fc2d8680
PT
3085 "and so refers to the result variable. Use an "
3086 "explicit RESULT variable for direct recursion "
3087 "(12.5.2.1)", sym->name);
811849c0
PT
3088 return MATCH_ERROR;
3089 }
fc2d8680 3090
2d71b918 3091 if (gfc_is_function_return_value (sym, gfc_current_ns))
0921bc44
JJ
3092 goto variable;
3093
3094 if (sym->attr.entry
3095 && (sym->ns == gfc_current_ns
3096 || sym->ns == gfc_current_ns->parent))
3097 {
3098 gfc_entry_list *el = NULL;
bf1b77dd 3099
0921bc44
JJ
3100 for (el = sym->ns->entries; el; el = el->next)
3101 if (sym == el->sym)
3102 goto variable;
3103 }
3104 }
6de9cd9a 3105
8fb74da4
JW
3106 if (gfc_matching_procptr_assignment)
3107 goto procptr0;
3108
6de9cd9a
DN
3109 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
3110 goto function0;
3111
3112 if (sym->attr.generic)
3113 goto generic_function;
3114
3115 switch (sym->attr.flavor)
3116 {
3117 case FL_VARIABLE:
3118 variable:
6de9cd9a
DN
3119 e = gfc_get_expr ();
3120
3121 e->expr_type = EXPR_VARIABLE;
3122 e->symtree = symtree;
3123
713485cc 3124 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3125 break;
3126
3127 case FL_PARAMETER:
b7263e8f 3128 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
bf1b77dd 3129 end up here. Unfortunately, sym->value->expr_type is set to
b7263e8f
EE
3130 EXPR_CONSTANT, and so the if () branch would be followed without
3131 the !sym->as check. */
3132 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
6de9cd9a
DN
3133 e = gfc_copy_expr (sym->value);
3134 else
3135 {
3136 e = gfc_get_expr ();
3137 e->expr_type = EXPR_VARIABLE;
3138 }
3139
3140 e->symtree = symtree;
713485cc 3141 m = gfc_match_varspec (e, 0, false, true);
a99288e5
PT
3142
3143 if (sym->ts.is_c_interop || sym->ts.is_iso_c)
3144 break;
3145
927171bf
PT
3146 /* Variable array references to derived type parameters cause
3147 all sorts of headaches in simplification. Treating such
3148 expressions as variable works just fine for all array
3149 references. */
3150 if (sym->value && sym->ts.type == BT_DERIVED && e->ref)
a99288e5
PT
3151 {
3152 for (ref = e->ref; ref; ref = ref->next)
3153 if (ref->type == REF_ARRAY)
3154 break;
3155
927171bf 3156 if (ref == NULL || ref->u.ar.type == AR_FULL)
a99288e5
PT
3157 break;
3158
3159 ref = e->ref;
3160 e->ref = NULL;
3161 gfc_free_expr (e);
3162 e = gfc_get_expr ();
3163 e->expr_type = EXPR_VARIABLE;
3164 e->symtree = symtree;
3165 e->ref = ref;
a99288e5
PT
3166 }
3167
6de9cd9a
DN
3168 break;
3169
f6288c24 3170 case FL_STRUCT:
6de9cd9a
DN
3171 case FL_DERIVED:
3172 sym = gfc_use_derived (sym);
3173 if (sym == NULL)
3174 m = MATCH_ERROR;
3175 else
c3f34952 3176 goto generic_function;
6de9cd9a
DN
3177 break;
3178
3179 /* If we're here, then the name is known to be the name of a
3180 procedure, yet it is not sure to be the name of a function. */
3181 case FL_PROCEDURE:
8fb74da4 3182
1cc0e193 3183 /* Procedure Pointer Assignments. */
8fb74da4
JW
3184 procptr0:
3185 if (gfc_matching_procptr_assignment)
3186 {
3187 gfc_gobble_whitespace ();
e35bbb23 3188 if (!sym->attr.dimension && gfc_peek_ascii_char () == '(')
8fb74da4
JW
3189 /* Parse functions returning a procptr. */
3190 goto function0;
3191
8fb74da4
JW
3192 e = gfc_get_expr ();
3193 e->expr_type = EXPR_VARIABLE;
3194 e->symtree = symtree;
713485cc 3195 m = gfc_match_varspec (e, 0, false, true);
2dda89a8
JW
3196 if (!e->ref && sym->attr.flavor == FL_UNKNOWN
3197 && sym->ts.type == BT_UNKNOWN
524af0d6 3198 && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
2dda89a8
JW
3199 {
3200 m = MATCH_ERROR;
3201 break;
3202 }
8fb74da4
JW
3203 break;
3204 }
3205
6de9cd9a
DN
3206 if (sym->attr.subroutine)
3207 {
a4d9b221 3208 gfc_error ("Unexpected use of subroutine name %qs at %C",
6de9cd9a
DN
3209 sym->name);
3210 m = MATCH_ERROR;
3211 break;
3212 }
3213
3214 /* At this point, the name has to be a non-statement function.
edf1eac2
SK
3215 If the name is the same as the current function being
3216 compiled, then we have a variable reference (to the function
3217 result) if the name is non-recursive. */
6de9cd9a
DN
3218
3219 st = gfc_enclosing_unit (NULL);
3220
4668d6f9
PT
3221 if (st != NULL
3222 && st->state == COMP_FUNCTION
6de9cd9a
DN
3223 && st->sym == sym
3224 && !sym->attr.recursive)
3225 {
3226 e = gfc_get_expr ();
3227 e->symtree = symtree;
3228 e->expr_type = EXPR_VARIABLE;
3229
713485cc 3230 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3231 break;
3232 }
3233
3234 /* Match a function reference. */
3235 function0:
3236 m = gfc_match_actual_arglist (0, &actual_arglist);
3237 if (m == MATCH_NO)
3238 {
3239 if (sym->attr.proc == PROC_ST_FUNCTION)
a4d9b221 3240 gfc_error ("Statement function %qs requires argument list at %C",
6de9cd9a
DN
3241 sym->name);
3242 else
a4d9b221 3243 gfc_error ("Function %qs requires an argument list at %C",
6de9cd9a
DN
3244 sym->name);
3245
3246 m = MATCH_ERROR;
3247 break;
3248 }
3249
3250 if (m != MATCH_YES)
3251 {
3252 m = MATCH_ERROR;
3253 break;
3254 }
3255
3256 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
3257 sym = symtree->n.sym;
3258
3070bab4
JW
3259 replace_hidden_procptr_result (&sym, &symtree);
3260
6de9cd9a
DN
3261 e = gfc_get_expr ();
3262 e->symtree = symtree;
3263 e->expr_type = EXPR_FUNCTION;
3264 e->value.function.actual = actual_arglist;
63645982 3265 e->where = gfc_current_locus;
6de9cd9a 3266
102344e2
TB
3267 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
3268 && CLASS_DATA (sym)->as)
3269 e->rank = CLASS_DATA (sym)->as->rank;
3270 else if (sym->as != NULL)
6de9cd9a
DN
3271 e->rank = sym->as->rank;
3272
3273 if (!sym->attr.function
524af0d6 3274 && !gfc_add_function (&sym->attr, sym->name, NULL))
6de9cd9a
DN
3275 {
3276 m = MATCH_ERROR;
3277 break;
3278 }
3279
a8b3b0b6
CR
3280 /* Check here for the existence of at least one argument for the
3281 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
3282 argument(s) given will be checked in gfc_iso_c_func_interface,
3283 during resolution of the function call. */
3284 if (sym->attr.is_iso_c == 1
3285 && (sym->from_intmod == INTMOD_ISO_C_BINDING
3286 && (sym->intmod_sym_id == ISOCBINDING_LOC
3287 || sym->intmod_sym_id == ISOCBINDING_FUNLOC
3288 || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED)))
3289 {
3290 /* make sure we were given a param */
3291 if (actual_arglist == NULL)
3292 {
a4d9b221 3293 gfc_error ("Missing argument to %qs at %C", sym->name);
a8b3b0b6
CR
3294 m = MATCH_ERROR;
3295 break;
3296 }
3297 }
3298
6de9cd9a
DN
3299 if (sym->result == NULL)
3300 sym->result = sym;
3301
20fee4a9
JW
3302 gfc_gobble_whitespace ();
3303 /* F08:C612. */
3304 if (gfc_peek_ascii_char() == '%')
3305 {
3306 gfc_error ("The leftmost part-ref in a data-ref can not be a "
3307 "function reference at %C");
3308 m = MATCH_ERROR;
3309 }
3310
6de9cd9a
DN
3311 m = MATCH_YES;
3312 break;
3313
3314 case FL_UNKNOWN:
3315
3316 /* Special case for derived type variables that get their types
edf1eac2
SK
3317 via an IMPLICIT statement. This can't wait for the
3318 resolution phase. */
6de9cd9a 3319
f6288c24
FR
3320 old_loc = gfc_current_locus;
3321 if (gfc_match_member_sep (sym) == MATCH_YES
0dd973dd 3322 && sym->ts.type == BT_UNKNOWN
713485cc 3323 && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED)
6de9cd9a 3324 gfc_set_default_type (sym, 0, sym->ns);
f6288c24 3325 gfc_current_locus = old_loc;
6de9cd9a 3326
492792ed 3327 /* If the symbol has a (co)dimension attribute, the expression is a
edf1eac2 3328 variable. */
6de9cd9a 3329
492792ed 3330 if (sym->attr.dimension || sym->attr.codimension)
6de9cd9a 3331 {
524af0d6 3332 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
6de9cd9a
DN
3333 {
3334 m = MATCH_ERROR;
3335 break;
3336 }
3337
3338 e = gfc_get_expr ();
3339 e->symtree = symtree;
3340 e->expr_type = EXPR_VARIABLE;
713485cc 3341 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3342 break;
3343 }
3344
cd99c23c 3345 if (sym->ts.type == BT_CLASS && sym->attr.class_ok
492792ed
TB
3346 && (CLASS_DATA (sym)->attr.dimension
3347 || CLASS_DATA (sym)->attr.codimension))
c49ea23d 3348 {
524af0d6 3349 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
c49ea23d
PT
3350 {
3351 m = MATCH_ERROR;
3352 break;
3353 }
3354
3355 e = gfc_get_expr ();
3356 e->symtree = symtree;
3357 e->expr_type = EXPR_VARIABLE;
3358 m = gfc_match_varspec (e, 0, false, true);
3359 break;
3360 }
3361
6de9cd9a 3362 /* Name is not an array, so we peek to see if a '(' implies a
edf1eac2
SK
3363 function call or a substring reference. Otherwise the
3364 variable is just a scalar. */
6de9cd9a
DN
3365
3366 gfc_gobble_whitespace ();
8fc541d3 3367 if (gfc_peek_ascii_char () != '(')
6de9cd9a
DN
3368 {
3369 /* Assume a scalar variable */
3370 e = gfc_get_expr ();
3371 e->symtree = symtree;
3372 e->expr_type = EXPR_VARIABLE;
3373
524af0d6 3374 if (!gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, NULL))
6de9cd9a
DN
3375 {
3376 m = MATCH_ERROR;
3377 break;
3378 }
3379
8e1f752a 3380 /*FIXME:??? gfc_match_varspec does set this for us: */
6de9cd9a 3381 e->ts = sym->ts;
713485cc 3382 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3383 break;
3384 }
3385
d3fcc995
TS
3386 /* See if this is a function reference with a keyword argument
3387 as first argument. We do this because otherwise a spurious
3388 symbol would end up in the symbol table. */
3389
3390 old_loc = gfc_current_locus;
3391 m2 = gfc_match (" ( %n =", argname);
3392 gfc_current_locus = old_loc;
6de9cd9a
DN
3393
3394 e = gfc_get_expr ();
3395 e->symtree = symtree;
3396
d3fcc995 3397 if (m2 != MATCH_YES)
6de9cd9a 3398 {
5270c302 3399 /* Try to figure out whether we're dealing with a character type.
bf1b77dd 3400 We're peeking ahead here, because we don't want to call
5270c302
AL
3401 match_substring if we're dealing with an implicitly typed
3402 non-character variable. */
3403 implicit_char = false;
3404 if (sym->ts.type == BT_UNKNOWN)
3405 {
713485cc 3406 ts = gfc_get_default_type (sym->name, NULL);
5270c302
AL
3407 if (ts->type == BT_CHARACTER)
3408 implicit_char = true;
3409 }
3410
d3fcc995
TS
3411 /* See if this could possibly be a substring reference of a name
3412 that we're not sure is a variable yet. */
6de9cd9a 3413
5270c302 3414 if ((implicit_char || sym->ts.type == BT_CHARACTER)
38217d3e 3415 && match_substring (sym->ts.u.cl, 0, &e->ref, false) == MATCH_YES)
6de9cd9a 3416 {
6de9cd9a 3417
d3fcc995
TS
3418 e->expr_type = EXPR_VARIABLE;
3419
3420 if (sym->attr.flavor != FL_VARIABLE
bf1b77dd 3421 && !gfc_add_flavor (&sym->attr, FL_VARIABLE,
524af0d6 3422 sym->name, NULL))
d3fcc995
TS
3423 {
3424 m = MATCH_ERROR;
3425 break;
3426 }
3427
3428 if (sym->ts.type == BT_UNKNOWN
524af0d6 3429 && !gfc_set_default_type (sym, 1, NULL))
d3fcc995
TS
3430 {
3431 m = MATCH_ERROR;
3432 break;
3433 }
3434
3435 e->ts = sym->ts;
860c8f3b 3436 if (e->ref)
bc21d315 3437 e->ts.u.cl = NULL;
d3fcc995 3438 m = MATCH_YES;
6de9cd9a
DN
3439 break;
3440 }
6de9cd9a
DN
3441 }
3442
3443 /* Give up, assume we have a function. */
3444
08a6b8e0 3445 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
6de9cd9a
DN
3446 sym = symtree->n.sym;
3447 e->expr_type = EXPR_FUNCTION;
3448
3449 if (!sym->attr.function
524af0d6 3450 && !gfc_add_function (&sym->attr, sym->name, NULL))
6de9cd9a
DN
3451 {
3452 m = MATCH_ERROR;
3453 break;
3454 }
3455
3456 sym->result = sym;
3457
3458 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3459 if (m == MATCH_NO)
a4d9b221 3460 gfc_error ("Missing argument list in function %qs at %C", sym->name);
6de9cd9a
DN
3461
3462 if (m != MATCH_YES)
3463 {
3464 m = MATCH_ERROR;
3465 break;
3466 }
3467
3468 /* If our new function returns a character, array or structure
edf1eac2 3469 type, it might have subsequent references. */
6de9cd9a 3470
713485cc 3471 m = gfc_match_varspec (e, 0, false, true);
6de9cd9a
DN
3472 if (m == MATCH_NO)
3473 m = MATCH_YES;
3474
3475 break;
3476
3477 generic_function:
f6288c24
FR
3478 /* Look for symbol first; if not found, look for STRUCTURE type symbol
3479 specially. Creates a generic symbol for derived types. */
3480 gfc_find_sym_tree (name, NULL, 1, &symtree);
3481 if (!symtree)
3482 gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &symtree);
3483 if (!symtree || symtree->n.sym->attr.flavor != FL_STRUCT)
3484 gfc_get_sym_tree (name, NULL, &symtree, false); /* Can't fail */
6de9cd9a
DN
3485
3486 e = gfc_get_expr ();
3487 e->symtree = symtree;
3488 e->expr_type = EXPR_FUNCTION;
3489
f6288c24 3490 if (gfc_fl_struct (sym->attr.flavor))
c3f34952
TB
3491 {
3492 e->value.function.esym = sym;
3493 e->symtree->n.sym->attr.generic = 1;
3494 }
3495
6de9cd9a
DN
3496 m = gfc_match_actual_arglist (0, &e->value.function.actual);
3497 break;
3498
c0f0e35a
JD
3499 case FL_NAMELIST:
3500 m = MATCH_ERROR;
3501 break;
3502
6de9cd9a
DN
3503 default:
3504 gfc_error ("Symbol at %C is not appropriate for an expression");
3505 return MATCH_ERROR;
3506 }
3507
3508 if (m == MATCH_YES)
3509 {
3510 e->where = where;
3511 *result = e;
3512 }
3513 else
3514 gfc_free_expr (e);
3515
3516 return m;
3517}
3518
3519
df2fba9e 3520/* Match a variable, i.e. something that can be assigned to. This
6de9cd9a
DN
3521 starts as a symbol, can be a structure component or an array
3522 reference. It can be a function if the function doesn't have a
3523 separate RESULT variable. If the symbol has not been previously
30aabb86 3524 seen, we assume it is a variable.
6de9cd9a 3525
30aabb86
PT
3526 This function is called by two interface functions:
3527 gfc_match_variable, which has host_flag = 1, and
3528 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3529 match of the symbol to the local scope. */
3530
3531static match
edf1eac2 3532match_variable (gfc_expr **result, int equiv_flag, int host_flag)
6de9cd9a 3533{
f6288c24 3534 gfc_symbol *sym, *dt_sym;
6de9cd9a
DN
3535 gfc_symtree *st;
3536 gfc_expr *expr;
f6288c24 3537 locus where, old_loc;
6de9cd9a
DN
3538 match m;
3539
fd2aa7ad
PT
3540 /* Since nothing has any business being an lvalue in a module
3541 specification block, an interface block or a contains section,
3542 we force the changed_symbols mechanism to work by setting
3543 host_flag to 0. This prevents valid symbols that have the name
3544 of keywords, such as 'end', being turned into variables by
df2fba9e 3545 failed matching to assignments for, e.g., END INTERFACE. */
fd2aa7ad 3546 if (gfc_current_state () == COMP_MODULE
4668d6f9 3547 || gfc_current_state () == COMP_SUBMODULE
fd2aa7ad
PT
3548 || gfc_current_state () == COMP_INTERFACE
3549 || gfc_current_state () == COMP_CONTAINS)
3550 host_flag = 0;
3551
618f4f46 3552 where = gfc_current_locus;
30aabb86 3553 m = gfc_match_sym_tree (&st, host_flag);
6de9cd9a
DN
3554 if (m != MATCH_YES)
3555 return m;
6de9cd9a
DN
3556
3557 sym = st->n.sym;
9a3db5a3
PT
3558
3559 /* If this is an implicit do loop index and implicitly typed,
3560 it should not be host associated. */
3561 m = check_for_implicit_index (&st, &sym);
3562 if (m != MATCH_YES)
3563 return m;
3564
3565 sym->attr.implied_index = 0;
3566
6de9cd9a 3567 gfc_set_sym_referenced (sym);
f6288c24
FR
3568
3569 /* STRUCTUREs may share names with variables, but derived types may not. */
3570 if (sym->attr.flavor == FL_PROCEDURE && sym->generic
3571 && (dt_sym = gfc_find_dt_in_generic (sym)))
3572 {
3573 if (dt_sym->attr.flavor == FL_DERIVED)
2f029c08 3574 gfc_error ("Derived type %qs cannot be used as a variable at %C",
f6288c24
FR
3575 sym->name);
3576 return MATCH_ERROR;
3577 }
3578
6de9cd9a
DN
3579 switch (sym->attr.flavor)
3580 {
3581 case FL_VARIABLE:
8c91ab34 3582 /* Everything is alright. */
6de9cd9a
DN
3583 break;
3584
3585 case FL_UNKNOWN:
d7e2fcd0
TB
3586 {
3587 sym_flavor flavor = FL_UNKNOWN;
3588
3589 gfc_gobble_whitespace ();
3590
3591 if (sym->attr.external || sym->attr.procedure
3592 || sym->attr.function || sym->attr.subroutine)
3593 flavor = FL_PROCEDURE;
b9332b09
PT
3594
3595 /* If it is not a procedure, is not typed and is host associated,
3596 we cannot give it a flavor yet. */
3597 else if (sym->ns == gfc_current_ns->parent
3598 && sym->ts.type == BT_UNKNOWN)
3599 break;
3600
3601 /* These are definitive indicators that this is a variable. */
8fc541d3 3602 else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN
d7e2fcd0
TB
3603 || sym->attr.pointer || sym->as != NULL)
3604 flavor = FL_VARIABLE;
3605
3606 if (flavor != FL_UNKNOWN
524af0d6 3607 && !gfc_add_flavor (&sym->attr, flavor, sym->name, NULL))
d7e2fcd0
TB
3608 return MATCH_ERROR;
3609 }
6de9cd9a
DN
3610 break;
3611
5056a350
SK
3612 case FL_PARAMETER:
3613 if (equiv_flag)
8c91ab34
DK
3614 {
3615 gfc_error ("Named constant at %C in an EQUIVALENCE");
3616 return MATCH_ERROR;
3617 }
3618 /* Otherwise this is checked for and an error given in the
3619 variable definition context checks. */
5056a350
SK
3620 break;
3621
6de9cd9a 3622 case FL_PROCEDURE:
01d2a7d7
DF
3623 /* Check for a nonrecursive function result variable. */
3624 if (sym->attr.function
8c91ab34
DK
3625 && !sym->attr.external
3626 && sym->result == sym
3627 && (gfc_is_function_return_value (sym, gfc_current_ns)
3628 || (sym->attr.entry
3629 && sym->ns == gfc_current_ns)
3630 || (sym->attr.entry
3631 && sym->ns == gfc_current_ns->parent)))
6de9cd9a 3632 {
6de9cd9a
DN
3633 /* If a function result is a derived type, then the derived
3634 type may still have to be resolved. */
3635
3636 if (sym->ts.type == BT_DERIVED
bc21d315 3637 && gfc_use_derived (sym->ts.u.derived) == NULL)
6de9cd9a 3638 return MATCH_ERROR;
6de9cd9a
DN
3639 break;
3640 }
3641
3070bab4 3642 if (sym->attr.proc_pointer
524af0d6 3643 || replace_hidden_procptr_result (&sym, &st))
8fb74da4
JW
3644 break;
3645
6de9cd9a 3646 /* Fall through to error */
81fea426 3647 gcc_fallthrough ();
6de9cd9a
DN
3648
3649 default:
a4d9b221 3650 gfc_error ("%qs at %C is not a variable", sym->name);
6de9cd9a
DN
3651 return MATCH_ERROR;
3652 }
3653
0dd973dd
PB
3654 /* Special case for derived type variables that get their types
3655 via an IMPLICIT statement. This can't wait for the
3656 resolution phase. */
3657
3658 {
3659 gfc_namespace * implicit_ns;
3660
3661 if (gfc_current_ns->proc_name == sym)
3662 implicit_ns = gfc_current_ns;
3663 else
3664 implicit_ns = sym->ns;
f6288c24
FR
3665
3666 old_loc = gfc_current_locus;
3667 if (gfc_match_member_sep (sym) == MATCH_YES
0dd973dd 3668 && sym->ts.type == BT_UNKNOWN
713485cc 3669 && gfc_get_default_type (sym->name, implicit_ns)->type == BT_DERIVED)
0dd973dd 3670 gfc_set_default_type (sym, 0, implicit_ns);
f6288c24 3671 gfc_current_locus = old_loc;
0dd973dd
PB
3672 }
3673
6de9cd9a
DN
3674 expr = gfc_get_expr ();
3675
3676 expr->expr_type = EXPR_VARIABLE;
3677 expr->symtree = st;
3678 expr->ts = sym->ts;
3679 expr->where = where;
3680
3681 /* Now see if we have to do more. */
713485cc 3682 m = gfc_match_varspec (expr, equiv_flag, false, false);
6de9cd9a
DN
3683 if (m != MATCH_YES)
3684 {
3685 gfc_free_expr (expr);
3686 return m;
3687 }
3688
3689 *result = expr;
3690 return MATCH_YES;
3691}
30aabb86 3692
edf1eac2 3693
30aabb86 3694match
edf1eac2 3695gfc_match_variable (gfc_expr **result, int equiv_flag)
30aabb86
PT
3696{
3697 return match_variable (result, equiv_flag, 1);
3698}
3699
edf1eac2 3700
30aabb86 3701match
edf1eac2 3702gfc_match_equiv_variable (gfc_expr **result)
30aabb86
PT
3703{
3704 return match_variable (result, 1, 0);
3705}
3706