OSDN Git Service

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