OSDN Git Service

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