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