OSDN Git Service

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