OSDN Git Service

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