1 /* Primary expression subroutines
2 Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
29 #include "constructor.h"
31 int matching_actual_arglist
= 0;
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. */
38 match_kind_param (int *kind
)
40 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
45 m
= gfc_match_small_literal_int (kind
, NULL
);
49 m
= gfc_match_name (name
);
53 if (gfc_find_symbol (name
, NULL
, 1, &sym
))
59 if (sym
->attr
.flavor
!= FL_PARAMETER
)
62 if (sym
->value
== NULL
)
65 p
= gfc_extract_int (sym
->value
, kind
);
69 gfc_set_sym_referenced (sym
);
78 /* Get a trailing kind-specification for non-character variables.
80 the integer kind value or:
81 -1 if an error was generated
82 -2 if no kind was found */
90 if (gfc_match_char ('_') != MATCH_YES
)
93 m
= match_kind_param (&kind
);
95 gfc_error ("Missing kind-parameter at %C");
97 return (m
== MATCH_YES
) ? kind
: -1;
101 /* Given a character and a radix, see if the character is a valid
102 digit in that radix. */
105 gfc_check_digit (char c
, int radix
)
112 r
= ('0' <= c
&& c
<= '1');
116 r
= ('0' <= c
&& c
<= '7');
120 r
= ('0' <= c
&& c
<= '9');
128 gfc_internal_error ("gfc_check_digit(): bad radix");
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. */
141 match_digits (int signflag
, int radix
, char *buffer
)
148 c
= gfc_next_ascii_char ();
150 if (signflag
&& (c
== '+' || c
== '-'))
154 gfc_gobble_whitespace ();
155 c
= gfc_next_ascii_char ();
159 if (!gfc_check_digit (c
, radix
))
168 old_loc
= gfc_current_locus
;
169 c
= gfc_next_ascii_char ();
171 if (!gfc_check_digit (c
, radix
))
179 gfc_current_locus
= old_loc
;
185 /* Match an integer (digit string and optional kind).
186 A sign will be accepted if signflag is set. */
189 match_integer_constant (gfc_expr
**result
, int signflag
)
196 old_loc
= gfc_current_locus
;
197 gfc_gobble_whitespace ();
199 length
= match_digits (signflag
, 10, NULL
);
200 gfc_current_locus
= old_loc
;
204 buffer
= (char *) alloca (length
+ 1);
205 memset (buffer
, '\0', length
+ 1);
207 gfc_gobble_whitespace ();
209 match_digits (signflag
, 10, buffer
);
213 kind
= gfc_default_integer_kind
;
217 if (gfc_validate_kind (BT_INTEGER
, kind
, true) < 0)
219 gfc_error ("Integer kind %d at %C not available", kind
);
223 e
= gfc_convert_integer (buffer
, kind
, 10, &gfc_current_locus
);
225 if (gfc_range_check (e
) != ARITH_OK
)
227 gfc_error ("Integer too big for its kind at %C. This check can be "
228 "disabled with the option -fno-range-check");
239 /* Match a Hollerith constant. */
242 match_hollerith_constant (gfc_expr
**result
)
250 old_loc
= gfc_current_locus
;
251 gfc_gobble_whitespace ();
253 if (match_integer_constant (&e
, 0) == MATCH_YES
254 && gfc_match_char ('h') == MATCH_YES
)
256 if (gfc_notify_std (GFC_STD_LEGACY
, "Extension: Hollerith constant "
260 msg
= gfc_extract_int (e
, &num
);
268 gfc_error ("Invalid Hollerith constant: %L must contain at least "
269 "one character", &old_loc
);
272 if (e
->ts
.kind
!= gfc_default_integer_kind
)
274 gfc_error ("Invalid Hollerith constant: Integer kind at %L "
275 "should be default", &old_loc
);
281 e
= gfc_get_constant_expr (BT_HOLLERITH
, gfc_default_character_kind
,
284 /* Calculate padding needed to fit default integer memory. */
285 pad
= gfc_default_integer_kind
- (num
% gfc_default_integer_kind
);
287 e
->representation
.string
= XCNEWVEC (char, num
+ pad
+ 1);
289 for (i
= 0; i
< num
; i
++)
291 gfc_char_t c
= gfc_next_char_literal (INSTRING_WARN
);
292 if (! gfc_wide_fits_in_byte (c
))
294 gfc_error ("Invalid Hollerith constant at %L contains a "
295 "wide character", &old_loc
);
299 e
->representation
.string
[i
] = (unsigned char) c
;
302 /* Now pad with blanks and end with a null char. */
303 for (i
= 0; i
< pad
; i
++)
304 e
->representation
.string
[num
+ i
] = ' ';
306 e
->representation
.string
[num
+ i
] = '\0';
307 e
->representation
.length
= num
+ pad
;
316 gfc_current_locus
= old_loc
;
325 /* Match a binary, octal or hexadecimal constant that can be found in
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. */
332 match_boz_constant (gfc_expr
**result
)
334 int radix
, length
, x_hex
, kind
;
335 locus old_loc
, start_loc
;
336 char *buffer
, post
, delim
;
339 start_loc
= old_loc
= gfc_current_locus
;
340 gfc_gobble_whitespace ();
343 switch (post
= gfc_next_ascii_char ())
365 radix
= 16; /* Set to accept any valid digit string. */
371 /* No whitespace allowed here. */
374 delim
= gfc_next_ascii_char ();
376 if (delim
!= '\'' && delim
!= '\"')
380 && (gfc_notify_std (GFC_STD_GNU
, "Extension: Hexadecimal "
381 "constant at %C uses non-standard syntax")
385 old_loc
= gfc_current_locus
;
387 length
= match_digits (0, radix
, NULL
);
390 gfc_error ("Empty set of digits in BOZ constant at %C");
394 if (gfc_next_ascii_char () != delim
)
396 gfc_error ("Illegal character in BOZ constant at %C");
402 switch (gfc_next_ascii_char ())
419 if (gfc_notify_std (GFC_STD_GNU
, "Extension: BOZ constant "
420 "at %C uses non-standard postfix syntax")
425 gfc_current_locus
= old_loc
;
427 buffer
= (char *) alloca (length
+ 1);
428 memset (buffer
, '\0', length
+ 1);
430 match_digits (0, radix
, buffer
);
431 gfc_next_ascii_char (); /* Eat delimiter. */
433 gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */
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." */
442 kind
= gfc_max_integer_kind
;
443 e
= gfc_convert_integer (buffer
, kind
, radix
, &gfc_current_locus
);
445 /* Mark as boz variable. */
448 if (gfc_range_check (e
) != ARITH_OK
)
450 gfc_error ("Integer too big for integer kind %i at %C", kind
);
455 if (!gfc_in_match_data ()
456 && (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: BOZ used outside a DATA "
465 gfc_current_locus
= start_loc
;
470 /* Match a real constant of some sort. Allow a signed constant if signflag
474 match_real_constant (gfc_expr
**result
, int signflag
)
476 int kind
, count
, seen_dp
, seen_digits
;
477 locus old_loc
, temp_loc
;
478 char *p
, *buffer
, c
, exp_char
;
482 old_loc
= gfc_current_locus
;
483 gfc_gobble_whitespace ();
493 c
= gfc_next_ascii_char ();
494 if (signflag
&& (c
== '+' || c
== '-'))
499 gfc_gobble_whitespace ();
500 c
= gfc_next_ascii_char ();
503 /* Scan significand. */
504 for (;; c
= gfc_next_ascii_char (), count
++)
511 /* Check to see if "." goes with a following operator like
513 temp_loc
= gfc_current_locus
;
514 c
= gfc_next_ascii_char ();
516 if (c
== 'e' || c
== 'd' || c
== 'q')
518 c
= gfc_next_ascii_char ();
520 goto done
; /* Operator named .e. or .d. */
524 goto done
; /* Distinguish 1.e9 from 1.eq.2 */
526 gfc_current_locus
= temp_loc
;
540 if (!seen_digits
|| (c
!= 'e' && c
!= 'd' && c
!= 'q'))
547 if (gfc_notify_std (GFC_STD_GNU
, "Extension: exponent-letter 'q' in "
548 "real-literal-constant at %C") == FAILURE
)
550 else if (gfc_option
.warn_real_q_constant
)
551 gfc_warning("Extension: exponent-letter 'q' in real-literal-constant "
556 c
= gfc_next_ascii_char ();
559 if (c
== '+' || c
== '-')
560 { /* optional sign */
561 c
= gfc_next_ascii_char ();
567 gfc_error ("Missing exponent in real number at %C");
573 c
= gfc_next_ascii_char ();
578 /* Check that we have a numeric constant. */
579 if (!seen_digits
|| (!seen_dp
&& exp_char
== ' '))
581 gfc_current_locus
= old_loc
;
585 /* Convert the number. */
586 gfc_current_locus
= old_loc
;
587 gfc_gobble_whitespace ();
589 buffer
= (char *) alloca (count
+ 1);
590 memset (buffer
, '\0', count
+ 1);
593 c
= gfc_next_ascii_char ();
594 if (c
== '+' || c
== '-')
596 gfc_gobble_whitespace ();
597 c
= gfc_next_ascii_char ();
600 /* Hack for mpfr_set_str(). */
603 if (c
== 'd' || c
== 'q')
611 c
= gfc_next_ascii_char ();
623 gfc_error ("Real number at %C has a 'd' exponent and an explicit "
627 kind
= gfc_default_double_kind
;
633 gfc_error ("Real number at %C has a 'q' exponent and an explicit "
638 /* The maximum possible real kind type parameter is 16. First, try
639 that for the kind, then fallback to trying kind=10 (Intel 80 bit)
640 extended precision. If neither value works, just given up. */
642 if (gfc_validate_kind (BT_REAL
, kind
, true) < 0)
645 if (gfc_validate_kind (BT_REAL
, kind
, true) < 0)
647 gfc_error ("Invalid exponent-letter 'q' in "
648 "real-literal-constant at %C");
656 kind
= gfc_default_real_kind
;
658 if (gfc_validate_kind (BT_REAL
, kind
, true) < 0)
660 gfc_error ("Invalid real kind %d at %C", kind
);
665 e
= gfc_convert_real (buffer
, kind
, &gfc_current_locus
);
667 mpfr_neg (e
->value
.real
, e
->value
.real
, GFC_RND_MODE
);
669 switch (gfc_range_check (e
))
674 gfc_error ("Real constant overflows its kind at %C");
677 case ARITH_UNDERFLOW
:
678 if (gfc_option
.warn_underflow
)
679 gfc_warning ("Real constant underflows its kind at %C");
680 mpfr_set_ui (e
->value
.real
, 0, GFC_RND_MODE
);
684 gfc_internal_error ("gfc_range_check() returned bad value");
696 /* Match a substring reference. */
699 match_substring (gfc_charlen
*cl
, int init
, gfc_ref
**result
)
701 gfc_expr
*start
, *end
;
709 old_loc
= gfc_current_locus
;
711 m
= gfc_match_char ('(');
715 if (gfc_match_char (':') != MATCH_YES
)
718 m
= gfc_match_init_expr (&start
);
720 m
= gfc_match_expr (&start
);
728 m
= gfc_match_char (':');
733 if (gfc_match_char (')') != MATCH_YES
)
736 m
= gfc_match_init_expr (&end
);
738 m
= gfc_match_expr (&end
);
742 if (m
== MATCH_ERROR
)
745 m
= gfc_match_char (')');
750 /* Optimize away the (:) reference. */
751 if (start
== NULL
&& end
== NULL
)
755 ref
= gfc_get_ref ();
757 ref
->type
= REF_SUBSTRING
;
759 start
= gfc_get_int_expr (gfc_default_integer_kind
, NULL
, 1);
760 ref
->u
.ss
.start
= start
;
761 if (end
== NULL
&& cl
)
762 end
= gfc_copy_expr (cl
->length
);
764 ref
->u
.ss
.length
= cl
;
771 gfc_error ("Syntax error in SUBSTRING specification at %C");
775 gfc_free_expr (start
);
778 gfc_current_locus
= old_loc
;
783 /* Reads the next character of a string constant, taking care to
784 return doubled delimiters on the input as a single instance of
787 Special return values for "ret" argument are:
788 -1 End of the string, as determined by the delimiter
789 -2 Unterminated string detected
791 Backslash codes are also expanded at this time. */
794 next_string_char (gfc_char_t delimiter
, int *ret
)
799 c
= gfc_next_char_literal (INSTRING_WARN
);
808 if (gfc_option
.flag_backslash
&& c
== '\\')
810 old_locus
= gfc_current_locus
;
812 if (gfc_match_special_char (&c
) == MATCH_NO
)
813 gfc_current_locus
= old_locus
;
815 if (!(gfc_option
.allow_std
& GFC_STD_GNU
) && !inhibit_warnings
)
816 gfc_warning ("Extension: backslash character at %C");
822 old_locus
= gfc_current_locus
;
823 c
= gfc_next_char_literal (NONSTRING
);
827 gfc_current_locus
= old_locus
;
834 /* Special case of gfc_match_name() that matches a parameter kind name
835 before a string constant. This takes case of the weird but legal
840 where kind____ is a parameter. gfc_match_name() will happily slurp
841 up all the underscores, which leads to problems. If we return
842 MATCH_YES, the parse pointer points to the final underscore, which
843 is not part of the name. We never return MATCH_ERROR-- errors in
844 the name will be detected later. */
847 match_charkind_name (char *name
)
853 gfc_gobble_whitespace ();
854 c
= gfc_next_ascii_char ();
863 old_loc
= gfc_current_locus
;
864 c
= gfc_next_ascii_char ();
868 peek
= gfc_peek_ascii_char ();
870 if (peek
== '\'' || peek
== '\"')
872 gfc_current_locus
= old_loc
;
880 && (c
!= '$' || !gfc_option
.flag_dollar_ok
))
884 if (++len
> GFC_MAX_SYMBOL_LEN
)
892 /* See if the current input matches a character constant. Lots of
893 contortions have to be done to match the kind parameter which comes
894 before the actual string. The main consideration is that we don't
895 want to error out too quickly. For example, we don't actually do
896 any validation of the kinds until we have actually seen a legal
897 delimiter. Using match_kind_param() generates errors too quickly. */
900 match_string_constant (gfc_expr
**result
)
902 char name
[GFC_MAX_SYMBOL_LEN
+ 1], peek
;
903 int i
, kind
, length
, warn_ampersand
, ret
;
904 locus old_locus
, start_locus
;
909 gfc_char_t c
, delimiter
, *p
;
911 old_locus
= gfc_current_locus
;
913 gfc_gobble_whitespace ();
915 c
= gfc_next_char ();
916 if (c
== '\'' || c
== '"')
918 kind
= gfc_default_character_kind
;
919 start_locus
= gfc_current_locus
;
923 if (gfc_wide_is_digit (c
))
927 while (gfc_wide_is_digit (c
))
929 kind
= kind
* 10 + c
- '0';
932 c
= gfc_next_char ();
938 gfc_current_locus
= old_locus
;
940 m
= match_charkind_name (name
);
944 if (gfc_find_symbol (name
, NULL
, 1, &sym
)
946 || sym
->attr
.flavor
!= FL_PARAMETER
)
950 c
= gfc_next_char ();
955 gfc_gobble_whitespace ();
956 c
= gfc_next_char ();
962 gfc_gobble_whitespace ();
964 c
= gfc_next_char ();
965 if (c
!= '\'' && c
!= '"')
968 start_locus
= gfc_current_locus
;
972 q
= gfc_extract_int (sym
->value
, &kind
);
978 gfc_set_sym_referenced (sym
);
981 if (gfc_validate_kind (BT_CHARACTER
, kind
, true) < 0)
983 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind
);
988 /* Scan the string into a block of memory by first figuring out how
989 long it is, allocating the structure, then re-reading it. This
990 isn't particularly efficient, but string constants aren't that
991 common in most code. TODO: Use obstacks? */
998 c
= next_string_char (delimiter
, &ret
);
1003 gfc_current_locus
= start_locus
;
1004 gfc_error ("Unterminated character constant beginning at %C");
1011 /* Peek at the next character to see if it is a b, o, z, or x for the
1012 postfixed BOZ literal constants. */
1013 peek
= gfc_peek_ascii_char ();
1014 if (peek
== 'b' || peek
== 'o' || peek
=='z' || peek
== 'x')
1017 e
= gfc_get_character_expr (kind
, &start_locus
, NULL
, length
);
1019 gfc_current_locus
= start_locus
;
1021 /* We disable the warning for the following loop as the warning has already
1022 been printed in the loop above. */
1023 warn_ampersand
= gfc_option
.warn_ampersand
;
1024 gfc_option
.warn_ampersand
= 0;
1026 p
= e
->value
.character
.string
;
1027 for (i
= 0; i
< length
; i
++)
1029 c
= next_string_char (delimiter
, &ret
);
1031 if (!gfc_check_character_range (c
, kind
))
1033 gfc_error ("Character '%s' in string at %C is not representable "
1034 "in character kind %d", gfc_print_wide_char (c
), kind
);
1041 *p
= '\0'; /* TODO: C-style string is for development/debug purposes. */
1042 gfc_option
.warn_ampersand
= warn_ampersand
;
1044 next_string_char (delimiter
, &ret
);
1046 gfc_internal_error ("match_string_constant(): Delimiter not found");
1048 if (match_substring (NULL
, 0, &e
->ref
) != MATCH_NO
)
1049 e
->expr_type
= EXPR_SUBSTRING
;
1056 gfc_current_locus
= old_locus
;
1061 /* Match a .true. or .false. Returns 1 if a .true. was found,
1062 0 if a .false. was found, and -1 otherwise. */
1064 match_logical_constant_string (void)
1066 locus orig_loc
= gfc_current_locus
;
1068 gfc_gobble_whitespace ();
1069 if (gfc_next_ascii_char () == '.')
1071 char ch
= gfc_next_ascii_char ();
1074 if (gfc_next_ascii_char () == 'a'
1075 && gfc_next_ascii_char () == 'l'
1076 && gfc_next_ascii_char () == 's'
1077 && gfc_next_ascii_char () == 'e'
1078 && gfc_next_ascii_char () == '.')
1079 /* Matched ".false.". */
1084 if (gfc_next_ascii_char () == 'r'
1085 && gfc_next_ascii_char () == 'u'
1086 && gfc_next_ascii_char () == 'e'
1087 && gfc_next_ascii_char () == '.')
1088 /* Matched ".true.". */
1092 gfc_current_locus
= orig_loc
;
1096 /* Match a .true. or .false. */
1099 match_logical_constant (gfc_expr
**result
)
1104 i
= match_logical_constant_string ();
1112 kind
= gfc_default_logical_kind
;
1114 if (gfc_validate_kind (BT_LOGICAL
, kind
, true) < 0)
1116 gfc_error ("Bad kind for logical constant at %C");
1120 e
= gfc_get_logical_expr (kind
, &gfc_current_locus
, i
);
1127 /* Match a real or imaginary part of a complex constant that is a
1128 symbolic constant. */
1131 match_sym_complex_part (gfc_expr
**result
)
1133 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
1138 m
= gfc_match_name (name
);
1142 if (gfc_find_symbol (name
, NULL
, 1, &sym
) || sym
== NULL
)
1145 if (sym
->attr
.flavor
!= FL_PARAMETER
)
1147 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1151 if (!gfc_numeric_ts (&sym
->value
->ts
))
1153 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1157 if (sym
->value
->rank
!= 0)
1159 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1163 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: PARAMETER symbol in "
1164 "complex constant at %C") == FAILURE
)
1167 switch (sym
->value
->ts
.type
)
1170 e
= gfc_copy_expr (sym
->value
);
1174 e
= gfc_complex2real (sym
->value
, sym
->value
->ts
.kind
);
1180 e
= gfc_int2real (sym
->value
, gfc_default_real_kind
);
1186 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1189 *result
= e
; /* e is a scalar, real, constant expression. */
1193 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1198 /* Match a real or imaginary part of a complex number. */
1201 match_complex_part (gfc_expr
**result
)
1205 m
= match_sym_complex_part (result
);
1209 m
= match_real_constant (result
, 1);
1213 return match_integer_constant (result
, 1);
1217 /* Try to match a complex constant. */
1220 match_complex_constant (gfc_expr
**result
)
1222 gfc_expr
*e
, *real
, *imag
;
1223 gfc_error_buf old_error
;
1224 gfc_typespec target
;
1229 old_loc
= gfc_current_locus
;
1230 real
= imag
= e
= NULL
;
1232 m
= gfc_match_char ('(');
1236 gfc_push_error (&old_error
);
1238 m
= match_complex_part (&real
);
1241 gfc_free_error (&old_error
);
1245 if (gfc_match_char (',') == MATCH_NO
)
1247 gfc_pop_error (&old_error
);
1252 /* If m is error, then something was wrong with the real part and we
1253 assume we have a complex constant because we've seen the ','. An
1254 ambiguous case here is the start of an iterator list of some
1255 sort. These sort of lists are matched prior to coming here. */
1257 if (m
== MATCH_ERROR
)
1259 gfc_free_error (&old_error
);
1262 gfc_pop_error (&old_error
);
1264 m
= match_complex_part (&imag
);
1267 if (m
== MATCH_ERROR
)
1270 m
= gfc_match_char (')');
1273 /* Give the matcher for implied do-loops a chance to run. This
1274 yields a much saner error message for (/ (i, 4=i, 6) /). */
1275 if (gfc_peek_ascii_char () == '=')
1284 if (m
== MATCH_ERROR
)
1287 /* Decide on the kind of this complex number. */
1288 if (real
->ts
.type
== BT_REAL
)
1290 if (imag
->ts
.type
== BT_REAL
)
1291 kind
= gfc_kind_max (real
, imag
);
1293 kind
= real
->ts
.kind
;
1297 if (imag
->ts
.type
== BT_REAL
)
1298 kind
= imag
->ts
.kind
;
1300 kind
= gfc_default_real_kind
;
1302 gfc_clear_ts (&target
);
1303 target
.type
= BT_REAL
;
1306 if (real
->ts
.type
!= BT_REAL
|| kind
!= real
->ts
.kind
)
1307 gfc_convert_type (real
, &target
, 2);
1308 if (imag
->ts
.type
!= BT_REAL
|| kind
!= imag
->ts
.kind
)
1309 gfc_convert_type (imag
, &target
, 2);
1311 e
= gfc_convert_complex (real
, imag
, kind
);
1312 e
->where
= gfc_current_locus
;
1314 gfc_free_expr (real
);
1315 gfc_free_expr (imag
);
1321 gfc_error ("Syntax error in COMPLEX constant at %C");
1326 gfc_free_expr (real
);
1327 gfc_free_expr (imag
);
1328 gfc_current_locus
= old_loc
;
1334 /* Match constants in any of several forms. Returns nonzero for a
1335 match, zero for no match. */
1338 gfc_match_literal_constant (gfc_expr
**result
, int signflag
)
1342 m
= match_complex_constant (result
);
1346 m
= match_string_constant (result
);
1350 m
= match_boz_constant (result
);
1354 m
= match_real_constant (result
, signflag
);
1358 m
= match_hollerith_constant (result
);
1362 m
= match_integer_constant (result
, signflag
);
1366 m
= match_logical_constant (result
);
1374 /* This checks if a symbol is the return value of an encompassing function.
1375 Function nesting can be maximally two levels deep, but we may have
1376 additional local namespaces like BLOCK etc. */
1379 gfc_is_function_return_value (gfc_symbol
*sym
, gfc_namespace
*ns
)
1381 if (!sym
->attr
.function
|| (sym
->result
!= sym
))
1385 if (ns
->proc_name
== sym
)
1393 /* Match a single actual argument value. An actual argument is
1394 usually an expression, but can also be a procedure name. If the
1395 argument is a single name, it is not always possible to tell
1396 whether the name is a dummy procedure or not. We treat these cases
1397 by creating an argument that looks like a dummy procedure and
1398 fixing things later during resolution. */
1401 match_actual_arg (gfc_expr
**result
)
1403 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
1404 gfc_symtree
*symtree
;
1409 gfc_gobble_whitespace ();
1410 where
= gfc_current_locus
;
1412 switch (gfc_match_name (name
))
1421 w
= gfc_current_locus
;
1422 gfc_gobble_whitespace ();
1423 c
= gfc_next_ascii_char ();
1424 gfc_current_locus
= w
;
1426 if (c
!= ',' && c
!= ')')
1429 if (gfc_find_sym_tree (name
, NULL
, 1, &symtree
))
1431 /* Handle error elsewhere. */
1433 /* Eliminate a couple of common cases where we know we don't
1434 have a function argument. */
1435 if (symtree
== NULL
)
1437 gfc_get_sym_tree (name
, NULL
, &symtree
, false);
1438 gfc_set_sym_referenced (symtree
->n
.sym
);
1444 sym
= symtree
->n
.sym
;
1445 gfc_set_sym_referenced (sym
);
1446 if (sym
->attr
.flavor
!= FL_PROCEDURE
1447 && sym
->attr
.flavor
!= FL_UNKNOWN
)
1450 if (sym
->attr
.in_common
&& !sym
->attr
.proc_pointer
)
1452 gfc_add_flavor (&sym
->attr
, FL_VARIABLE
, sym
->name
,
1457 /* If the symbol is a function with itself as the result and
1458 is being defined, then we have a variable. */
1459 if (sym
->attr
.function
&& sym
->result
== sym
)
1461 if (gfc_is_function_return_value (sym
, gfc_current_ns
))
1465 && (sym
->ns
== gfc_current_ns
1466 || sym
->ns
== gfc_current_ns
->parent
))
1468 gfc_entry_list
*el
= NULL
;
1470 for (el
= sym
->ns
->entries
; el
; el
= el
->next
)
1480 e
= gfc_get_expr (); /* Leave it unknown for now */
1481 e
->symtree
= symtree
;
1482 e
->expr_type
= EXPR_VARIABLE
;
1483 e
->ts
.type
= BT_PROCEDURE
;
1490 gfc_current_locus
= where
;
1491 return gfc_match_expr (result
);
1495 /* Match a keyword argument. */
1498 match_keyword_arg (gfc_actual_arglist
*actual
, gfc_actual_arglist
*base
)
1500 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
1501 gfc_actual_arglist
*a
;
1505 name_locus
= gfc_current_locus
;
1506 m
= gfc_match_name (name
);
1510 if (gfc_match_char ('=') != MATCH_YES
)
1516 m
= match_actual_arg (&actual
->expr
);
1520 /* Make sure this name has not appeared yet. */
1522 if (name
[0] != '\0')
1524 for (a
= base
; a
; a
= a
->next
)
1525 if (a
->name
!= NULL
&& strcmp (a
->name
, name
) == 0)
1527 gfc_error ("Keyword '%s' at %C has already appeared in the "
1528 "current argument list", name
);
1533 actual
->name
= gfc_get_string (name
);
1537 gfc_current_locus
= name_locus
;
1542 /* Match an argument list function, such as %VAL. */
1545 match_arg_list_function (gfc_actual_arglist
*result
)
1547 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
1551 old_locus
= gfc_current_locus
;
1553 if (gfc_match_char ('%') != MATCH_YES
)
1559 m
= gfc_match ("%n (", name
);
1563 if (name
[0] != '\0')
1568 if (strncmp (name
, "loc", 3) == 0)
1570 result
->name
= "%LOC";
1574 if (strncmp (name
, "ref", 3) == 0)
1576 result
->name
= "%REF";
1580 if (strncmp (name
, "val", 3) == 0)
1582 result
->name
= "%VAL";
1591 if (gfc_notify_std (GFC_STD_GNU
, "Extension: argument list "
1592 "function at %C") == FAILURE
)
1598 m
= match_actual_arg (&result
->expr
);
1602 if (gfc_match_char (')') != MATCH_YES
)
1611 gfc_current_locus
= old_locus
;
1616 /* Matches an actual argument list of a function or subroutine, from
1617 the opening parenthesis to the closing parenthesis. The argument
1618 list is assumed to allow keyword arguments because we don't know if
1619 the symbol associated with the procedure has an implicit interface
1620 or not. We make sure keywords are unique. If sub_flag is set,
1621 we're matching the argument list of a subroutine. */
1624 gfc_match_actual_arglist (int sub_flag
, gfc_actual_arglist
**argp
)
1626 gfc_actual_arglist
*head
, *tail
;
1628 gfc_st_label
*label
;
1632 *argp
= tail
= NULL
;
1633 old_loc
= gfc_current_locus
;
1637 if (gfc_match_char ('(') == MATCH_NO
)
1638 return (sub_flag
) ? MATCH_YES
: MATCH_NO
;
1640 if (gfc_match_char (')') == MATCH_YES
)
1644 matching_actual_arglist
++;
1649 head
= tail
= gfc_get_actual_arglist ();
1652 tail
->next
= gfc_get_actual_arglist ();
1656 if (sub_flag
&& gfc_match_char ('*') == MATCH_YES
)
1658 m
= gfc_match_st_label (&label
);
1660 gfc_error ("Expected alternate return label at %C");
1664 tail
->label
= label
;
1668 /* After the first keyword argument is seen, the following
1669 arguments must also have keywords. */
1672 m
= match_keyword_arg (tail
, head
);
1674 if (m
== MATCH_ERROR
)
1678 gfc_error ("Missing keyword name in actual argument list at %C");
1685 /* Try an argument list function, like %VAL. */
1686 m
= match_arg_list_function (tail
);
1687 if (m
== MATCH_ERROR
)
1690 /* See if we have the first keyword argument. */
1693 m
= match_keyword_arg (tail
, head
);
1696 if (m
== MATCH_ERROR
)
1702 /* Try for a non-keyword argument. */
1703 m
= match_actual_arg (&tail
->expr
);
1704 if (m
== MATCH_ERROR
)
1713 if (gfc_match_char (')') == MATCH_YES
)
1715 if (gfc_match_char (',') != MATCH_YES
)
1720 matching_actual_arglist
--;
1724 gfc_error ("Syntax error in argument list at %C");
1727 gfc_free_actual_arglist (head
);
1728 gfc_current_locus
= old_loc
;
1729 matching_actual_arglist
--;
1734 /* Used by gfc_match_varspec() to extend the reference list by one
1738 extend_ref (gfc_expr
*primary
, gfc_ref
*tail
)
1740 if (primary
->ref
== NULL
)
1741 primary
->ref
= tail
= gfc_get_ref ();
1745 gfc_internal_error ("extend_ref(): Bad tail");
1746 tail
->next
= gfc_get_ref ();
1754 /* Match any additional specifications associated with the current
1755 variable like member references or substrings. If equiv_flag is
1756 set we only match stuff that is allowed inside an EQUIVALENCE
1757 statement. sub_flag tells whether we expect a type-bound procedure found
1758 to be a subroutine as part of CALL or a FUNCTION. For procedure pointer
1759 components, 'ppc_arg' determines whether the PPC may be called (with an
1760 argument list), or whether it may just be referred to as a pointer. */
1763 gfc_match_varspec (gfc_expr
*primary
, int equiv_flag
, bool sub_flag
,
1766 char name
[GFC_MAX_SYMBOL_LEN
+ 1];
1767 gfc_ref
*substring
, *tail
;
1768 gfc_component
*component
;
1769 gfc_symbol
*sym
= primary
->symtree
->n
.sym
;
1775 gfc_gobble_whitespace ();
1777 if (gfc_peek_ascii_char () == '[')
1779 if (sym
->attr
.dimension
)
1781 gfc_error ("Array section designator, e.g. '(:)', is required "
1782 "besides the coarray designator '[...]' at %C");
1785 if (!sym
->attr
.codimension
)
1787 gfc_error ("Coarray designator at %C but '%s' is not a coarray",
1793 /* For associate names, we may not yet know whether they are arrays or not.
1794 Thus if we have one and parentheses follow, we have to assume that it
1795 actually is one for now. The final decision will be made at
1796 resolution time, of course. */
1797 if (sym
->assoc
&& gfc_peek_ascii_char () == '(')
1798 sym
->attr
.dimension
= 1;
1800 if ((equiv_flag
&& gfc_peek_ascii_char () == '(')
1801 || gfc_peek_ascii_char () == '[' || sym
->attr
.codimension
1802 || (sym
->attr
.dimension
&& sym
->ts
.type
!= BT_CLASS
1803 && !sym
->attr
.proc_pointer
&& !gfc_is_proc_ptr_comp (primary
, NULL
)
1804 && !(gfc_matching_procptr_assignment
1805 && sym
->attr
.flavor
== FL_PROCEDURE
))
1806 || (sym
->ts
.type
== BT_CLASS
&& sym
->attr
.class_ok
1807 && CLASS_DATA (sym
)->attr
.dimension
))
1809 /* In EQUIVALENCE, we don't know yet whether we are seeing
1810 an array, character variable or array of character
1811 variables. We'll leave the decision till resolve time. */
1812 tail
= extend_ref (primary
, tail
);
1813 tail
->type
= REF_ARRAY
;
1815 m
= gfc_match_array_ref (&tail
->u
.ar
, equiv_flag
? NULL
: sym
->as
,
1817 sym
->ts
.type
== BT_CLASS
1818 ? (CLASS_DATA (sym
)->as
1819 ? CLASS_DATA (sym
)->as
->corank
: 0)
1820 : (sym
->as
? sym
->as
->corank
: 0));
1824 gfc_gobble_whitespace ();
1825 if (equiv_flag
&& gfc_peek_ascii_char () == '(')
1827 tail
= extend_ref (primary
, tail
);
1828 tail
->type
= REF_ARRAY
;
1830 m
= gfc_match_array_ref (&tail
->u
.ar
, NULL
, equiv_flag
, 0);
1836 primary
->ts
= sym
->ts
;
1841 if (sym
->ts
.type
== BT_UNKNOWN
&& gfc_peek_ascii_char () == '%'
1842 && gfc_get_default_type (sym
->name
, sym
->ns
)->type
== BT_DERIVED
)
1843 gfc_set_default_type (sym
, 0, sym
->ns
);
1845 if ((sym
->ts
.type
!= BT_DERIVED
&& sym
->ts
.type
!= BT_CLASS
)
1846 || gfc_match_char ('%') != MATCH_YES
)
1847 goto check_substring
;
1849 sym
= sym
->ts
.u
.derived
;
1856 m
= gfc_match_name (name
);
1858 gfc_error ("Expected structure component name at %C");
1862 if (sym
->f2k_derived
)
1863 tbp
= gfc_find_typebound_proc (sym
, &t
, name
, false, &gfc_current_locus
);
1869 gfc_symbol
* tbp_sym
;
1874 gcc_assert (!tail
|| !tail
->next
);
1875 gcc_assert (primary
->expr_type
== EXPR_VARIABLE
1876 || (primary
->expr_type
== EXPR_STRUCTURE
1877 && primary
->symtree
&& primary
->symtree
->n
.sym
1878 && primary
->symtree
->n
.sym
->attr
.flavor
));
1880 if (tbp
->n
.tb
->is_generic
)
1883 tbp_sym
= tbp
->n
.tb
->u
.specific
->n
.sym
;
1885 primary
->expr_type
= EXPR_COMPCALL
;
1886 primary
->value
.compcall
.tbp
= tbp
->n
.tb
;
1887 primary
->value
.compcall
.name
= tbp
->name
;
1888 primary
->value
.compcall
.ignore_pass
= 0;
1889 primary
->value
.compcall
.assign
= 0;
1890 primary
->value
.compcall
.base_object
= NULL
;
1891 gcc_assert (primary
->symtree
->n
.sym
->attr
.referenced
);
1893 primary
->ts
= tbp_sym
->ts
;
1895 m
= gfc_match_actual_arglist (tbp
->n
.tb
->subroutine
,
1896 &primary
->value
.compcall
.actual
);
1897 if (m
== MATCH_ERROR
)
1902 primary
->value
.compcall
.actual
= NULL
;
1905 gfc_error ("Expected argument list at %C");
1913 component
= gfc_find_component (sym
, name
, false, false);
1914 if (component
== NULL
)
1917 tail
= extend_ref (primary
, tail
);
1918 tail
->type
= REF_COMPONENT
;
1920 tail
->u
.c
.component
= component
;
1921 tail
->u
.c
.sym
= sym
;
1923 primary
->ts
= component
->ts
;
1925 if (component
->attr
.proc_pointer
&& ppc_arg
1926 && !gfc_matching_procptr_assignment
)
1928 /* Procedure pointer component call: Look for argument list. */
1929 m
= gfc_match_actual_arglist (sub_flag
,
1930 &primary
->value
.compcall
.actual
);
1931 if (m
== MATCH_ERROR
)
1934 if (m
== MATCH_NO
&& !gfc_matching_ptr_assignment
1935 && !matching_actual_arglist
)
1937 gfc_error ("Procedure pointer component '%s' requires an "
1938 "argument list at %C", component
->name
);
1943 primary
->expr_type
= EXPR_PPC
;
1948 if (component
->as
!= NULL
&& !component
->attr
.proc_pointer
)
1950 tail
= extend_ref (primary
, tail
);
1951 tail
->type
= REF_ARRAY
;
1953 m
= gfc_match_array_ref (&tail
->u
.ar
, component
->as
, equiv_flag
,
1954 component
->as
->corank
);
1958 else if (component
->ts
.type
== BT_CLASS
1959 && CLASS_DATA (component
)->as
!= NULL
1960 && !component
->attr
.proc_pointer
)
1962 tail
= extend_ref (primary
, tail
);
1963 tail
->type
= REF_ARRAY
;
1965 m
= gfc_match_array_ref (&tail
->u
.ar
, CLASS_DATA (component
)->as
,
1967 CLASS_DATA (component
)->as
->corank
);
1972 if ((component
->ts
.type
!= BT_DERIVED
&& component
->ts
.type
!= BT_CLASS
)
1973 || gfc_match_char ('%') != MATCH_YES
)
1976 sym
= component
->ts
.u
.derived
;
1981 if (primary
->ts
.type
== BT_UNKNOWN
&& sym
->attr
.flavor
!= FL_DERIVED
)
1983 if (gfc_get_default_type (sym
->name
, sym
->ns
)->type
== BT_CHARACTER
)
1985 gfc_set_default_type (sym
, 0, sym
->ns
);
1986 primary
->ts
= sym
->ts
;
1991 if (primary
->ts
.type
== BT_CHARACTER
)
1993 switch (match_substring (primary
->ts
.u
.cl
, equiv_flag
, &substring
))
1997 primary
->ref
= substring
;
1999 tail
->next
= substring
;
2001 if (primary
->expr_type
== EXPR_CONSTANT
)
2002 primary
->expr_type
= EXPR_SUBSTRING
;
2005 primary
->ts
.u
.cl
= NULL
;
2012 gfc_clear_ts (&primary
->ts
);
2013 gfc_clear_ts (&sym
->ts
);
2023 if (primary
->expr_type
== EXPR_PPC
&& gfc_is_coindexed (primary
))
2025 gfc_error ("Coindexed procedure-pointer component at %C");
2033 /* Given an expression that is a variable, figure out what the
2034 ultimate variable's type and attribute is, traversing the reference
2035 structures if necessary.
2037 This subroutine is trickier than it looks. We start at the base
2038 symbol and store the attribute. Component references load a
2039 completely new attribute.
2041 A couple of rules come into play. Subobjects of targets are always
2042 targets themselves. If we see a component that goes through a
2043 pointer, then the expression must also be a target, since the
2044 pointer is associated with something (if it isn't core will soon be
2045 dumped). If we see a full part or section of an array, the
2046 expression is also an array.
2048 We can have at most one full array reference. */
2051 gfc_variable_attr (gfc_expr
*expr
, gfc_typespec
*ts
)
2053 int dimension
, pointer
, allocatable
, target
;
2054 symbol_attribute attr
;
2057 gfc_component
*comp
;
2059 if (expr
->expr_type
!= EXPR_VARIABLE
&& expr
->expr_type
!= EXPR_FUNCTION
)
2060 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
2062 sym
= expr
->symtree
->n
.sym
;
2065 if (sym
->ts
.type
== BT_CLASS
&& sym
->attr
.class_ok
)
2067 dimension
= CLASS_DATA (sym
)->attr
.dimension
;
2068 pointer
= CLASS_DATA (sym
)->attr
.class_pointer
;
2069 allocatable
= CLASS_DATA (sym
)->attr
.allocatable
;
2073 dimension
= attr
.dimension
;
2074 pointer
= attr
.pointer
;
2075 allocatable
= attr
.allocatable
;
2078 target
= attr
.target
;
2079 if (pointer
|| attr
.proc_pointer
)
2082 if (ts
!= NULL
&& expr
->ts
.type
== BT_UNKNOWN
)
2085 for (ref
= expr
->ref
; ref
; ref
= ref
->next
)
2090 switch (ref
->u
.ar
.type
)
2097 allocatable
= pointer
= 0;
2102 /* Handle coarrays. */
2103 if (ref
->u
.ar
.dimen
> 0)
2104 allocatable
= pointer
= 0;
2108 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
2114 comp
= ref
->u
.c
.component
;
2119 /* Don't set the string length if a substring reference
2121 if (ts
->type
== BT_CHARACTER
2122 && ref
->next
&& ref
->next
->type
== REF_SUBSTRING
)
2126 if (comp
->ts
.type
== BT_CLASS
)
2128 pointer
= CLASS_DATA (comp
)->attr
.class_pointer
;
2129 allocatable
= CLASS_DATA (comp
)->attr
.allocatable
;
2133 pointer
= comp
->attr
.pointer
;
2134 allocatable
= comp
->attr
.allocatable
;
2136 if (pointer
|| attr
.proc_pointer
)
2142 allocatable
= pointer
= 0;
2146 attr
.dimension
= dimension
;
2147 attr
.pointer
= pointer
;
2148 attr
.allocatable
= allocatable
;
2149 attr
.target
= target
;
2150 attr
.save
= sym
->attr
.save
;
2156 /* Return the attribute from a general expression. */
2159 gfc_expr_attr (gfc_expr
*e
)
2161 symbol_attribute attr
;
2163 switch (e
->expr_type
)
2166 attr
= gfc_variable_attr (e
, NULL
);
2170 gfc_clear_attr (&attr
);
2172 if (e
->value
.function
.esym
!= NULL
)
2174 gfc_symbol
*sym
= e
->value
.function
.esym
->result
;
2176 if (sym
->ts
.type
== BT_CLASS
)
2178 attr
.dimension
= CLASS_DATA (sym
)->attr
.dimension
;
2179 attr
.pointer
= CLASS_DATA (sym
)->attr
.class_pointer
;
2180 attr
.allocatable
= CLASS_DATA (sym
)->attr
.allocatable
;
2184 attr
= gfc_variable_attr (e
, NULL
);
2186 /* TODO: NULL() returns pointers. May have to take care of this
2192 gfc_clear_attr (&attr
);
2200 /* Match a structure constructor. The initial symbol has already been
2203 typedef struct gfc_structure_ctor_component
2208 struct gfc_structure_ctor_component
* next
;
2210 gfc_structure_ctor_component
;
2212 #define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component)
2215 gfc_free_structure_ctor_component (gfc_structure_ctor_component
*comp
)
2218 gfc_free_expr (comp
->val
);
2223 /* Translate the component list into the actual constructor by sorting it in
2224 the order required; this also checks along the way that each and every
2225 component actually has an initializer and handles default initializers
2226 for components without explicit value given. */
2228 build_actual_constructor (gfc_structure_ctor_component
**comp_head
,
2229 gfc_constructor_base
*ctor_head
, gfc_symbol
*sym
)
2231 gfc_structure_ctor_component
*comp_iter
;
2232 gfc_component
*comp
;
2234 for (comp
= sym
->components
; comp
; comp
= comp
->next
)
2236 gfc_structure_ctor_component
**next_ptr
;
2237 gfc_expr
*value
= NULL
;
2239 /* Try to find the initializer for the current component by name. */
2240 next_ptr
= comp_head
;
2241 for (comp_iter
= *comp_head
; comp_iter
; comp_iter
= comp_iter
->next
)
2243 if (!strcmp (comp_iter
->name
, comp
->name
))
2245 next_ptr
= &comp_iter
->next
;
2248 /* If an extension, try building the parent derived type by building
2249 a value expression for the parent derived type and calling self. */
2250 if (!comp_iter
&& comp
== sym
->components
&& sym
->attr
.extension
)
2252 value
= gfc_get_structure_constructor_expr (comp
->ts
.type
,
2254 &gfc_current_locus
);
2255 value
->ts
= comp
->ts
;
2257 if (build_actual_constructor (comp_head
, &value
->value
.constructor
,
2258 comp
->ts
.u
.derived
) == FAILURE
)
2260 gfc_free_expr (value
);
2264 gfc_constructor_append_expr (ctor_head
, value
, NULL
);
2268 /* If it was not found, try the default initializer if there's any;
2269 otherwise, it's an error. */
2272 if (comp
->initializer
)
2274 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: Structure"
2275 " constructor with missing optional arguments"
2276 " at %C") == FAILURE
)
2278 value
= gfc_copy_expr (comp
->initializer
);
2282 gfc_error ("No initializer for component '%s' given in the"
2283 " structure constructor at %C!", comp
->name
);
2288 value
= comp_iter
->val
;
2290 /* Add the value to the constructor chain built. */
2291 gfc_constructor_append_expr (ctor_head
, value
, NULL
);
2293 /* Remove the entry from the component list. We don't want the expression
2294 value to be free'd, so set it to NULL. */
2297 *next_ptr
= comp_iter
->next
;
2298 comp_iter
->val
= NULL
;
2299 gfc_free_structure_ctor_component (comp_iter
);
2306 gfc_match_structure_constructor (gfc_symbol
*sym
, gfc_expr
**result
,
2309 gfc_structure_ctor_component
*comp_tail
, *comp_head
, *comp_iter
;
2310 gfc_constructor_base ctor_head
= NULL
;
2311 gfc_component
*comp
; /* Is set NULL when named component is first seen */
2315 const char* last_name
= NULL
;
2317 comp_tail
= comp_head
= NULL
;
2319 if (!parent
&& gfc_match_char ('(') != MATCH_YES
)
2322 where
= gfc_current_locus
;
2324 gfc_find_component (sym
, NULL
, false, true);
2326 /* Check that we're not about to construct an ABSTRACT type. */
2327 if (!parent
&& sym
->attr
.abstract
)
2329 gfc_error ("Can't construct ABSTRACT type '%s' at %C", sym
->name
);
2333 /* Match the component list and store it in a list together with the
2334 corresponding component names. Check for empty argument list first. */
2335 if (gfc_match_char (')') != MATCH_YES
)
2337 comp
= sym
->components
;
2340 gfc_component
*this_comp
= NULL
;
2342 if (comp
== sym
->components
&& sym
->attr
.extension
2343 && comp
->ts
.type
== BT_DERIVED
2344 && comp
->ts
.u
.derived
->attr
.zero_comp
)
2345 /* Skip empty parents. */
2349 comp_tail
= comp_head
= gfc_get_structure_ctor_component ();
2352 comp_tail
->next
= gfc_get_structure_ctor_component ();
2353 comp_tail
= comp_tail
->next
;
2355 comp_tail
->name
= XCNEWVEC (char, GFC_MAX_SYMBOL_LEN
+ 1);
2356 comp_tail
->val
= NULL
;
2357 comp_tail
->where
= gfc_current_locus
;
2359 /* Try matching a component name. */
2360 if (gfc_match_name (comp_tail
->name
) == MATCH_YES
2361 && gfc_match_char ('=') == MATCH_YES
)
2363 if (gfc_notify_std (GFC_STD_F2003
, "Fortran 2003: Structure"
2364 " constructor with named arguments at %C")
2368 last_name
= comp_tail
->name
;
2373 /* Components without name are not allowed after the first named
2374 component initializer! */
2378 gfc_error ("Component initializer without name after"
2379 " component named %s at %C!", last_name
);
2381 gfc_error ("Too many components in structure constructor at"
2386 gfc_current_locus
= comp_tail
->where
;
2387 strncpy (comp_tail
->name
, comp
->name
, GFC_MAX_SYMBOL_LEN
+ 1);
2390 /* Find the current component in the structure definition and check
2391 its access is not private. */
2393 this_comp
= gfc_find_component (sym
, comp
->name
, false, false);
2396 this_comp
= gfc_find_component (sym
,
2397 (const char *)comp_tail
->name
,
2399 comp
= NULL
; /* Reset needed! */
2402 /* Here we can check if a component name is given which does not
2403 correspond to any component of the defined structure. */
2407 /* Check if this component is already given a value. */
2408 for (comp_iter
= comp_head
; comp_iter
!= comp_tail
;
2409 comp_iter
= comp_iter
->next
)
2411 gcc_assert (comp_iter
);
2412 if (!strcmp (comp_iter
->name
, comp_tail
->name
))
2414 gfc_error ("Component '%s' is initialized twice in the"
2415 " structure constructor at %C!", comp_tail
->name
);
2420 /* Match the current initializer expression. */
2421 m
= gfc_match_expr (&comp_tail
->val
);
2424 if (m
== MATCH_ERROR
)
2427 /* F2008, R457/C725, for PURE C1283. */
2428 if (this_comp
->attr
.pointer
&& gfc_is_coindexed (comp_tail
->val
))
2430 gfc_error ("Coindexed expression to pointer component '%s' in "
2431 "structure constructor at %C!", comp_tail
->name
);
2436 /* If not explicitly a parent constructor, gather up the components
2438 if (comp
&& comp
== sym
->components
2439 && sym
->attr
.extension
2440 && (comp_tail
->val
->ts
.type
!= BT_DERIVED
2442 comp_tail
->val
->ts
.u
.derived
!= this_comp
->ts
.u
.derived
))
2444 gfc_current_locus
= where
;
2445 gfc_free_expr (comp_tail
->val
);
2446 comp_tail
->val
= NULL
;
2448 m
= gfc_match_structure_constructor (comp
->ts
.u
.derived
,
2449 &comp_tail
->val
, true);
2452 if (m
== MATCH_ERROR
)
2459 if (parent
&& !comp
)
2463 while (gfc_match_char (',') == MATCH_YES
);
2465 if (!parent
&& gfc_match_char (')') != MATCH_YES
)
2469 if (build_actual_constructor (&comp_head
, &ctor_head
, sym
) == FAILURE
)
2472 /* No component should be left, as this should have caused an error in the
2473 loop constructing the component-list (name that does not correspond to any
2474 component in the structure definition). */
2477 gcc_assert (sym
->attr
.extension
);
2478 for (comp_iter
= comp_head
; comp_iter
; comp_iter
= comp_iter
->next
)
2480 gfc_error ("component '%s' at %L has already been set by a "
2481 "parent derived type constructor", comp_iter
->name
,
2487 e
= gfc_get_structure_constructor_expr (BT_DERIVED
, 0, &where
);
2488 e
->ts
.u
.derived
= sym
;
2489 e
->value
.constructor
= ctor_head
;
2495 gfc_error ("Syntax error in structure constructor at %C");
2498 for (comp_iter
= comp_head
; comp_iter
; )
2500 gfc_structure_ctor_component
*next
= comp_iter
->next
;
2501 gfc_free_structure_ctor_component (comp_iter
);
2504 gfc_constructor_free (ctor_head
);
2509 /* If the symbol is an implicit do loop index and implicitly typed,
2510 it should not be host associated. Provide a symtree from the
2511 current namespace. */
2513 check_for_implicit_index (gfc_symtree
**st
, gfc_symbol
**sym
)
2515 if ((*sym
)->attr
.flavor
== FL_VARIABLE
2516 && (*sym
)->ns
!= gfc_current_ns
2517 && (*sym
)->attr
.implied_index
2518 && (*sym
)->attr
.implicit_type
2519 && !(*sym
)->attr
.use_assoc
)
2522 i
= gfc_get_sym_tree ((*sym
)->name
, NULL
, st
, false);
2525 *sym
= (*st
)->n
.sym
;
2531 /* Procedure pointer as function result: Replace the function symbol by the
2532 auto-generated hidden result variable named "ppr@". */
2535 replace_hidden_procptr_result (gfc_symbol
**sym
, gfc_symtree
**st
)
2537 /* Check for procedure pointer result variable. */
2538 if ((*sym
)->attr
.function
&& !(*sym
)->attr
.external
2539 && (*sym
)->result
&& (*sym
)->result
!= *sym
2540 && (*sym
)->result
->attr
.proc_pointer
2541 && (*sym
) == gfc_current_ns
->proc_name
2542 && (*sym
) == (*sym
)->result
->ns
->proc_name
2543 && strcmp ("ppr@", (*sym
)->result
->name
) == 0)
2545 /* Automatic replacement with "hidden" result variable. */
2546 (*sym
)->result
->attr
.referenced
= (*sym
)->attr
.referenced
;
2547 *sym
= (*sym
)->result
;
2548 *st
= gfc_find_symtree ((*sym
)->ns
->sym_root
, (*sym
)->name
);
2555 /* Matches a variable name followed by anything that might follow it--
2556 array reference, argument list of a function, etc. */
2559 gfc_match_rvalue (gfc_expr
**result
)
2561 gfc_actual_arglist
*actual_arglist
;
2562 char name
[GFC_MAX_SYMBOL_LEN
+ 1], argname
[GFC_MAX_SYMBOL_LEN
+ 1];
2565 gfc_symtree
*symtree
;
2566 locus where
, old_loc
;
2574 m
= gfc_match_name (name
);
2578 if (gfc_find_state (COMP_INTERFACE
) == SUCCESS
2579 && !gfc_current_ns
->has_import_set
)
2580 i
= gfc_get_sym_tree (name
, NULL
, &symtree
, false);
2582 i
= gfc_get_ha_sym_tree (name
, &symtree
);
2587 sym
= symtree
->n
.sym
;
2589 where
= gfc_current_locus
;
2591 replace_hidden_procptr_result (&sym
, &symtree
);
2593 /* If this is an implicit do loop index and implicitly typed,
2594 it should not be host associated. */
2595 m
= check_for_implicit_index (&symtree
, &sym
);
2599 gfc_set_sym_referenced (sym
);
2600 sym
->attr
.implied_index
= 0;
2602 if (sym
->attr
.function
&& sym
->result
== sym
)
2604 /* See if this is a directly recursive function call. */
2605 gfc_gobble_whitespace ();
2606 if (sym
->attr
.recursive
2607 && gfc_peek_ascii_char () == '('
2608 && gfc_current_ns
->proc_name
== sym
2609 && !sym
->attr
.dimension
)
2611 gfc_error ("'%s' at %C is the name of a recursive function "
2612 "and so refers to the result variable. Use an "
2613 "explicit RESULT variable for direct recursion "
2614 "(12.5.2.1)", sym
->name
);
2618 if (gfc_is_function_return_value (sym
, gfc_current_ns
))
2622 && (sym
->ns
== gfc_current_ns
2623 || sym
->ns
== gfc_current_ns
->parent
))
2625 gfc_entry_list
*el
= NULL
;
2627 for (el
= sym
->ns
->entries
; el
; el
= el
->next
)
2633 if (gfc_matching_procptr_assignment
)
2636 if (sym
->attr
.function
|| sym
->attr
.external
|| sym
->attr
.intrinsic
)
2639 if (sym
->attr
.generic
)
2640 goto generic_function
;
2642 switch (sym
->attr
.flavor
)
2646 e
= gfc_get_expr ();
2648 e
->expr_type
= EXPR_VARIABLE
;
2649 e
->symtree
= symtree
;
2651 m
= gfc_match_varspec (e
, 0, false, true);
2655 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
2656 end up here. Unfortunately, sym->value->expr_type is set to
2657 EXPR_CONSTANT, and so the if () branch would be followed without
2658 the !sym->as check. */
2659 if (sym
->value
&& sym
->value
->expr_type
!= EXPR_ARRAY
&& !sym
->as
)
2660 e
= gfc_copy_expr (sym
->value
);
2663 e
= gfc_get_expr ();
2664 e
->expr_type
= EXPR_VARIABLE
;
2667 e
->symtree
= symtree
;
2668 m
= gfc_match_varspec (e
, 0, false, true);
2670 if (sym
->ts
.is_c_interop
|| sym
->ts
.is_iso_c
)
2673 /* Variable array references to derived type parameters cause
2674 all sorts of headaches in simplification. Treating such
2675 expressions as variable works just fine for all array
2677 if (sym
->value
&& sym
->ts
.type
== BT_DERIVED
&& e
->ref
)
2679 for (ref
= e
->ref
; ref
; ref
= ref
->next
)
2680 if (ref
->type
== REF_ARRAY
)
2683 if (ref
== NULL
|| ref
->u
.ar
.type
== AR_FULL
)
2689 e
= gfc_get_expr ();
2690 e
->expr_type
= EXPR_VARIABLE
;
2691 e
->symtree
= symtree
;
2698 sym
= gfc_use_derived (sym
);
2702 m
= gfc_match_structure_constructor (sym
, &e
, false);
2705 /* If we're here, then the name is known to be the name of a
2706 procedure, yet it is not sure to be the name of a function. */
2709 /* Procedure Pointer Assignments. */
2711 if (gfc_matching_procptr_assignment
)
2713 gfc_gobble_whitespace ();
2714 if (!sym
->attr
.dimension
&& gfc_peek_ascii_char () == '(')
2715 /* Parse functions returning a procptr. */
2718 if (gfc_is_intrinsic (sym
, 0, gfc_current_locus
)
2719 || gfc_is_intrinsic (sym
, 1, gfc_current_locus
))
2720 sym
->attr
.intrinsic
= 1;
2721 e
= gfc_get_expr ();
2722 e
->expr_type
= EXPR_VARIABLE
;
2723 e
->symtree
= symtree
;
2724 m
= gfc_match_varspec (e
, 0, false, true);
2728 if (sym
->attr
.subroutine
)
2730 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2736 /* At this point, the name has to be a non-statement function.
2737 If the name is the same as the current function being
2738 compiled, then we have a variable reference (to the function
2739 result) if the name is non-recursive. */
2741 st
= gfc_enclosing_unit (NULL
);
2743 if (st
!= NULL
&& st
->state
== COMP_FUNCTION
2745 && !sym
->attr
.recursive
)
2747 e
= gfc_get_expr ();
2748 e
->symtree
= symtree
;
2749 e
->expr_type
= EXPR_VARIABLE
;
2751 m
= gfc_match_varspec (e
, 0, false, true);
2755 /* Match a function reference. */
2757 m
= gfc_match_actual_arglist (0, &actual_arglist
);
2760 if (sym
->attr
.proc
== PROC_ST_FUNCTION
)
2761 gfc_error ("Statement function '%s' requires argument list at %C",
2764 gfc_error ("Function '%s' requires an argument list at %C",
2777 gfc_get_ha_sym_tree (name
, &symtree
); /* Can't fail */
2778 sym
= symtree
->n
.sym
;
2780 replace_hidden_procptr_result (&sym
, &symtree
);
2782 e
= gfc_get_expr ();
2783 e
->symtree
= symtree
;
2784 e
->expr_type
= EXPR_FUNCTION
;
2785 e
->value
.function
.actual
= actual_arglist
;
2786 e
->where
= gfc_current_locus
;
2788 if (sym
->as
!= NULL
)
2789 e
->rank
= sym
->as
->rank
;
2791 if (!sym
->attr
.function
2792 && gfc_add_function (&sym
->attr
, sym
->name
, NULL
) == FAILURE
)
2798 /* Check here for the existence of at least one argument for the
2799 iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The
2800 argument(s) given will be checked in gfc_iso_c_func_interface,
2801 during resolution of the function call. */
2802 if (sym
->attr
.is_iso_c
== 1
2803 && (sym
->from_intmod
== INTMOD_ISO_C_BINDING
2804 && (sym
->intmod_sym_id
== ISOCBINDING_LOC
2805 || sym
->intmod_sym_id
== ISOCBINDING_FUNLOC
2806 || sym
->intmod_sym_id
== ISOCBINDING_ASSOCIATED
)))
2808 /* make sure we were given a param */
2809 if (actual_arglist
== NULL
)
2811 gfc_error ("Missing argument to '%s' at %C", sym
->name
);
2817 if (sym
->result
== NULL
)
2825 /* Special case for derived type variables that get their types
2826 via an IMPLICIT statement. This can't wait for the
2827 resolution phase. */
2829 if (gfc_peek_ascii_char () == '%'
2830 && sym
->ts
.type
== BT_UNKNOWN
2831 && gfc_get_default_type (sym
->name
, sym
->ns
)->type
== BT_DERIVED
)
2832 gfc_set_default_type (sym
, 0, sym
->ns
);
2834 /* If the symbol has a dimension attribute, the expression is a
2837 if (sym
->attr
.dimension
)
2839 if (gfc_add_flavor (&sym
->attr
, FL_VARIABLE
,
2840 sym
->name
, NULL
) == FAILURE
)
2846 e
= gfc_get_expr ();
2847 e
->symtree
= symtree
;
2848 e
->expr_type
= EXPR_VARIABLE
;
2849 m
= gfc_match_varspec (e
, 0, false, true);
2853 /* Name is not an array, so we peek to see if a '(' implies a
2854 function call or a substring reference. Otherwise the
2855 variable is just a scalar. */
2857 gfc_gobble_whitespace ();
2858 if (gfc_peek_ascii_char () != '(')
2860 /* Assume a scalar variable */
2861 e
= gfc_get_expr ();
2862 e
->symtree
= symtree
;
2863 e
->expr_type
= EXPR_VARIABLE
;
2865 if (gfc_add_flavor (&sym
->attr
, FL_VARIABLE
,
2866 sym
->name
, NULL
) == FAILURE
)
2872 /*FIXME:??? gfc_match_varspec does set this for us: */
2874 m
= gfc_match_varspec (e
, 0, false, true);
2878 /* See if this is a function reference with a keyword argument
2879 as first argument. We do this because otherwise a spurious
2880 symbol would end up in the symbol table. */
2882 old_loc
= gfc_current_locus
;
2883 m2
= gfc_match (" ( %n =", argname
);
2884 gfc_current_locus
= old_loc
;
2886 e
= gfc_get_expr ();
2887 e
->symtree
= symtree
;
2889 if (m2
!= MATCH_YES
)
2891 /* Try to figure out whether we're dealing with a character type.
2892 We're peeking ahead here, because we don't want to call
2893 match_substring if we're dealing with an implicitly typed
2894 non-character variable. */
2895 implicit_char
= false;
2896 if (sym
->ts
.type
== BT_UNKNOWN
)
2898 ts
= gfc_get_default_type (sym
->name
, NULL
);
2899 if (ts
->type
== BT_CHARACTER
)
2900 implicit_char
= true;
2903 /* See if this could possibly be a substring reference of a name
2904 that we're not sure is a variable yet. */
2906 if ((implicit_char
|| sym
->ts
.type
== BT_CHARACTER
)
2907 && match_substring (sym
->ts
.u
.cl
, 0, &e
->ref
) == MATCH_YES
)
2910 e
->expr_type
= EXPR_VARIABLE
;
2912 if (sym
->attr
.flavor
!= FL_VARIABLE
2913 && gfc_add_flavor (&sym
->attr
, FL_VARIABLE
,
2914 sym
->name
, NULL
) == FAILURE
)
2920 if (sym
->ts
.type
== BT_UNKNOWN
2921 && gfc_set_default_type (sym
, 1, NULL
) == FAILURE
)
2935 /* Give up, assume we have a function. */
2937 gfc_get_sym_tree (name
, NULL
, &symtree
, false); /* Can't fail */
2938 sym
= symtree
->n
.sym
;
2939 e
->expr_type
= EXPR_FUNCTION
;
2941 if (!sym
->attr
.function
2942 && gfc_add_function (&sym
->attr
, sym
->name
, NULL
) == FAILURE
)
2950 m
= gfc_match_actual_arglist (0, &e
->value
.function
.actual
);
2952 gfc_error ("Missing argument list in function '%s' at %C", sym
->name
);
2960 /* If our new function returns a character, array or structure
2961 type, it might have subsequent references. */
2963 m
= gfc_match_varspec (e
, 0, false, true);
2970 gfc_get_sym_tree (name
, NULL
, &symtree
, false); /* Can't fail */
2972 e
= gfc_get_expr ();
2973 e
->symtree
= symtree
;
2974 e
->expr_type
= EXPR_FUNCTION
;
2976 m
= gfc_match_actual_arglist (0, &e
->value
.function
.actual
);
2980 gfc_error ("Symbol at %C is not appropriate for an expression");
2996 /* Match a variable, i.e. something that can be assigned to. This
2997 starts as a symbol, can be a structure component or an array
2998 reference. It can be a function if the function doesn't have a
2999 separate RESULT variable. If the symbol has not been previously
3000 seen, we assume it is a variable.
3002 This function is called by two interface functions:
3003 gfc_match_variable, which has host_flag = 1, and
3004 gfc_match_equiv_variable, with host_flag = 0, to restrict the
3005 match of the symbol to the local scope. */
3008 match_variable (gfc_expr
**result
, int equiv_flag
, int host_flag
)
3016 /* Since nothing has any business being an lvalue in a module
3017 specification block, an interface block or a contains section,
3018 we force the changed_symbols mechanism to work by setting
3019 host_flag to 0. This prevents valid symbols that have the name
3020 of keywords, such as 'end', being turned into variables by
3021 failed matching to assignments for, e.g., END INTERFACE. */
3022 if (gfc_current_state () == COMP_MODULE
3023 || gfc_current_state () == COMP_INTERFACE
3024 || gfc_current_state () == COMP_CONTAINS
)
3027 where
= gfc_current_locus
;
3028 m
= gfc_match_sym_tree (&st
, host_flag
);
3034 /* If this is an implicit do loop index and implicitly typed,
3035 it should not be host associated. */
3036 m
= check_for_implicit_index (&st
, &sym
);
3040 sym
->attr
.implied_index
= 0;
3042 gfc_set_sym_referenced (sym
);
3043 switch (sym
->attr
.flavor
)
3046 /* Everything is alright. */
3051 sym_flavor flavor
= FL_UNKNOWN
;
3053 gfc_gobble_whitespace ();
3055 if (sym
->attr
.external
|| sym
->attr
.procedure
3056 || sym
->attr
.function
|| sym
->attr
.subroutine
)
3057 flavor
= FL_PROCEDURE
;
3059 /* If it is not a procedure, is not typed and is host associated,
3060 we cannot give it a flavor yet. */
3061 else if (sym
->ns
== gfc_current_ns
->parent
3062 && sym
->ts
.type
== BT_UNKNOWN
)
3065 /* These are definitive indicators that this is a variable. */
3066 else if (gfc_peek_ascii_char () != '(' || sym
->ts
.type
!= BT_UNKNOWN
3067 || sym
->attr
.pointer
|| sym
->as
!= NULL
)
3068 flavor
= FL_VARIABLE
;
3070 if (flavor
!= FL_UNKNOWN
3071 && gfc_add_flavor (&sym
->attr
, flavor
, sym
->name
, NULL
) == FAILURE
)
3079 gfc_error ("Named constant at %C in an EQUIVALENCE");
3082 /* Otherwise this is checked for and an error given in the
3083 variable definition context checks. */
3087 /* Check for a nonrecursive function result variable. */
3088 if (sym
->attr
.function
3089 && !sym
->attr
.external
3090 && sym
->result
== sym
3091 && (gfc_is_function_return_value (sym
, gfc_current_ns
)
3093 && sym
->ns
== gfc_current_ns
)
3095 && sym
->ns
== gfc_current_ns
->parent
)))
3097 /* If a function result is a derived type, then the derived
3098 type may still have to be resolved. */
3100 if (sym
->ts
.type
== BT_DERIVED
3101 && gfc_use_derived (sym
->ts
.u
.derived
) == NULL
)
3106 if (sym
->attr
.proc_pointer
3107 || replace_hidden_procptr_result (&sym
, &st
) == SUCCESS
)
3110 /* Fall through to error */
3113 gfc_error ("'%s' at %C is not a variable", sym
->name
);
3117 /* Special case for derived type variables that get their types
3118 via an IMPLICIT statement. This can't wait for the
3119 resolution phase. */
3122 gfc_namespace
* implicit_ns
;
3124 if (gfc_current_ns
->proc_name
== sym
)
3125 implicit_ns
= gfc_current_ns
;
3127 implicit_ns
= sym
->ns
;
3129 if (gfc_peek_ascii_char () == '%'
3130 && sym
->ts
.type
== BT_UNKNOWN
3131 && gfc_get_default_type (sym
->name
, implicit_ns
)->type
== BT_DERIVED
)
3132 gfc_set_default_type (sym
, 0, implicit_ns
);
3135 expr
= gfc_get_expr ();
3137 expr
->expr_type
= EXPR_VARIABLE
;
3140 expr
->where
= where
;
3142 /* Now see if we have to do more. */
3143 m
= gfc_match_varspec (expr
, equiv_flag
, false, false);
3146 gfc_free_expr (expr
);
3156 gfc_match_variable (gfc_expr
**result
, int equiv_flag
)
3158 return match_variable (result
, equiv_flag
, 1);
3163 gfc_match_equiv_variable (gfc_expr
**result
)
3165 return match_variable (result
, 1, 0);