OSDN Git Service

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