OSDN Git Service

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