re PR fortran/63205 ([OOP] Wrongly rejects type = class (for identical declared...
[platform/upstream/gcc.git] / gcc / fortran / expr.c
1 /* Routines for manipulation of expression nodes.
2    Copyright (C) 2000-2015 Free Software Foundation, Inc.
3    Contributed by Andy Vaught
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "flags.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
28 #include "target-memory.h" /* for gfc_convert_boz */
29 #include "constructor.h"
30
31
32 /* The following set of functions provide access to gfc_expr* of
33    various types - actual all but EXPR_FUNCTION and EXPR_VARIABLE.
34
35    There are two functions available elsewhere that provide
36    slightly different flavours of variables.  Namely:
37      expr.c (gfc_get_variable_expr)
38      symbol.c (gfc_lval_expr_from_sym)
39    TODO: Merge these functions, if possible.  */
40
41 /* Get a new expression node.  */
42
43 gfc_expr *
44 gfc_get_expr (void)
45 {
46   gfc_expr *e;
47
48   e = XCNEW (gfc_expr);
49   gfc_clear_ts (&e->ts);
50   e->shape = NULL;
51   e->ref = NULL;
52   e->symtree = NULL;
53   return e;
54 }
55
56
57 /* Get a new expression node that is an array constructor
58    of given type and kind.  */
59
60 gfc_expr *
61 gfc_get_array_expr (bt type, int kind, locus *where)
62 {
63   gfc_expr *e;
64
65   e = gfc_get_expr ();
66   e->expr_type = EXPR_ARRAY;
67   e->value.constructor = NULL;
68   e->rank = 1;
69   e->shape = NULL;
70
71   e->ts.type = type;
72   e->ts.kind = kind;
73   if (where)
74     e->where = *where;
75
76   return e;
77 }
78
79
80 /* Get a new expression node that is the NULL expression.  */
81
82 gfc_expr *
83 gfc_get_null_expr (locus *where)
84 {
85   gfc_expr *e;
86
87   e = gfc_get_expr ();
88   e->expr_type = EXPR_NULL;
89   e->ts.type = BT_UNKNOWN;
90
91   if (where)
92     e->where = *where;
93
94   return e;
95 }
96
97
98 /* Get a new expression node that is an operator expression node.  */
99
100 gfc_expr *
101 gfc_get_operator_expr (locus *where, gfc_intrinsic_op op,
102                       gfc_expr *op1, gfc_expr *op2)
103 {
104   gfc_expr *e;
105
106   e = gfc_get_expr ();
107   e->expr_type = EXPR_OP;
108   e->value.op.op = op;
109   e->value.op.op1 = op1;
110   e->value.op.op2 = op2;
111
112   if (where)
113     e->where = *where;
114
115   return e;
116 }
117
118
119 /* Get a new expression node that is an structure constructor
120    of given type and kind.  */
121
122 gfc_expr *
123 gfc_get_structure_constructor_expr (bt type, int kind, locus *where)
124 {
125   gfc_expr *e;
126
127   e = gfc_get_expr ();
128   e->expr_type = EXPR_STRUCTURE;
129   e->value.constructor = NULL;
130
131   e->ts.type = type;
132   e->ts.kind = kind;
133   if (where)
134     e->where = *where;
135
136   return e;
137 }
138
139
140 /* Get a new expression node that is an constant of given type and kind.  */
141
142 gfc_expr *
143 gfc_get_constant_expr (bt type, int kind, locus *where)
144 {
145   gfc_expr *e;
146
147   if (!where)
148     gfc_internal_error ("gfc_get_constant_expr(): locus %<where%> cannot be "
149                         "NULL");
150
151   e = gfc_get_expr ();
152
153   e->expr_type = EXPR_CONSTANT;
154   e->ts.type = type;
155   e->ts.kind = kind;
156   e->where = *where;
157
158   switch (type)
159     {
160     case BT_INTEGER:
161       mpz_init (e->value.integer);
162       break;
163
164     case BT_REAL:
165       gfc_set_model_kind (kind);
166       mpfr_init (e->value.real);
167       break;
168
169     case BT_COMPLEX:
170       gfc_set_model_kind (kind);
171       mpc_init2 (e->value.complex, mpfr_get_default_prec());
172       break;
173
174     default:
175       break;
176     }
177
178   return e;
179 }
180
181
182 /* Get a new expression node that is an string constant.
183    If no string is passed, a string of len is allocated,
184    blanked and null-terminated.  */
185
186 gfc_expr *
187 gfc_get_character_expr (int kind, locus *where, const char *src, int len)
188 {
189   gfc_expr *e;
190   gfc_char_t *dest;
191
192   if (!src)
193     {
194       dest = gfc_get_wide_string (len + 1);
195       gfc_wide_memset (dest, ' ', len);
196       dest[len] = '\0';
197     }
198   else
199     dest = gfc_char_to_widechar (src);
200
201   e = gfc_get_constant_expr (BT_CHARACTER, kind,
202                             where ? where : &gfc_current_locus);
203   e->value.character.string = dest;
204   e->value.character.length = len;
205
206   return e;
207 }
208
209
210 /* Get a new expression node that is an integer constant.  */
211
212 gfc_expr *
213 gfc_get_int_expr (int kind, locus *where, int value)
214 {
215   gfc_expr *p;
216   p = gfc_get_constant_expr (BT_INTEGER, kind,
217                              where ? where : &gfc_current_locus);
218
219   mpz_set_si (p->value.integer, value);
220
221   return p;
222 }
223
224
225 /* Get a new expression node that is a logical constant.  */
226
227 gfc_expr *
228 gfc_get_logical_expr (int kind, locus *where, bool value)
229 {
230   gfc_expr *p;
231   p = gfc_get_constant_expr (BT_LOGICAL, kind,
232                              where ? where : &gfc_current_locus);
233
234   p->value.logical = value;
235
236   return p;
237 }
238
239
240 gfc_expr *
241 gfc_get_iokind_expr (locus *where, io_kind k)
242 {
243   gfc_expr *e;
244
245   /* Set the types to something compatible with iokind. This is needed to
246      get through gfc_free_expr later since iokind really has no Basic Type,
247      BT, of its own.  */
248
249   e = gfc_get_expr ();
250   e->expr_type = EXPR_CONSTANT;
251   e->ts.type = BT_LOGICAL;
252   e->value.iokind = k;
253   e->where = *where;
254
255   return e;
256 }
257
258
259 /* Given an expression pointer, return a copy of the expression.  This
260    subroutine is recursive.  */
261
262 gfc_expr *
263 gfc_copy_expr (gfc_expr *p)
264 {
265   gfc_expr *q;
266   gfc_char_t *s;
267   char *c;
268
269   if (p == NULL)
270     return NULL;
271
272   q = gfc_get_expr ();
273   *q = *p;
274
275   switch (q->expr_type)
276     {
277     case EXPR_SUBSTRING:
278       s = gfc_get_wide_string (p->value.character.length + 1);
279       q->value.character.string = s;
280       memcpy (s, p->value.character.string,
281               (p->value.character.length + 1) * sizeof (gfc_char_t));
282       break;
283
284     case EXPR_CONSTANT:
285       /* Copy target representation, if it exists.  */
286       if (p->representation.string)
287         {
288           c = XCNEWVEC (char, p->representation.length + 1);
289           q->representation.string = c;
290           memcpy (c, p->representation.string, (p->representation.length + 1));
291         }
292
293       /* Copy the values of any pointer components of p->value.  */
294       switch (q->ts.type)
295         {
296         case BT_INTEGER:
297           mpz_init_set (q->value.integer, p->value.integer);
298           break;
299
300         case BT_REAL:
301           gfc_set_model_kind (q->ts.kind);
302           mpfr_init (q->value.real);
303           mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
304           break;
305
306         case BT_COMPLEX:
307           gfc_set_model_kind (q->ts.kind);
308           mpc_init2 (q->value.complex, mpfr_get_default_prec());
309           mpc_set (q->value.complex, p->value.complex, GFC_MPC_RND_MODE);
310           break;
311
312         case BT_CHARACTER:
313           if (p->representation.string)
314             q->value.character.string
315               = gfc_char_to_widechar (q->representation.string);
316           else
317             {
318               s = gfc_get_wide_string (p->value.character.length + 1);
319               q->value.character.string = s;
320
321               /* This is the case for the C_NULL_CHAR named constant.  */
322               if (p->value.character.length == 0
323                   && (p->ts.is_c_interop || p->ts.is_iso_c))
324                 {
325                   *s = '\0';
326                   /* Need to set the length to 1 to make sure the NUL
327                      terminator is copied.  */
328                   q->value.character.length = 1;
329                 }
330               else
331                 memcpy (s, p->value.character.string,
332                         (p->value.character.length + 1) * sizeof (gfc_char_t));
333             }
334           break;
335
336         case BT_HOLLERITH:
337         case BT_LOGICAL:
338         case BT_DERIVED:
339         case BT_CLASS:
340         case BT_ASSUMED:
341           break;                /* Already done.  */
342
343         case BT_PROCEDURE:
344         case BT_VOID:
345            /* Should never be reached.  */
346         case BT_UNKNOWN:
347           gfc_internal_error ("gfc_copy_expr(): Bad expr node");
348           /* Not reached.  */
349         }
350
351       break;
352
353     case EXPR_OP:
354       switch (q->value.op.op)
355         {
356         case INTRINSIC_NOT:
357         case INTRINSIC_PARENTHESES:
358         case INTRINSIC_UPLUS:
359         case INTRINSIC_UMINUS:
360           q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
361           break;
362
363         default:                /* Binary operators.  */
364           q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
365           q->value.op.op2 = gfc_copy_expr (p->value.op.op2);
366           break;
367         }
368
369       break;
370
371     case EXPR_FUNCTION:
372       q->value.function.actual =
373         gfc_copy_actual_arglist (p->value.function.actual);
374       break;
375
376     case EXPR_COMPCALL:
377     case EXPR_PPC:
378       q->value.compcall.actual =
379         gfc_copy_actual_arglist (p->value.compcall.actual);
380       q->value.compcall.tbp = p->value.compcall.tbp;
381       break;
382
383     case EXPR_STRUCTURE:
384     case EXPR_ARRAY:
385       q->value.constructor = gfc_constructor_copy (p->value.constructor);
386       break;
387
388     case EXPR_VARIABLE:
389     case EXPR_NULL:
390       break;
391     }
392
393   q->shape = gfc_copy_shape (p->shape, p->rank);
394
395   q->ref = gfc_copy_ref (p->ref);
396
397   return q;
398 }
399
400
401 void
402 gfc_clear_shape (mpz_t *shape, int rank)
403 {
404   int i;
405
406   for (i = 0; i < rank; i++)
407     mpz_clear (shape[i]);
408 }
409
410
411 void
412 gfc_free_shape (mpz_t **shape, int rank)
413 {
414   if (*shape == NULL)
415     return;
416
417   gfc_clear_shape (*shape, rank);
418   free (*shape);
419   *shape = NULL;
420 }
421
422
423 /* Workhorse function for gfc_free_expr() that frees everything
424    beneath an expression node, but not the node itself.  This is
425    useful when we want to simplify a node and replace it with
426    something else or the expression node belongs to another structure.  */
427
428 static void
429 free_expr0 (gfc_expr *e)
430 {
431   switch (e->expr_type)
432     {
433     case EXPR_CONSTANT:
434       /* Free any parts of the value that need freeing.  */
435       switch (e->ts.type)
436         {
437         case BT_INTEGER:
438           mpz_clear (e->value.integer);
439           break;
440
441         case BT_REAL:
442           mpfr_clear (e->value.real);
443           break;
444
445         case BT_CHARACTER:
446           free (e->value.character.string);
447           break;
448
449         case BT_COMPLEX:
450           mpc_clear (e->value.complex);
451           break;
452
453         default:
454           break;
455         }
456
457       /* Free the representation.  */
458       free (e->representation.string);
459
460       break;
461
462     case EXPR_OP:
463       if (e->value.op.op1 != NULL)
464         gfc_free_expr (e->value.op.op1);
465       if (e->value.op.op2 != NULL)
466         gfc_free_expr (e->value.op.op2);
467       break;
468
469     case EXPR_FUNCTION:
470       gfc_free_actual_arglist (e->value.function.actual);
471       break;
472
473     case EXPR_COMPCALL:
474     case EXPR_PPC:
475       gfc_free_actual_arglist (e->value.compcall.actual);
476       break;
477
478     case EXPR_VARIABLE:
479       break;
480
481     case EXPR_ARRAY:
482     case EXPR_STRUCTURE:
483       gfc_constructor_free (e->value.constructor);
484       break;
485
486     case EXPR_SUBSTRING:
487       free (e->value.character.string);
488       break;
489
490     case EXPR_NULL:
491       break;
492
493     default:
494       gfc_internal_error ("free_expr0(): Bad expr type");
495     }
496
497   /* Free a shape array.  */
498   gfc_free_shape (&e->shape, e->rank);
499
500   gfc_free_ref_list (e->ref);
501
502   memset (e, '\0', sizeof (gfc_expr));
503 }
504
505
506 /* Free an expression node and everything beneath it.  */
507
508 void
509 gfc_free_expr (gfc_expr *e)
510 {
511   if (e == NULL)
512     return;
513   free_expr0 (e);
514   free (e);
515 }
516
517
518 /* Free an argument list and everything below it.  */
519
520 void
521 gfc_free_actual_arglist (gfc_actual_arglist *a1)
522 {
523   gfc_actual_arglist *a2;
524
525   while (a1)
526     {
527       a2 = a1->next;
528       gfc_free_expr (a1->expr);
529       free (a1);
530       a1 = a2;
531     }
532 }
533
534
535 /* Copy an arglist structure and all of the arguments.  */
536
537 gfc_actual_arglist *
538 gfc_copy_actual_arglist (gfc_actual_arglist *p)
539 {
540   gfc_actual_arglist *head, *tail, *new_arg;
541
542   head = tail = NULL;
543
544   for (; p; p = p->next)
545     {
546       new_arg = gfc_get_actual_arglist ();
547       *new_arg = *p;
548
549       new_arg->expr = gfc_copy_expr (p->expr);
550       new_arg->next = NULL;
551
552       if (head == NULL)
553         head = new_arg;
554       else
555         tail->next = new_arg;
556
557       tail = new_arg;
558     }
559
560   return head;
561 }
562
563
564 /* Free a list of reference structures.  */
565
566 void
567 gfc_free_ref_list (gfc_ref *p)
568 {
569   gfc_ref *q;
570   int i;
571
572   for (; p; p = q)
573     {
574       q = p->next;
575
576       switch (p->type)
577         {
578         case REF_ARRAY:
579           for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
580             {
581               gfc_free_expr (p->u.ar.start[i]);
582               gfc_free_expr (p->u.ar.end[i]);
583               gfc_free_expr (p->u.ar.stride[i]);
584             }
585
586           break;
587
588         case REF_SUBSTRING:
589           gfc_free_expr (p->u.ss.start);
590           gfc_free_expr (p->u.ss.end);
591           break;
592
593         case REF_COMPONENT:
594           break;
595         }
596
597       free (p);
598     }
599 }
600
601
602 /* Graft the *src expression onto the *dest subexpression.  */
603
604 void
605 gfc_replace_expr (gfc_expr *dest, gfc_expr *src)
606 {
607   free_expr0 (dest);
608   *dest = *src;
609   free (src);
610 }
611
612
613 /* Try to extract an integer constant from the passed expression node.
614    Returns an error message or NULL if the result is set.  It is
615    tempting to generate an error and return true or false, but
616    failure is OK for some callers.  */
617
618 const char *
619 gfc_extract_int (gfc_expr *expr, int *result)
620 {
621   if (expr->expr_type != EXPR_CONSTANT)
622     return _("Constant expression required at %C");
623
624   if (expr->ts.type != BT_INTEGER)
625     return _("Integer expression required at %C");
626
627   if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
628       || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
629     {
630       return _("Integer value too large in expression at %C");
631     }
632
633   *result = (int) mpz_get_si (expr->value.integer);
634
635   return NULL;
636 }
637
638
639 /* Recursively copy a list of reference structures.  */
640
641 gfc_ref *
642 gfc_copy_ref (gfc_ref *src)
643 {
644   gfc_array_ref *ar;
645   gfc_ref *dest;
646
647   if (src == NULL)
648     return NULL;
649
650   dest = gfc_get_ref ();
651   dest->type = src->type;
652
653   switch (src->type)
654     {
655     case REF_ARRAY:
656       ar = gfc_copy_array_ref (&src->u.ar);
657       dest->u.ar = *ar;
658       free (ar);
659       break;
660
661     case REF_COMPONENT:
662       dest->u.c = src->u.c;
663       break;
664
665     case REF_SUBSTRING:
666       dest->u.ss = src->u.ss;
667       dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
668       dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
669       break;
670     }
671
672   dest->next = gfc_copy_ref (src->next);
673
674   return dest;
675 }
676
677
678 /* Detect whether an expression has any vector index array references.  */
679
680 int
681 gfc_has_vector_index (gfc_expr *e)
682 {
683   gfc_ref *ref;
684   int i;
685   for (ref = e->ref; ref; ref = ref->next)
686     if (ref->type == REF_ARRAY)
687       for (i = 0; i < ref->u.ar.dimen; i++)
688         if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
689           return 1;
690   return 0;
691 }
692
693
694 /* Copy a shape array.  */
695
696 mpz_t *
697 gfc_copy_shape (mpz_t *shape, int rank)
698 {
699   mpz_t *new_shape;
700   int n;
701
702   if (shape == NULL)
703     return NULL;
704
705   new_shape = gfc_get_shape (rank);
706
707   for (n = 0; n < rank; n++)
708     mpz_init_set (new_shape[n], shape[n]);
709
710   return new_shape;
711 }
712
713
714 /* Copy a shape array excluding dimension N, where N is an integer
715    constant expression.  Dimensions are numbered in Fortran style --
716    starting with ONE.
717
718    So, if the original shape array contains R elements
719       { s1 ... sN-1  sN  sN+1 ... sR-1 sR}
720    the result contains R-1 elements:
721       { s1 ... sN-1  sN+1    ...  sR-1}
722
723    If anything goes wrong -- N is not a constant, its value is out
724    of range -- or anything else, just returns NULL.  */
725
726 mpz_t *
727 gfc_copy_shape_excluding (mpz_t *shape, int rank, gfc_expr *dim)
728 {
729   mpz_t *new_shape, *s;
730   int i, n;
731
732   if (shape == NULL
733       || rank <= 1
734       || dim == NULL
735       || dim->expr_type != EXPR_CONSTANT
736       || dim->ts.type != BT_INTEGER)
737     return NULL;
738
739   n = mpz_get_si (dim->value.integer);
740   n--; /* Convert to zero based index.  */
741   if (n < 0 || n >= rank)
742     return NULL;
743
744   s = new_shape = gfc_get_shape (rank - 1);
745
746   for (i = 0; i < rank; i++)
747     {
748       if (i == n)
749         continue;
750       mpz_init_set (*s, shape[i]);
751       s++;
752     }
753
754   return new_shape;
755 }
756
757
758 /* Return the maximum kind of two expressions.  In general, higher
759    kind numbers mean more precision for numeric types.  */
760
761 int
762 gfc_kind_max (gfc_expr *e1, gfc_expr *e2)
763 {
764   return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
765 }
766
767
768 /* Returns nonzero if the type is numeric, zero otherwise.  */
769
770 static int
771 numeric_type (bt type)
772 {
773   return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
774 }
775
776
777 /* Returns nonzero if the typespec is a numeric type, zero otherwise.  */
778
779 int
780 gfc_numeric_ts (gfc_typespec *ts)
781 {
782   return numeric_type (ts->type);
783 }
784
785
786 /* Return an expression node with an optional argument list attached.
787    A variable number of gfc_expr pointers are strung together in an
788    argument list with a NULL pointer terminating the list.  */
789
790 gfc_expr *
791 gfc_build_conversion (gfc_expr *e)
792 {
793   gfc_expr *p;
794
795   p = gfc_get_expr ();
796   p->expr_type = EXPR_FUNCTION;
797   p->symtree = NULL;
798   p->value.function.actual = NULL;
799
800   p->value.function.actual = gfc_get_actual_arglist ();
801   p->value.function.actual->expr = e;
802
803   return p;
804 }
805
806
807 /* Given an expression node with some sort of numeric binary
808    expression, insert type conversions required to make the operands
809    have the same type. Conversion warnings are disabled if wconversion
810    is set to 0.
811
812    The exception is that the operands of an exponential don't have to
813    have the same type.  If possible, the base is promoted to the type
814    of the exponent.  For example, 1**2.3 becomes 1.0**2.3, but
815    1.0**2 stays as it is.  */
816
817 void
818 gfc_type_convert_binary (gfc_expr *e, int wconversion)
819 {
820   gfc_expr *op1, *op2;
821
822   op1 = e->value.op.op1;
823   op2 = e->value.op.op2;
824
825   if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
826     {
827       gfc_clear_ts (&e->ts);
828       return;
829     }
830
831   /* Kind conversions of same type.  */
832   if (op1->ts.type == op2->ts.type)
833     {
834       if (op1->ts.kind == op2->ts.kind)
835         {
836           /* No type conversions.  */
837           e->ts = op1->ts;
838           goto done;
839         }
840
841       if (op1->ts.kind > op2->ts.kind)
842         gfc_convert_type_warn (op2, &op1->ts, 2, wconversion);
843       else
844         gfc_convert_type_warn (op1, &op2->ts, 2, wconversion);
845
846       e->ts = op1->ts;
847       goto done;
848     }
849
850   /* Integer combined with real or complex.  */
851   if (op2->ts.type == BT_INTEGER)
852     {
853       e->ts = op1->ts;
854
855       /* Special case for ** operator.  */
856       if (e->value.op.op == INTRINSIC_POWER)
857         goto done;
858
859       gfc_convert_type_warn (e->value.op.op2, &e->ts, 2, wconversion);
860       goto done;
861     }
862
863   if (op1->ts.type == BT_INTEGER)
864     {
865       e->ts = op2->ts;
866       gfc_convert_type_warn (e->value.op.op1, &e->ts, 2, wconversion);
867       goto done;
868     }
869
870   /* Real combined with complex.  */
871   e->ts.type = BT_COMPLEX;
872   if (op1->ts.kind > op2->ts.kind)
873     e->ts.kind = op1->ts.kind;
874   else
875     e->ts.kind = op2->ts.kind;
876   if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
877     gfc_convert_type_warn (e->value.op.op1, &e->ts, 2, wconversion);
878   if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
879     gfc_convert_type_warn (e->value.op.op2, &e->ts, 2, wconversion);
880
881 done:
882   return;
883 }
884
885
886 /* Function to determine if an expression is constant or not.  This
887    function expects that the expression has already been simplified.  */
888
889 int
890 gfc_is_constant_expr (gfc_expr *e)
891 {
892   gfc_constructor *c;
893   gfc_actual_arglist *arg;
894   gfc_symbol *sym;
895
896   if (e == NULL)
897     return 1;
898
899   switch (e->expr_type)
900     {
901     case EXPR_OP:
902       return (gfc_is_constant_expr (e->value.op.op1)
903               && (e->value.op.op2 == NULL
904                   || gfc_is_constant_expr (e->value.op.op2)));
905
906     case EXPR_VARIABLE:
907       return 0;
908
909     case EXPR_FUNCTION:
910     case EXPR_PPC:
911     case EXPR_COMPCALL:
912       gcc_assert (e->symtree || e->value.function.esym
913                   || e->value.function.isym);
914
915       /* Call to intrinsic with at least one argument.  */
916       if (e->value.function.isym && e->value.function.actual)
917         {
918           for (arg = e->value.function.actual; arg; arg = arg->next)
919             if (!gfc_is_constant_expr (arg->expr))
920               return 0;
921         }
922
923       /* Specification functions are constant.  */
924       /* F95, 7.1.6.2; F2003, 7.1.7  */
925       sym = NULL;
926       if (e->symtree)
927         sym = e->symtree->n.sym;
928       if (e->value.function.esym)
929         sym = e->value.function.esym;
930
931       if (sym
932           && sym->attr.function
933           && sym->attr.pure
934           && !sym->attr.intrinsic
935           && !sym->attr.recursive
936           && sym->attr.proc != PROC_INTERNAL
937           && sym->attr.proc != PROC_ST_FUNCTION
938           && sym->attr.proc != PROC_UNKNOWN
939           && gfc_sym_get_dummy_args (sym) == NULL)
940         return 1;
941
942       if (e->value.function.isym
943           && (e->value.function.isym->elemental
944               || e->value.function.isym->pure
945               || e->value.function.isym->inquiry
946               || e->value.function.isym->transformational))
947         return 1;
948
949       return 0;
950
951     case EXPR_CONSTANT:
952     case EXPR_NULL:
953       return 1;
954
955     case EXPR_SUBSTRING:
956       return e->ref == NULL || (gfc_is_constant_expr (e->ref->u.ss.start)
957                                 && gfc_is_constant_expr (e->ref->u.ss.end));
958
959     case EXPR_ARRAY:
960     case EXPR_STRUCTURE:
961       c = gfc_constructor_first (e->value.constructor);
962       if ((e->expr_type == EXPR_ARRAY) && c && c->iterator)
963         return gfc_constant_ac (e);
964
965       for (; c; c = gfc_constructor_next (c))
966         if (!gfc_is_constant_expr (c->expr))
967           return 0;
968
969       return 1;
970
971
972     default:
973       gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
974       return 0;
975     }
976 }
977
978
979 /* Is true if an array reference is followed by a component or substring
980    reference.  */
981 bool
982 is_subref_array (gfc_expr * e)
983 {
984   gfc_ref * ref;
985   bool seen_array;
986
987   if (e->expr_type != EXPR_VARIABLE)
988     return false;
989
990   if (e->symtree->n.sym->attr.subref_array_pointer)
991     return true;
992
993   seen_array = false;
994   for (ref = e->ref; ref; ref = ref->next)
995     {
996       if (ref->type == REF_ARRAY
997             && ref->u.ar.type != AR_ELEMENT)
998         seen_array = true;
999
1000       if (seen_array
1001             && ref->type != REF_ARRAY)
1002         return seen_array;
1003     }
1004   return false;
1005 }
1006
1007
1008 /* Try to collapse intrinsic expressions.  */
1009
1010 static bool
1011 simplify_intrinsic_op (gfc_expr *p, int type)
1012 {
1013   gfc_intrinsic_op op;
1014   gfc_expr *op1, *op2, *result;
1015
1016   if (p->value.op.op == INTRINSIC_USER)
1017     return true;
1018
1019   op1 = p->value.op.op1;
1020   op2 = p->value.op.op2;
1021   op  = p->value.op.op;
1022
1023   if (!gfc_simplify_expr (op1, type))
1024     return false;
1025   if (!gfc_simplify_expr (op2, type))
1026     return false;
1027
1028   if (!gfc_is_constant_expr (op1)
1029       || (op2 != NULL && !gfc_is_constant_expr (op2)))
1030     return true;
1031
1032   /* Rip p apart.  */
1033   p->value.op.op1 = NULL;
1034   p->value.op.op2 = NULL;
1035
1036   switch (op)
1037     {
1038     case INTRINSIC_PARENTHESES:
1039       result = gfc_parentheses (op1);
1040       break;
1041
1042     case INTRINSIC_UPLUS:
1043       result = gfc_uplus (op1);
1044       break;
1045
1046     case INTRINSIC_UMINUS:
1047       result = gfc_uminus (op1);
1048       break;
1049
1050     case INTRINSIC_PLUS:
1051       result = gfc_add (op1, op2);
1052       break;
1053
1054     case INTRINSIC_MINUS:
1055       result = gfc_subtract (op1, op2);
1056       break;
1057
1058     case INTRINSIC_TIMES:
1059       result = gfc_multiply (op1, op2);
1060       break;
1061
1062     case INTRINSIC_DIVIDE:
1063       result = gfc_divide (op1, op2);
1064       break;
1065
1066     case INTRINSIC_POWER:
1067       result = gfc_power (op1, op2);
1068       break;
1069
1070     case INTRINSIC_CONCAT:
1071       result = gfc_concat (op1, op2);
1072       break;
1073
1074     case INTRINSIC_EQ:
1075     case INTRINSIC_EQ_OS:
1076       result = gfc_eq (op1, op2, op);
1077       break;
1078
1079     case INTRINSIC_NE:
1080     case INTRINSIC_NE_OS:
1081       result = gfc_ne (op1, op2, op);
1082       break;
1083
1084     case INTRINSIC_GT:
1085     case INTRINSIC_GT_OS:
1086       result = gfc_gt (op1, op2, op);
1087       break;
1088
1089     case INTRINSIC_GE:
1090     case INTRINSIC_GE_OS:
1091       result = gfc_ge (op1, op2, op);
1092       break;
1093
1094     case INTRINSIC_LT:
1095     case INTRINSIC_LT_OS:
1096       result = gfc_lt (op1, op2, op);
1097       break;
1098
1099     case INTRINSIC_LE:
1100     case INTRINSIC_LE_OS:
1101       result = gfc_le (op1, op2, op);
1102       break;
1103
1104     case INTRINSIC_NOT:
1105       result = gfc_not (op1);
1106       break;
1107
1108     case INTRINSIC_AND:
1109       result = gfc_and (op1, op2);
1110       break;
1111
1112     case INTRINSIC_OR:
1113       result = gfc_or (op1, op2);
1114       break;
1115
1116     case INTRINSIC_EQV:
1117       result = gfc_eqv (op1, op2);
1118       break;
1119
1120     case INTRINSIC_NEQV:
1121       result = gfc_neqv (op1, op2);
1122       break;
1123
1124     default:
1125       gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
1126     }
1127
1128   if (result == NULL)
1129     {
1130       gfc_free_expr (op1);
1131       gfc_free_expr (op2);
1132       return false;
1133     }
1134
1135   result->rank = p->rank;
1136   result->where = p->where;
1137   gfc_replace_expr (p, result);
1138
1139   return true;
1140 }
1141
1142
1143 /* Subroutine to simplify constructor expressions.  Mutually recursive
1144    with gfc_simplify_expr().  */
1145
1146 static bool
1147 simplify_constructor (gfc_constructor_base base, int type)
1148 {
1149   gfc_constructor *c;
1150   gfc_expr *p;
1151
1152   for (c = gfc_constructor_first (base); c; c = gfc_constructor_next (c))
1153     {
1154       if (c->iterator
1155           && (!gfc_simplify_expr(c->iterator->start, type)
1156               || !gfc_simplify_expr (c->iterator->end, type)
1157               || !gfc_simplify_expr (c->iterator->step, type)))
1158         return false;
1159
1160       if (c->expr)
1161         {
1162           /* Try and simplify a copy.  Replace the original if successful
1163              but keep going through the constructor at all costs.  Not
1164              doing so can make a dog's dinner of complicated things.  */
1165           p = gfc_copy_expr (c->expr);
1166
1167           if (!gfc_simplify_expr (p, type))
1168             {
1169               gfc_free_expr (p);
1170               continue;
1171             }
1172
1173           gfc_replace_expr (c->expr, p);
1174         }
1175     }
1176
1177   return true;
1178 }
1179
1180
1181 /* Pull a single array element out of an array constructor.  */
1182
1183 static bool
1184 find_array_element (gfc_constructor_base base, gfc_array_ref *ar,
1185                     gfc_constructor **rval)
1186 {
1187   unsigned long nelemen;
1188   int i;
1189   mpz_t delta;
1190   mpz_t offset;
1191   mpz_t span;
1192   mpz_t tmp;
1193   gfc_constructor *cons;
1194   gfc_expr *e;
1195   bool t;
1196
1197   t = true;
1198   e = NULL;
1199
1200   mpz_init_set_ui (offset, 0);
1201   mpz_init (delta);
1202   mpz_init (tmp);
1203   mpz_init_set_ui (span, 1);
1204   for (i = 0; i < ar->dimen; i++)
1205     {
1206       if (!gfc_reduce_init_expr (ar->as->lower[i])
1207           || !gfc_reduce_init_expr (ar->as->upper[i]))
1208         {
1209           t = false;
1210           cons = NULL;
1211           goto depart;
1212         }
1213
1214       e = ar->start[i];
1215       if (e->expr_type != EXPR_CONSTANT)
1216         {
1217           cons = NULL;
1218           goto depart;
1219         }
1220
1221       gcc_assert (ar->as->upper[i]->expr_type == EXPR_CONSTANT
1222                   && ar->as->lower[i]->expr_type == EXPR_CONSTANT);
1223
1224       /* Check the bounds.  */
1225       if ((ar->as->upper[i]
1226            && mpz_cmp (e->value.integer,
1227                        ar->as->upper[i]->value.integer) > 0)
1228           || (mpz_cmp (e->value.integer,
1229                        ar->as->lower[i]->value.integer) < 0))
1230         {
1231           gfc_error ("Index in dimension %d is out of bounds "
1232                      "at %L", i + 1, &ar->c_where[i]);
1233           cons = NULL;
1234           t = false;
1235           goto depart;
1236         }
1237
1238       mpz_sub (delta, e->value.integer, ar->as->lower[i]->value.integer);
1239       mpz_mul (delta, delta, span);
1240       mpz_add (offset, offset, delta);
1241
1242       mpz_set_ui (tmp, 1);
1243       mpz_add (tmp, tmp, ar->as->upper[i]->value.integer);
1244       mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer);
1245       mpz_mul (span, span, tmp);
1246     }
1247
1248   for (cons = gfc_constructor_first (base), nelemen = mpz_get_ui (offset);
1249        cons && nelemen > 0; cons = gfc_constructor_next (cons), nelemen--)
1250     {
1251       if (cons->iterator)
1252         {
1253           cons = NULL;
1254           goto depart;
1255         }
1256     }
1257
1258 depart:
1259   mpz_clear (delta);
1260   mpz_clear (offset);
1261   mpz_clear (span);
1262   mpz_clear (tmp);
1263   *rval = cons;
1264   return t;
1265 }
1266
1267
1268 /* Find a component of a structure constructor.  */
1269
1270 static gfc_constructor *
1271 find_component_ref (gfc_constructor_base base, gfc_ref *ref)
1272 {
1273   gfc_component *pick = ref->u.c.component;
1274   gfc_constructor *c = gfc_constructor_first (base);
1275
1276   gfc_symbol *dt = ref->u.c.sym;
1277   int ext = dt->attr.extension;
1278
1279   /* For extended types, check if the desired component is in one of the
1280    * parent types.  */
1281   while (ext > 0 && gfc_find_component (dt->components->ts.u.derived,
1282                                         pick->name, true, true))
1283     {
1284       dt = dt->components->ts.u.derived;
1285       c = gfc_constructor_first (c->expr->value.constructor);
1286       ext--;
1287     }
1288
1289   gfc_component *comp = dt->components;
1290   while (comp != pick)
1291     {
1292       comp = comp->next;
1293       c = gfc_constructor_next (c);
1294     }
1295
1296   return c;
1297 }
1298
1299
1300 /* Replace an expression with the contents of a constructor, removing
1301    the subobject reference in the process.  */
1302
1303 static void
1304 remove_subobject_ref (gfc_expr *p, gfc_constructor *cons)
1305 {
1306   gfc_expr *e;
1307
1308   if (cons)
1309     {
1310       e = cons->expr;
1311       cons->expr = NULL;
1312     }
1313   else
1314     e = gfc_copy_expr (p);
1315   e->ref = p->ref->next;
1316   p->ref->next =  NULL;
1317   gfc_replace_expr (p, e);
1318 }
1319
1320
1321 /* Pull an array section out of an array constructor.  */
1322
1323 static bool
1324 find_array_section (gfc_expr *expr, gfc_ref *ref)
1325 {
1326   int idx;
1327   int rank;
1328   int d;
1329   int shape_i;
1330   int limit;
1331   long unsigned one = 1;
1332   bool incr_ctr;
1333   mpz_t start[GFC_MAX_DIMENSIONS];
1334   mpz_t end[GFC_MAX_DIMENSIONS];
1335   mpz_t stride[GFC_MAX_DIMENSIONS];
1336   mpz_t delta[GFC_MAX_DIMENSIONS];
1337   mpz_t ctr[GFC_MAX_DIMENSIONS];
1338   mpz_t delta_mpz;
1339   mpz_t tmp_mpz;
1340   mpz_t nelts;
1341   mpz_t ptr;
1342   gfc_constructor_base base;
1343   gfc_constructor *cons, *vecsub[GFC_MAX_DIMENSIONS];
1344   gfc_expr *begin;
1345   gfc_expr *finish;
1346   gfc_expr *step;
1347   gfc_expr *upper;
1348   gfc_expr *lower;
1349   bool t;
1350
1351   t = true;
1352
1353   base = expr->value.constructor;
1354   expr->value.constructor = NULL;
1355
1356   rank = ref->u.ar.as->rank;
1357
1358   if (expr->shape == NULL)
1359     expr->shape = gfc_get_shape (rank);
1360
1361   mpz_init_set_ui (delta_mpz, one);
1362   mpz_init_set_ui (nelts, one);
1363   mpz_init (tmp_mpz);
1364
1365   /* Do the initialization now, so that we can cleanup without
1366      keeping track of where we were.  */
1367   for (d = 0; d < rank; d++)
1368     {
1369       mpz_init (delta[d]);
1370       mpz_init (start[d]);
1371       mpz_init (end[d]);
1372       mpz_init (ctr[d]);
1373       mpz_init (stride[d]);
1374       vecsub[d] = NULL;
1375     }
1376
1377   /* Build the counters to clock through the array reference.  */
1378   shape_i = 0;
1379   for (d = 0; d < rank; d++)
1380     {
1381       /* Make this stretch of code easier on the eye!  */
1382       begin = ref->u.ar.start[d];
1383       finish = ref->u.ar.end[d];
1384       step = ref->u.ar.stride[d];
1385       lower = ref->u.ar.as->lower[d];
1386       upper = ref->u.ar.as->upper[d];
1387
1388       if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR)  /* Vector subscript.  */
1389         {
1390           gfc_constructor *ci;
1391           gcc_assert (begin);
1392
1393           if (begin->expr_type != EXPR_ARRAY || !gfc_is_constant_expr (begin))
1394             {
1395               t = false;
1396               goto cleanup;
1397             }
1398
1399           gcc_assert (begin->rank == 1);
1400           /* Zero-sized arrays have no shape and no elements, stop early.  */
1401           if (!begin->shape)
1402             {
1403               mpz_init_set_ui (nelts, 0);
1404               break;
1405             }
1406
1407           vecsub[d] = gfc_constructor_first (begin->value.constructor);
1408           mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1409           mpz_mul (nelts, nelts, begin->shape[0]);
1410           mpz_set (expr->shape[shape_i++], begin->shape[0]);
1411
1412           /* Check bounds.  */
1413           for (ci = vecsub[d]; ci; ci = gfc_constructor_next (ci))
1414             {
1415               if (mpz_cmp (ci->expr->value.integer, upper->value.integer) > 0
1416                   || mpz_cmp (ci->expr->value.integer,
1417                               lower->value.integer) < 0)
1418                 {
1419                   gfc_error ("index in dimension %d is out of bounds "
1420                              "at %L", d + 1, &ref->u.ar.c_where[d]);
1421                   t = false;
1422                   goto cleanup;
1423                 }
1424             }
1425         }
1426       else
1427         {
1428           if ((begin && begin->expr_type != EXPR_CONSTANT)
1429               || (finish && finish->expr_type != EXPR_CONSTANT)
1430               || (step && step->expr_type != EXPR_CONSTANT))
1431             {
1432               t = false;
1433               goto cleanup;
1434             }
1435
1436           /* Obtain the stride.  */
1437           if (step)
1438             mpz_set (stride[d], step->value.integer);
1439           else
1440             mpz_set_ui (stride[d], one);
1441
1442           if (mpz_cmp_ui (stride[d], 0) == 0)
1443             mpz_set_ui (stride[d], one);
1444
1445           /* Obtain the start value for the index.  */
1446           if (begin)
1447             mpz_set (start[d], begin->value.integer);
1448           else
1449             mpz_set (start[d], lower->value.integer);
1450
1451           mpz_set (ctr[d], start[d]);
1452
1453           /* Obtain the end value for the index.  */
1454           if (finish)
1455             mpz_set (end[d], finish->value.integer);
1456           else
1457             mpz_set (end[d], upper->value.integer);
1458
1459           /* Separate 'if' because elements sometimes arrive with
1460              non-null end.  */
1461           if (ref->u.ar.dimen_type[d] == DIMEN_ELEMENT)
1462             mpz_set (end [d], begin->value.integer);
1463
1464           /* Check the bounds.  */
1465           if (mpz_cmp (ctr[d], upper->value.integer) > 0
1466               || mpz_cmp (end[d], upper->value.integer) > 0
1467               || mpz_cmp (ctr[d], lower->value.integer) < 0
1468               || mpz_cmp (end[d], lower->value.integer) < 0)
1469             {
1470               gfc_error ("index in dimension %d is out of bounds "
1471                          "at %L", d + 1, &ref->u.ar.c_where[d]);
1472               t = false;
1473               goto cleanup;
1474             }
1475
1476           /* Calculate the number of elements and the shape.  */
1477           mpz_set (tmp_mpz, stride[d]);
1478           mpz_add (tmp_mpz, end[d], tmp_mpz);
1479           mpz_sub (tmp_mpz, tmp_mpz, ctr[d]);
1480           mpz_div (tmp_mpz, tmp_mpz, stride[d]);
1481           mpz_mul (nelts, nelts, tmp_mpz);
1482
1483           /* An element reference reduces the rank of the expression; don't
1484              add anything to the shape array.  */
1485           if (ref->u.ar.dimen_type[d] != DIMEN_ELEMENT)
1486             mpz_set (expr->shape[shape_i++], tmp_mpz);
1487         }
1488
1489       /* Calculate the 'stride' (=delta) for conversion of the
1490          counter values into the index along the constructor.  */
1491       mpz_set (delta[d], delta_mpz);
1492       mpz_sub (tmp_mpz, upper->value.integer, lower->value.integer);
1493       mpz_add_ui (tmp_mpz, tmp_mpz, one);
1494       mpz_mul (delta_mpz, delta_mpz, tmp_mpz);
1495     }
1496
1497   mpz_init (ptr);
1498   cons = gfc_constructor_first (base);
1499
1500   /* Now clock through the array reference, calculating the index in
1501      the source constructor and transferring the elements to the new
1502      constructor.  */
1503   for (idx = 0; idx < (int) mpz_get_si (nelts); idx++)
1504     {
1505       mpz_init_set_ui (ptr, 0);
1506
1507       incr_ctr = true;
1508       for (d = 0; d < rank; d++)
1509         {
1510           mpz_set (tmp_mpz, ctr[d]);
1511           mpz_sub (tmp_mpz, tmp_mpz, ref->u.ar.as->lower[d]->value.integer);
1512           mpz_mul (tmp_mpz, tmp_mpz, delta[d]);
1513           mpz_add (ptr, ptr, tmp_mpz);
1514
1515           if (!incr_ctr) continue;
1516
1517           if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript.  */
1518             {
1519               gcc_assert(vecsub[d]);
1520
1521               if (!gfc_constructor_next (vecsub[d]))
1522                 vecsub[d] = gfc_constructor_first (ref->u.ar.start[d]->value.constructor);
1523               else
1524                 {
1525                   vecsub[d] = gfc_constructor_next (vecsub[d]);
1526                   incr_ctr = false;
1527                 }
1528               mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1529             }
1530           else
1531             {
1532               mpz_add (ctr[d], ctr[d], stride[d]);
1533
1534               if (mpz_cmp_ui (stride[d], 0) > 0
1535                   ? mpz_cmp (ctr[d], end[d]) > 0
1536                   : mpz_cmp (ctr[d], end[d]) < 0)
1537                 mpz_set (ctr[d], start[d]);
1538               else
1539                 incr_ctr = false;
1540             }
1541         }
1542
1543       limit = mpz_get_ui (ptr);
1544       if (limit >= flag_max_array_constructor)
1545         {
1546           gfc_error ("The number of elements in the array constructor "
1547                      "at %L requires an increase of the allowed %d "
1548                      "upper limit.   See -fmax-array-constructor "
1549                      "option", &expr->where, flag_max_array_constructor);
1550           return false;
1551         }
1552
1553       cons = gfc_constructor_lookup (base, limit);
1554       gcc_assert (cons);
1555       gfc_constructor_append_expr (&expr->value.constructor,
1556                                    gfc_copy_expr (cons->expr), NULL);
1557     }
1558
1559   mpz_clear (ptr);
1560
1561 cleanup:
1562
1563   mpz_clear (delta_mpz);
1564   mpz_clear (tmp_mpz);
1565   mpz_clear (nelts);
1566   for (d = 0; d < rank; d++)
1567     {
1568       mpz_clear (delta[d]);
1569       mpz_clear (start[d]);
1570       mpz_clear (end[d]);
1571       mpz_clear (ctr[d]);
1572       mpz_clear (stride[d]);
1573     }
1574   gfc_constructor_free (base);
1575   return t;
1576 }
1577
1578 /* Pull a substring out of an expression.  */
1579
1580 static bool
1581 find_substring_ref (gfc_expr *p, gfc_expr **newp)
1582 {
1583   int end;
1584   int start;
1585   int length;
1586   gfc_char_t *chr;
1587
1588   if (p->ref->u.ss.start->expr_type != EXPR_CONSTANT
1589       || p->ref->u.ss.end->expr_type != EXPR_CONSTANT)
1590     return false;
1591
1592   *newp = gfc_copy_expr (p);
1593   free ((*newp)->value.character.string);
1594
1595   end = (int) mpz_get_ui (p->ref->u.ss.end->value.integer);
1596   start = (int) mpz_get_ui (p->ref->u.ss.start->value.integer);
1597   length = end - start + 1;
1598
1599   chr = (*newp)->value.character.string = gfc_get_wide_string (length + 1);
1600   (*newp)->value.character.length = length;
1601   memcpy (chr, &p->value.character.string[start - 1],
1602           length * sizeof (gfc_char_t));
1603   chr[length] = '\0';
1604   return true;
1605 }
1606
1607
1608
1609 /* Simplify a subobject reference of a constructor.  This occurs when
1610    parameter variable values are substituted.  */
1611
1612 static bool
1613 simplify_const_ref (gfc_expr *p)
1614 {
1615   gfc_constructor *cons, *c;
1616   gfc_expr *newp;
1617   gfc_ref *last_ref;
1618
1619   while (p->ref)
1620     {
1621       switch (p->ref->type)
1622         {
1623         case REF_ARRAY:
1624           switch (p->ref->u.ar.type)
1625             {
1626             case AR_ELEMENT:
1627               /* <type/kind spec>, parameter :: x(<int>) = scalar_expr
1628                  will generate this.  */
1629               if (p->expr_type != EXPR_ARRAY)
1630                 {
1631                   remove_subobject_ref (p, NULL);
1632                   break;
1633                 }
1634               if (!find_array_element (p->value.constructor, &p->ref->u.ar, &cons))
1635                 return false;
1636
1637               if (!cons)
1638                 return true;
1639
1640               remove_subobject_ref (p, cons);
1641               break;
1642
1643             case AR_SECTION:
1644               if (!find_array_section (p, p->ref))
1645                 return false;
1646               p->ref->u.ar.type = AR_FULL;
1647
1648             /* Fall through.  */
1649
1650             case AR_FULL:
1651               if (p->ref->next != NULL
1652                   && (p->ts.type == BT_CHARACTER || p->ts.type == BT_DERIVED))
1653                 {
1654                   for (c = gfc_constructor_first (p->value.constructor);
1655                        c; c = gfc_constructor_next (c))
1656                     {
1657                       c->expr->ref = gfc_copy_ref (p->ref->next);
1658                       if (!simplify_const_ref (c->expr))
1659                         return false;
1660                     }
1661
1662                   if (p->ts.type == BT_DERIVED
1663                         && p->ref->next
1664                         && (c = gfc_constructor_first (p->value.constructor)))
1665                     {
1666                       /* There may have been component references.  */
1667                       p->ts = c->expr->ts;
1668                     }
1669
1670                   last_ref = p->ref;
1671                   for (; last_ref->next; last_ref = last_ref->next) {};
1672
1673                   if (p->ts.type == BT_CHARACTER
1674                         && last_ref->type == REF_SUBSTRING)
1675                     {
1676                       /* If this is a CHARACTER array and we possibly took
1677                          a substring out of it, update the type-spec's
1678                          character length according to the first element
1679                          (as all should have the same length).  */
1680                       int string_len;
1681                       if ((c = gfc_constructor_first (p->value.constructor)))
1682                         {
1683                           const gfc_expr* first = c->expr;
1684                           gcc_assert (first->expr_type == EXPR_CONSTANT);
1685                           gcc_assert (first->ts.type == BT_CHARACTER);
1686                           string_len = first->value.character.length;
1687                         }
1688                       else
1689                         string_len = 0;
1690
1691                       if (!p->ts.u.cl)
1692                         p->ts.u.cl = gfc_new_charlen (p->symtree->n.sym->ns,
1693                                                       NULL);
1694                       else
1695                         gfc_free_expr (p->ts.u.cl->length);
1696
1697                       p->ts.u.cl->length
1698                         = gfc_get_int_expr (gfc_default_integer_kind,
1699                                             NULL, string_len);
1700                     }
1701                 }
1702               gfc_free_ref_list (p->ref);
1703               p->ref = NULL;
1704               break;
1705
1706             default:
1707               return true;
1708             }
1709
1710           break;
1711
1712         case REF_COMPONENT:
1713           cons = find_component_ref (p->value.constructor, p->ref);
1714           remove_subobject_ref (p, cons);
1715           break;
1716
1717         case REF_SUBSTRING:
1718           if (!find_substring_ref (p, &newp))
1719             return false;
1720
1721           gfc_replace_expr (p, newp);
1722           gfc_free_ref_list (p->ref);
1723           p->ref = NULL;
1724           break;
1725         }
1726     }
1727
1728   return true;
1729 }
1730
1731
1732 /* Simplify a chain of references.  */
1733
1734 static bool
1735 simplify_ref_chain (gfc_ref *ref, int type)
1736 {
1737   int n;
1738
1739   for (; ref; ref = ref->next)
1740     {
1741       switch (ref->type)
1742         {
1743         case REF_ARRAY:
1744           for (n = 0; n < ref->u.ar.dimen; n++)
1745             {
1746               if (!gfc_simplify_expr (ref->u.ar.start[n], type))
1747                 return false;
1748               if (!gfc_simplify_expr (ref->u.ar.end[n], type))
1749                 return false;
1750               if (!gfc_simplify_expr (ref->u.ar.stride[n], type))
1751                 return false;
1752             }
1753           break;
1754
1755         case REF_SUBSTRING:
1756           if (!gfc_simplify_expr (ref->u.ss.start, type))
1757             return false;
1758           if (!gfc_simplify_expr (ref->u.ss.end, type))
1759             return false;
1760           break;
1761
1762         default:
1763           break;
1764         }
1765     }
1766   return true;
1767 }
1768
1769
1770 /* Try to substitute the value of a parameter variable.  */
1771
1772 static bool
1773 simplify_parameter_variable (gfc_expr *p, int type)
1774 {
1775   gfc_expr *e;
1776   bool t;
1777
1778   e = gfc_copy_expr (p->symtree->n.sym->value);
1779   if (e == NULL)
1780     return false;
1781
1782   e->rank = p->rank;
1783
1784   /* Do not copy subobject refs for constant.  */
1785   if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
1786     e->ref = gfc_copy_ref (p->ref);
1787   t = gfc_simplify_expr (e, type);
1788
1789   /* Only use the simplification if it eliminated all subobject references.  */
1790   if (t && !e->ref)
1791     gfc_replace_expr (p, e);
1792   else
1793     gfc_free_expr (e);
1794
1795   return t;
1796 }
1797
1798 /* Given an expression, simplify it by collapsing constant
1799    expressions.  Most simplification takes place when the expression
1800    tree is being constructed.  If an intrinsic function is simplified
1801    at some point, we get called again to collapse the result against
1802    other constants.
1803
1804    We work by recursively simplifying expression nodes, simplifying
1805    intrinsic functions where possible, which can lead to further
1806    constant collapsing.  If an operator has constant operand(s), we
1807    rip the expression apart, and rebuild it, hoping that it becomes
1808    something simpler.
1809
1810    The expression type is defined for:
1811      0   Basic expression parsing
1812      1   Simplifying array constructors -- will substitute
1813          iterator values.
1814    Returns false on error, true otherwise.
1815    NOTE: Will return true even if the expression can not be simplified.  */
1816
1817 bool
1818 gfc_simplify_expr (gfc_expr *p, int type)
1819 {
1820   gfc_actual_arglist *ap;
1821
1822   if (p == NULL)
1823     return true;
1824
1825   switch (p->expr_type)
1826     {
1827     case EXPR_CONSTANT:
1828     case EXPR_NULL:
1829       break;
1830
1831     case EXPR_FUNCTION:
1832       for (ap = p->value.function.actual; ap; ap = ap->next)
1833         if (!gfc_simplify_expr (ap->expr, type))
1834           return false;
1835
1836       if (p->value.function.isym != NULL
1837           && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1838         return false;
1839
1840       break;
1841
1842     case EXPR_SUBSTRING:
1843       if (!simplify_ref_chain (p->ref, type))
1844         return false;
1845
1846       if (gfc_is_constant_expr (p))
1847         {
1848           gfc_char_t *s;
1849           int start, end;
1850
1851           start = 0;
1852           if (p->ref && p->ref->u.ss.start)
1853             {
1854               gfc_extract_int (p->ref->u.ss.start, &start);
1855               start--;  /* Convert from one-based to zero-based.  */
1856             }
1857
1858           end = p->value.character.length;
1859           if (p->ref && p->ref->u.ss.end)
1860             gfc_extract_int (p->ref->u.ss.end, &end);
1861
1862           if (end < start)
1863             end = start;
1864
1865           s = gfc_get_wide_string (end - start + 2);
1866           memcpy (s, p->value.character.string + start,
1867                   (end - start) * sizeof (gfc_char_t));
1868           s[end - start + 1] = '\0';  /* TODO: C-style string.  */
1869           free (p->value.character.string);
1870           p->value.character.string = s;
1871           p->value.character.length = end - start;
1872           p->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL);
1873           p->ts.u.cl->length = gfc_get_int_expr (gfc_default_integer_kind,
1874                                                  NULL,
1875                                                  p->value.character.length);
1876           gfc_free_ref_list (p->ref);
1877           p->ref = NULL;
1878           p->expr_type = EXPR_CONSTANT;
1879         }
1880       break;
1881
1882     case EXPR_OP:
1883       if (!simplify_intrinsic_op (p, type))
1884         return false;
1885       break;
1886
1887     case EXPR_VARIABLE:
1888       /* Only substitute array parameter variables if we are in an
1889          initialization expression, or we want a subsection.  */
1890       if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1891           && (gfc_init_expr_flag || p->ref
1892               || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1893         {
1894           if (!simplify_parameter_variable (p, type))
1895             return false;
1896           break;
1897         }
1898
1899       if (type == 1)
1900         {
1901           gfc_simplify_iterator_var (p);
1902         }
1903
1904       /* Simplify subcomponent references.  */
1905       if (!simplify_ref_chain (p->ref, type))
1906         return false;
1907
1908       break;
1909
1910     case EXPR_STRUCTURE:
1911     case EXPR_ARRAY:
1912       if (!simplify_ref_chain (p->ref, type))
1913         return false;
1914
1915       if (!simplify_constructor (p->value.constructor, type))
1916         return false;
1917
1918       if (p->expr_type == EXPR_ARRAY && p->ref && p->ref->type == REF_ARRAY
1919           && p->ref->u.ar.type == AR_FULL)
1920           gfc_expand_constructor (p, false);
1921
1922       if (!simplify_const_ref (p))
1923         return false;
1924
1925       break;
1926
1927     case EXPR_COMPCALL:
1928     case EXPR_PPC:
1929       break;
1930     }
1931
1932   return true;
1933 }
1934
1935
1936 /* Returns the type of an expression with the exception that iterator
1937    variables are automatically integers no matter what else they may
1938    be declared as.  */
1939
1940 static bt
1941 et0 (gfc_expr *e)
1942 {
1943   if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e))
1944     return BT_INTEGER;
1945
1946   return e->ts.type;
1947 }
1948
1949
1950 /* Scalarize an expression for an elemental intrinsic call.  */
1951
1952 static bool
1953 scalarize_intrinsic_call (gfc_expr *e)
1954 {
1955   gfc_actual_arglist *a, *b;
1956   gfc_constructor_base ctor;
1957   gfc_constructor *args[5];
1958   gfc_constructor *ci, *new_ctor;
1959   gfc_expr *expr, *old;
1960   int n, i, rank[5], array_arg;
1961
1962   /* Find which, if any, arguments are arrays.  Assume that the old
1963      expression carries the type information and that the first arg
1964      that is an array expression carries all the shape information.*/
1965   n = array_arg = 0;
1966   a = e->value.function.actual;
1967   for (; a; a = a->next)
1968     {
1969       n++;
1970       if (!a->expr || a->expr->expr_type != EXPR_ARRAY)
1971         continue;
1972       array_arg = n;
1973       expr = gfc_copy_expr (a->expr);
1974       break;
1975     }
1976
1977   if (!array_arg)
1978     return false;
1979
1980   old = gfc_copy_expr (e);
1981
1982   gfc_constructor_free (expr->value.constructor);
1983   expr->value.constructor = NULL;
1984   expr->ts = old->ts;
1985   expr->where = old->where;
1986   expr->expr_type = EXPR_ARRAY;
1987
1988   /* Copy the array argument constructors into an array, with nulls
1989      for the scalars.  */
1990   n = 0;
1991   a = old->value.function.actual;
1992   for (; a; a = a->next)
1993     {
1994       /* Check that this is OK for an initialization expression.  */
1995       if (a->expr && !gfc_check_init_expr (a->expr))
1996         goto cleanup;
1997
1998       rank[n] = 0;
1999       if (a->expr && a->expr->rank && a->expr->expr_type == EXPR_VARIABLE)
2000         {
2001           rank[n] = a->expr->rank;
2002           ctor = a->expr->symtree->n.sym->value->value.constructor;
2003           args[n] = gfc_constructor_first (ctor);
2004         }
2005       else if (a->expr && a->expr->expr_type == EXPR_ARRAY)
2006         {
2007           if (a->expr->rank)
2008             rank[n] = a->expr->rank;
2009           else
2010             rank[n] = 1;
2011           ctor = gfc_constructor_copy (a->expr->value.constructor);
2012           args[n] = gfc_constructor_first (ctor);
2013         }
2014       else
2015         args[n] = NULL;
2016
2017       n++;
2018     }
2019
2020
2021   /* Using the array argument as the master, step through the array
2022      calling the function for each element and advancing the array
2023      constructors together.  */
2024   for (ci = args[array_arg - 1]; ci; ci = gfc_constructor_next (ci))
2025     {
2026       new_ctor = gfc_constructor_append_expr (&expr->value.constructor,
2027                                               gfc_copy_expr (old), NULL);
2028
2029       gfc_free_actual_arglist (new_ctor->expr->value.function.actual);
2030       a = NULL;
2031       b = old->value.function.actual;
2032       for (i = 0; i < n; i++)
2033         {
2034           if (a == NULL)
2035             new_ctor->expr->value.function.actual
2036                         = a = gfc_get_actual_arglist ();
2037           else
2038             {
2039               a->next = gfc_get_actual_arglist ();
2040               a = a->next;
2041             }
2042
2043           if (args[i])
2044             a->expr = gfc_copy_expr (args[i]->expr);
2045           else
2046             a->expr = gfc_copy_expr (b->expr);
2047
2048           b = b->next;
2049         }
2050
2051       /* Simplify the function calls.  If the simplification fails, the
2052          error will be flagged up down-stream or the library will deal
2053          with it.  */
2054       gfc_simplify_expr (new_ctor->expr, 0);
2055
2056       for (i = 0; i < n; i++)
2057         if (args[i])
2058           args[i] = gfc_constructor_next (args[i]);
2059
2060       for (i = 1; i < n; i++)
2061         if (rank[i] && ((args[i] != NULL && args[array_arg - 1] == NULL)
2062                         || (args[i] == NULL && args[array_arg - 1] != NULL)))
2063           goto compliance;
2064     }
2065
2066   free_expr0 (e);
2067   *e = *expr;
2068   /* Free "expr" but not the pointers it contains.  */
2069   free (expr);
2070   gfc_free_expr (old);
2071   return true;
2072
2073 compliance:
2074   gfc_error_now ("elemental function arguments at %C are not compliant");
2075
2076 cleanup:
2077   gfc_free_expr (expr);
2078   gfc_free_expr (old);
2079   return false;
2080 }
2081
2082
2083 static bool
2084 check_intrinsic_op (gfc_expr *e, bool (*check_function) (gfc_expr *))
2085 {
2086   gfc_expr *op1 = e->value.op.op1;
2087   gfc_expr *op2 = e->value.op.op2;
2088
2089   if (!(*check_function)(op1))
2090     return false;
2091
2092   switch (e->value.op.op)
2093     {
2094     case INTRINSIC_UPLUS:
2095     case INTRINSIC_UMINUS:
2096       if (!numeric_type (et0 (op1)))
2097         goto not_numeric;
2098       break;
2099
2100     case INTRINSIC_EQ:
2101     case INTRINSIC_EQ_OS:
2102     case INTRINSIC_NE:
2103     case INTRINSIC_NE_OS:
2104     case INTRINSIC_GT:
2105     case INTRINSIC_GT_OS:
2106     case INTRINSIC_GE:
2107     case INTRINSIC_GE_OS:
2108     case INTRINSIC_LT:
2109     case INTRINSIC_LT_OS:
2110     case INTRINSIC_LE:
2111     case INTRINSIC_LE_OS:
2112       if (!(*check_function)(op2))
2113         return false;
2114
2115       if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
2116           && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
2117         {
2118           gfc_error ("Numeric or CHARACTER operands are required in "
2119                      "expression at %L", &e->where);
2120          return false;
2121         }
2122       break;
2123
2124     case INTRINSIC_PLUS:
2125     case INTRINSIC_MINUS:
2126     case INTRINSIC_TIMES:
2127     case INTRINSIC_DIVIDE:
2128     case INTRINSIC_POWER:
2129       if (!(*check_function)(op2))
2130         return false;
2131
2132       if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
2133         goto not_numeric;
2134
2135       break;
2136
2137     case INTRINSIC_CONCAT:
2138       if (!(*check_function)(op2))
2139         return false;
2140
2141       if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
2142         {
2143           gfc_error ("Concatenation operator in expression at %L "
2144                      "must have two CHARACTER operands", &op1->where);
2145           return false;
2146         }
2147
2148       if (op1->ts.kind != op2->ts.kind)
2149         {
2150           gfc_error ("Concat operator at %L must concatenate strings of the "
2151                      "same kind", &e->where);
2152           return false;
2153         }
2154
2155       break;
2156
2157     case INTRINSIC_NOT:
2158       if (et0 (op1) != BT_LOGICAL)
2159         {
2160           gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
2161                      "operand", &op1->where);
2162           return false;
2163         }
2164
2165       break;
2166
2167     case INTRINSIC_AND:
2168     case INTRINSIC_OR:
2169     case INTRINSIC_EQV:
2170     case INTRINSIC_NEQV:
2171       if (!(*check_function)(op2))
2172         return false;
2173
2174       if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
2175         {
2176           gfc_error ("LOGICAL operands are required in expression at %L",
2177                      &e->where);
2178           return false;
2179         }
2180
2181       break;
2182
2183     case INTRINSIC_PARENTHESES:
2184       break;
2185
2186     default:
2187       gfc_error ("Only intrinsic operators can be used in expression at %L",
2188                  &e->where);
2189       return false;
2190     }
2191
2192   return true;
2193
2194 not_numeric:
2195   gfc_error ("Numeric operands are required in expression at %L", &e->where);
2196
2197   return false;
2198 }
2199
2200 /* F2003, 7.1.7 (3): In init expression, allocatable components
2201    must not be data-initialized.  */
2202 static bool
2203 check_alloc_comp_init (gfc_expr *e)
2204 {
2205   gfc_component *comp;
2206   gfc_constructor *ctor;
2207
2208   gcc_assert (e->expr_type == EXPR_STRUCTURE);
2209   gcc_assert (e->ts.type == BT_DERIVED);
2210
2211   for (comp = e->ts.u.derived->components,
2212        ctor = gfc_constructor_first (e->value.constructor);
2213        comp; comp = comp->next, ctor = gfc_constructor_next (ctor))
2214     {
2215       if (comp->attr.allocatable && ctor->expr
2216           && ctor->expr->expr_type != EXPR_NULL)
2217         {
2218           gfc_error ("Invalid initialization expression for ALLOCATABLE "
2219                      "component %qs in structure constructor at %L",
2220                      comp->name, &ctor->expr->where);
2221           return false;
2222         }
2223     }
2224
2225   return true;
2226 }
2227
2228 static match
2229 check_init_expr_arguments (gfc_expr *e)
2230 {
2231   gfc_actual_arglist *ap;
2232
2233   for (ap = e->value.function.actual; ap; ap = ap->next)
2234     if (!gfc_check_init_expr (ap->expr))
2235       return MATCH_ERROR;
2236
2237   return MATCH_YES;
2238 }
2239
2240 static bool check_restricted (gfc_expr *);
2241
2242 /* F95, 7.1.6.1, Initialization expressions, (7)
2243    F2003, 7.1.7 Initialization expression, (8)  */
2244
2245 static match
2246 check_inquiry (gfc_expr *e, int not_restricted)
2247 {
2248   const char *name;
2249   const char *const *functions;
2250
2251   static const char *const inquiry_func_f95[] = {
2252     "lbound", "shape", "size", "ubound",
2253     "bit_size", "len", "kind",
2254     "digits", "epsilon", "huge", "maxexponent", "minexponent",
2255     "precision", "radix", "range", "tiny",
2256     NULL
2257   };
2258
2259   static const char *const inquiry_func_f2003[] = {
2260     "lbound", "shape", "size", "ubound",
2261     "bit_size", "len", "kind",
2262     "digits", "epsilon", "huge", "maxexponent", "minexponent",
2263     "precision", "radix", "range", "tiny",
2264     "new_line", NULL
2265   };
2266
2267   int i = 0;
2268   gfc_actual_arglist *ap;
2269
2270   if (!e->value.function.isym
2271       || !e->value.function.isym->inquiry)
2272     return MATCH_NO;
2273
2274   /* An undeclared parameter will get us here (PR25018).  */
2275   if (e->symtree == NULL)
2276     return MATCH_NO;
2277
2278   if (e->symtree->n.sym->from_intmod)
2279     {
2280       if (e->symtree->n.sym->from_intmod == INTMOD_ISO_FORTRAN_ENV
2281           && e->symtree->n.sym->intmod_sym_id != ISOFORTRAN_COMPILER_OPTIONS
2282           && e->symtree->n.sym->intmod_sym_id != ISOFORTRAN_COMPILER_VERSION)
2283         return MATCH_NO;
2284
2285       if (e->symtree->n.sym->from_intmod == INTMOD_ISO_C_BINDING
2286           && e->symtree->n.sym->intmod_sym_id != ISOCBINDING_C_SIZEOF)
2287         return MATCH_NO;
2288     }
2289   else
2290     {
2291       name = e->symtree->n.sym->name;
2292
2293       functions = (gfc_option.warn_std & GFC_STD_F2003)
2294                 ? inquiry_func_f2003 : inquiry_func_f95;
2295
2296       for (i = 0; functions[i]; i++)
2297         if (strcmp (functions[i], name) == 0)
2298           break;
2299
2300         if (functions[i] == NULL)
2301           return MATCH_ERROR;
2302     }
2303
2304   /* At this point we have an inquiry function with a variable argument.  The
2305      type of the variable might be undefined, but we need it now, because the
2306      arguments of these functions are not allowed to be undefined.  */
2307
2308   for (ap = e->value.function.actual; ap; ap = ap->next)
2309     {
2310       if (!ap->expr)
2311         continue;
2312
2313       if (ap->expr->ts.type == BT_UNKNOWN)
2314         {
2315           if (ap->expr->symtree->n.sym->ts.type == BT_UNKNOWN
2316               && !gfc_set_default_type (ap->expr->symtree->n.sym, 0, gfc_current_ns))
2317             return MATCH_NO;
2318
2319           ap->expr->ts = ap->expr->symtree->n.sym->ts;
2320         }
2321
2322         /* Assumed character length will not reduce to a constant expression
2323            with LEN, as required by the standard.  */
2324         if (i == 5 && not_restricted
2325             && ap->expr->symtree->n.sym->ts.type == BT_CHARACTER
2326             && (ap->expr->symtree->n.sym->ts.u.cl->length == NULL
2327                 || ap->expr->symtree->n.sym->ts.deferred))
2328           {
2329             gfc_error ("Assumed or deferred character length variable %qs "
2330                         " in constant expression at %L",
2331                         ap->expr->symtree->n.sym->name,
2332                         &ap->expr->where);
2333               return MATCH_ERROR;
2334           }
2335         else if (not_restricted && !gfc_check_init_expr (ap->expr))
2336           return MATCH_ERROR;
2337
2338         if (not_restricted == 0
2339               && ap->expr->expr_type != EXPR_VARIABLE
2340               && !check_restricted (ap->expr))
2341           return MATCH_ERROR;
2342
2343         if (not_restricted == 0
2344             && ap->expr->expr_type == EXPR_VARIABLE
2345             && ap->expr->symtree->n.sym->attr.dummy
2346             && ap->expr->symtree->n.sym->attr.optional)
2347           return MATCH_NO;
2348     }
2349
2350   return MATCH_YES;
2351 }
2352
2353
2354 /* F95, 7.1.6.1, Initialization expressions, (5)
2355    F2003, 7.1.7 Initialization expression, (5)  */
2356
2357 static match
2358 check_transformational (gfc_expr *e)
2359 {
2360   static const char * const trans_func_f95[] = {
2361     "repeat", "reshape", "selected_int_kind",
2362     "selected_real_kind", "transfer", "trim", NULL
2363   };
2364
2365   static const char * const trans_func_f2003[] =  {
2366     "all", "any", "count", "dot_product", "matmul", "null", "pack",
2367     "product", "repeat", "reshape", "selected_char_kind", "selected_int_kind",
2368     "selected_real_kind", "spread", "sum", "transfer", "transpose",
2369     "trim", "unpack", NULL
2370   };
2371
2372   int i;
2373   const char *name;
2374   const char *const *functions;
2375
2376   if (!e->value.function.isym
2377       || !e->value.function.isym->transformational)
2378     return MATCH_NO;
2379
2380   name = e->symtree->n.sym->name;
2381
2382   functions = (gfc_option.allow_std & GFC_STD_F2003)
2383                 ? trans_func_f2003 : trans_func_f95;
2384
2385   /* NULL() is dealt with below.  */
2386   if (strcmp ("null", name) == 0)
2387     return MATCH_NO;
2388
2389   for (i = 0; functions[i]; i++)
2390     if (strcmp (functions[i], name) == 0)
2391        break;
2392
2393   if (functions[i] == NULL)
2394     {
2395       gfc_error ("transformational intrinsic %qs at %L is not permitted "
2396                  "in an initialization expression", name, &e->where);
2397       return MATCH_ERROR;
2398     }
2399
2400   return check_init_expr_arguments (e);
2401 }
2402
2403
2404 /* F95, 7.1.6.1, Initialization expressions, (6)
2405    F2003, 7.1.7 Initialization expression, (6)  */
2406
2407 static match
2408 check_null (gfc_expr *e)
2409 {
2410   if (strcmp ("null", e->symtree->n.sym->name) != 0)
2411     return MATCH_NO;
2412
2413   return check_init_expr_arguments (e);
2414 }
2415
2416
2417 static match
2418 check_elemental (gfc_expr *e)
2419 {
2420   if (!e->value.function.isym
2421       || !e->value.function.isym->elemental)
2422     return MATCH_NO;
2423
2424   if (e->ts.type != BT_INTEGER
2425       && e->ts.type != BT_CHARACTER
2426       && !gfc_notify_std (GFC_STD_F2003, "Evaluation of nonstandard "
2427                           "initialization expression at %L", &e->where))
2428     return MATCH_ERROR;
2429
2430   return check_init_expr_arguments (e);
2431 }
2432
2433
2434 static match
2435 check_conversion (gfc_expr *e)
2436 {
2437   if (!e->value.function.isym
2438       || !e->value.function.isym->conversion)
2439     return MATCH_NO;
2440
2441   return check_init_expr_arguments (e);
2442 }
2443
2444
2445 /* Verify that an expression is an initialization expression.  A side
2446    effect is that the expression tree is reduced to a single constant
2447    node if all goes well.  This would normally happen when the
2448    expression is constructed but function references are assumed to be
2449    intrinsics in the context of initialization expressions.  If
2450    false is returned an error message has been generated.  */
2451
2452 bool
2453 gfc_check_init_expr (gfc_expr *e)
2454 {
2455   match m;
2456   bool t;
2457
2458   if (e == NULL)
2459     return true;
2460
2461   switch (e->expr_type)
2462     {
2463     case EXPR_OP:
2464       t = check_intrinsic_op (e, gfc_check_init_expr);
2465       if (t)
2466         t = gfc_simplify_expr (e, 0);
2467
2468       break;
2469
2470     case EXPR_FUNCTION:
2471       t = false;
2472
2473       {
2474         gfc_intrinsic_sym* isym;
2475         gfc_symbol* sym = e->symtree->n.sym;
2476
2477         /* Special case for IEEE_SELECTED_REAL_KIND from the intrinsic
2478            module IEEE_ARITHMETIC, which is allowed in initialization
2479            expressions.  */
2480         if (!strcmp(sym->name, "ieee_selected_real_kind")
2481             && sym->from_intmod == INTMOD_IEEE_ARITHMETIC)
2482           {
2483             gfc_expr *new_expr = gfc_simplify_ieee_selected_real_kind (e);
2484             if (new_expr)
2485               {
2486                 gfc_replace_expr (e, new_expr);
2487                 t = true;
2488                 break;
2489               }
2490           }
2491
2492         if (!gfc_is_intrinsic (sym, 0, e->where)
2493             || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES)
2494           {
2495             gfc_error ("Function %qs in initialization expression at %L "
2496                        "must be an intrinsic function",
2497                        e->symtree->n.sym->name, &e->where);
2498             break;
2499           }
2500
2501         if ((m = check_conversion (e)) == MATCH_NO
2502             && (m = check_inquiry (e, 1)) == MATCH_NO
2503             && (m = check_null (e)) == MATCH_NO
2504             && (m = check_transformational (e)) == MATCH_NO
2505             && (m = check_elemental (e)) == MATCH_NO)
2506           {
2507             gfc_error ("Intrinsic function %qs at %L is not permitted "
2508                        "in an initialization expression",
2509                        e->symtree->n.sym->name, &e->where);
2510             m = MATCH_ERROR;
2511           }
2512
2513         if (m == MATCH_ERROR)
2514           return false;
2515
2516         /* Try to scalarize an elemental intrinsic function that has an
2517            array argument.  */
2518         isym = gfc_find_function (e->symtree->n.sym->name);
2519         if (isym && isym->elemental
2520             && (t = scalarize_intrinsic_call(e)))
2521           break;
2522       }
2523
2524       if (m == MATCH_YES)
2525         t = gfc_simplify_expr (e, 0);
2526
2527       break;
2528
2529     case EXPR_VARIABLE:
2530       t = true;
2531
2532       if (gfc_check_iter_variable (e))
2533         break;
2534
2535       if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
2536         {
2537           /* A PARAMETER shall not be used to define itself, i.e.
2538                 REAL, PARAMETER :: x = transfer(0, x)
2539              is invalid.  */
2540           if (!e->symtree->n.sym->value)
2541             {
2542               gfc_error ("PARAMETER %qs is used at %L before its definition "
2543                          "is complete", e->symtree->n.sym->name, &e->where);
2544               t = false;
2545             }
2546           else
2547             t = simplify_parameter_variable (e, 0);
2548
2549           break;
2550         }
2551
2552       if (gfc_in_match_data ())
2553         break;
2554
2555       t = false;
2556
2557       if (e->symtree->n.sym->as)
2558         {
2559           switch (e->symtree->n.sym->as->type)
2560             {
2561               case AS_ASSUMED_SIZE:
2562                 gfc_error ("Assumed size array %qs at %L is not permitted "
2563                            "in an initialization expression",
2564                            e->symtree->n.sym->name, &e->where);
2565                 break;
2566
2567               case AS_ASSUMED_SHAPE:
2568                 gfc_error ("Assumed shape array %qs at %L is not permitted "
2569                            "in an initialization expression",
2570                            e->symtree->n.sym->name, &e->where);
2571                 break;
2572
2573               case AS_DEFERRED:
2574                 gfc_error ("Deferred array %qs at %L is not permitted "
2575                            "in an initialization expression",
2576                            e->symtree->n.sym->name, &e->where);
2577                 break;
2578
2579               case AS_EXPLICIT:
2580                 gfc_error ("Array %qs at %L is a variable, which does "
2581                            "not reduce to a constant expression",
2582                            e->symtree->n.sym->name, &e->where);
2583                 break;
2584
2585               default:
2586                 gcc_unreachable();
2587           }
2588         }
2589       else
2590         gfc_error ("Parameter %qs at %L has not been declared or is "
2591                    "a variable, which does not reduce to a constant "
2592                    "expression", e->symtree->n.sym->name, &e->where);
2593
2594       break;
2595
2596     case EXPR_CONSTANT:
2597     case EXPR_NULL:
2598       t = true;
2599       break;
2600
2601     case EXPR_SUBSTRING:
2602       t = gfc_check_init_expr (e->ref->u.ss.start);
2603       if (!t)
2604         break;
2605
2606       t = gfc_check_init_expr (e->ref->u.ss.end);
2607       if (t)
2608         t = gfc_simplify_expr (e, 0);
2609
2610       break;
2611
2612     case EXPR_STRUCTURE:
2613       t = e->ts.is_iso_c ? true : false;
2614       if (t)
2615         break;
2616
2617       t = check_alloc_comp_init (e);
2618       if (!t)
2619         break;
2620
2621       t = gfc_check_constructor (e, gfc_check_init_expr);
2622       if (!t)
2623         break;
2624
2625       break;
2626
2627     case EXPR_ARRAY:
2628       t = gfc_check_constructor (e, gfc_check_init_expr);
2629       if (!t)
2630         break;
2631
2632       t = gfc_expand_constructor (e, true);
2633       if (!t)
2634         break;
2635
2636       t = gfc_check_constructor_type (e);
2637       break;
2638
2639     default:
2640       gfc_internal_error ("check_init_expr(): Unknown expression type");
2641     }
2642
2643   return t;
2644 }
2645
2646 /* Reduces a general expression to an initialization expression (a constant).
2647    This used to be part of gfc_match_init_expr.
2648    Note that this function doesn't free the given expression on false.  */
2649
2650 bool
2651 gfc_reduce_init_expr (gfc_expr *expr)
2652 {
2653   bool t;
2654
2655   gfc_init_expr_flag = true;
2656   t = gfc_resolve_expr (expr);
2657   if (t)
2658     t = gfc_check_init_expr (expr);
2659   gfc_init_expr_flag = false;
2660
2661   if (!t)
2662     return false;
2663
2664   if (expr->expr_type == EXPR_ARRAY)
2665     {
2666       if (!gfc_check_constructor_type (expr))
2667         return false;
2668       if (!gfc_expand_constructor (expr, true))
2669         return false;
2670     }
2671
2672   return true;
2673 }
2674
2675
2676 /* Match an initialization expression.  We work by first matching an
2677    expression, then reducing it to a constant.  */
2678
2679 match
2680 gfc_match_init_expr (gfc_expr **result)
2681 {
2682   gfc_expr *expr;
2683   match m;
2684   bool t;
2685
2686   expr = NULL;
2687
2688   gfc_init_expr_flag = true;
2689
2690   m = gfc_match_expr (&expr);
2691   if (m != MATCH_YES)
2692     {
2693       gfc_init_expr_flag = false;
2694       return m;
2695     }
2696
2697   t = gfc_reduce_init_expr (expr);
2698   if (!t)
2699     {
2700       gfc_free_expr (expr);
2701       gfc_init_expr_flag = false;
2702       return MATCH_ERROR;
2703     }
2704
2705   *result = expr;
2706   gfc_init_expr_flag = false;
2707
2708   return MATCH_YES;
2709 }
2710
2711
2712 /* Given an actual argument list, test to see that each argument is a
2713    restricted expression and optionally if the expression type is
2714    integer or character.  */
2715
2716 static bool
2717 restricted_args (gfc_actual_arglist *a)
2718 {
2719   for (; a; a = a->next)
2720     {
2721       if (!check_restricted (a->expr))
2722         return false;
2723     }
2724
2725   return true;
2726 }
2727
2728
2729 /************* Restricted/specification expressions *************/
2730
2731
2732 /* Make sure a non-intrinsic function is a specification function.  */
2733
2734 static bool
2735 external_spec_function (gfc_expr *e)
2736 {
2737   gfc_symbol *f;
2738
2739   f = e->value.function.esym;
2740
2741   if (f->attr.proc == PROC_ST_FUNCTION)
2742     {
2743       gfc_error ("Specification function %qs at %L cannot be a statement "
2744                  "function", f->name, &e->where);
2745       return false;
2746     }
2747
2748   if (f->attr.proc == PROC_INTERNAL)
2749     {
2750       gfc_error ("Specification function %qs at %L cannot be an internal "
2751                  "function", f->name, &e->where);
2752       return false;
2753     }
2754
2755   if (!f->attr.pure && !f->attr.elemental)
2756     {
2757       gfc_error ("Specification function %qs at %L must be PURE", f->name,
2758                  &e->where);
2759       return false;
2760     }
2761
2762   if (f->attr.recursive)
2763     {
2764       gfc_error ("Specification function %qs at %L cannot be RECURSIVE",
2765                  f->name, &e->where);
2766       return false;
2767     }
2768
2769   return restricted_args (e->value.function.actual);
2770 }
2771
2772
2773 /* Check to see that a function reference to an intrinsic is a
2774    restricted expression.  */
2775
2776 static bool
2777 restricted_intrinsic (gfc_expr *e)
2778 {
2779   /* TODO: Check constraints on inquiry functions.  7.1.6.2 (7).  */
2780   if (check_inquiry (e, 0) == MATCH_YES)
2781     return true;
2782
2783   return restricted_args (e->value.function.actual);
2784 }
2785
2786
2787 /* Check the expressions of an actual arglist.  Used by check_restricted.  */
2788
2789 static bool
2790 check_arglist (gfc_actual_arglist* arg, bool (*checker) (gfc_expr*))
2791 {
2792   for (; arg; arg = arg->next)
2793     if (!checker (arg->expr))
2794       return false;
2795
2796   return true;
2797 }
2798
2799
2800 /* Check the subscription expressions of a reference chain with a checking
2801    function; used by check_restricted.  */
2802
2803 static bool
2804 check_references (gfc_ref* ref, bool (*checker) (gfc_expr*))
2805 {
2806   int dim;
2807
2808   if (!ref)
2809     return true;
2810
2811   switch (ref->type)
2812     {
2813     case REF_ARRAY:
2814       for (dim = 0; dim != ref->u.ar.dimen; ++dim)
2815         {
2816           if (!checker (ref->u.ar.start[dim]))
2817             return false;
2818           if (!checker (ref->u.ar.end[dim]))
2819             return false;
2820           if (!checker (ref->u.ar.stride[dim]))
2821             return false;
2822         }
2823       break;
2824
2825     case REF_COMPONENT:
2826       /* Nothing needed, just proceed to next reference.  */
2827       break;
2828
2829     case REF_SUBSTRING:
2830       if (!checker (ref->u.ss.start))
2831         return false;
2832       if (!checker (ref->u.ss.end))
2833         return false;
2834       break;
2835
2836     default:
2837       gcc_unreachable ();
2838       break;
2839     }
2840
2841   return check_references (ref->next, checker);
2842 }
2843
2844
2845 /* Verify that an expression is a restricted expression.  Like its
2846    cousin check_init_expr(), an error message is generated if we
2847    return false.  */
2848
2849 static bool
2850 check_restricted (gfc_expr *e)
2851 {
2852   gfc_symbol* sym;
2853   bool t;
2854
2855   if (e == NULL)
2856     return true;
2857
2858   switch (e->expr_type)
2859     {
2860     case EXPR_OP:
2861       t = check_intrinsic_op (e, check_restricted);
2862       if (t)
2863         t = gfc_simplify_expr (e, 0);
2864
2865       break;
2866
2867     case EXPR_FUNCTION:
2868       if (e->value.function.esym)
2869         {
2870           t = check_arglist (e->value.function.actual, &check_restricted);
2871           if (t)
2872             t = external_spec_function (e);
2873         }
2874       else
2875         {
2876           if (e->value.function.isym && e->value.function.isym->inquiry)
2877             t = true;
2878           else
2879             t = check_arglist (e->value.function.actual, &check_restricted);
2880
2881           if (t)
2882             t = restricted_intrinsic (e);
2883         }
2884       break;
2885
2886     case EXPR_VARIABLE:
2887       sym = e->symtree->n.sym;
2888       t = false;
2889
2890       /* If a dummy argument appears in a context that is valid for a
2891          restricted expression in an elemental procedure, it will have
2892          already been simplified away once we get here.  Therefore we
2893          don't need to jump through hoops to distinguish valid from
2894          invalid cases.  */
2895       if (sym->attr.dummy && sym->ns == gfc_current_ns
2896           && sym->ns->proc_name && sym->ns->proc_name->attr.elemental)
2897         {
2898           gfc_error ("Dummy argument %qs not allowed in expression at %L",
2899                      sym->name, &e->where);
2900           break;
2901         }
2902
2903       if (sym->attr.optional)
2904         {
2905           gfc_error ("Dummy argument %qs at %L cannot be OPTIONAL",
2906                      sym->name, &e->where);
2907           break;
2908         }
2909
2910       if (sym->attr.intent == INTENT_OUT)
2911         {
2912           gfc_error ("Dummy argument %qs at %L cannot be INTENT(OUT)",
2913                      sym->name, &e->where);
2914           break;
2915         }
2916
2917       /* Check reference chain if any.  */
2918       if (!check_references (e->ref, &check_restricted))
2919         break;
2920
2921       /* gfc_is_formal_arg broadcasts that a formal argument list is being
2922          processed in resolve.c(resolve_formal_arglist).  This is done so
2923          that host associated dummy array indices are accepted (PR23446).
2924          This mechanism also does the same for the specification expressions
2925          of array-valued functions.  */
2926       if (e->error
2927             || sym->attr.in_common
2928             || sym->attr.use_assoc
2929             || sym->attr.dummy
2930             || sym->attr.implied_index
2931             || sym->attr.flavor == FL_PARAMETER
2932             || (sym->ns && sym->ns == gfc_current_ns->parent)
2933             || (sym->ns && gfc_current_ns->parent
2934                   && sym->ns == gfc_current_ns->parent->parent)
2935             || (sym->ns->proc_name != NULL
2936                   && sym->ns->proc_name->attr.flavor == FL_MODULE)
2937             || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
2938         {
2939           t = true;
2940           break;
2941         }
2942
2943       gfc_error ("Variable %qs cannot appear in the expression at %L",
2944                  sym->name, &e->where);
2945       /* Prevent a repetition of the error.  */
2946       e->error = 1;
2947       break;
2948
2949     case EXPR_NULL:
2950     case EXPR_CONSTANT:
2951       t = true;
2952       break;
2953
2954     case EXPR_SUBSTRING:
2955       t = gfc_specification_expr (e->ref->u.ss.start);
2956       if (!t)
2957         break;
2958
2959       t = gfc_specification_expr (e->ref->u.ss.end);
2960       if (t)
2961         t = gfc_simplify_expr (e, 0);
2962
2963       break;
2964
2965     case EXPR_STRUCTURE:
2966       t = gfc_check_constructor (e, check_restricted);
2967       break;
2968
2969     case EXPR_ARRAY:
2970       t = gfc_check_constructor (e, check_restricted);
2971       break;
2972
2973     default:
2974       gfc_internal_error ("check_restricted(): Unknown expression type");
2975     }
2976
2977   return t;
2978 }
2979
2980
2981 /* Check to see that an expression is a specification expression.  If
2982    we return false, an error has been generated.  */
2983
2984 bool
2985 gfc_specification_expr (gfc_expr *e)
2986 {
2987   gfc_component *comp;
2988
2989   if (e == NULL)
2990     return true;
2991
2992   if (e->ts.type != BT_INTEGER)
2993     {
2994       gfc_error ("Expression at %L must be of INTEGER type, found %s",
2995                  &e->where, gfc_basic_typename (e->ts.type));
2996       return false;
2997     }
2998
2999   comp = gfc_get_proc_ptr_comp (e);
3000   if (e->expr_type == EXPR_FUNCTION
3001       && !e->value.function.isym
3002       && !e->value.function.esym
3003       && !gfc_pure (e->symtree->n.sym)
3004       && (!comp || !comp->attr.pure))
3005     {
3006       gfc_error ("Function %qs at %L must be PURE",
3007                  e->symtree->n.sym->name, &e->where);
3008       /* Prevent repeat error messages.  */
3009       e->symtree->n.sym->attr.pure = 1;
3010       return false;
3011     }
3012
3013   if (e->rank != 0)
3014     {
3015       gfc_error ("Expression at %L must be scalar", &e->where);
3016       return false;
3017     }
3018
3019   if (!gfc_simplify_expr (e, 0))
3020     return false;
3021
3022   return check_restricted (e);
3023 }
3024
3025
3026 /************** Expression conformance checks.  *************/
3027
3028 /* Given two expressions, make sure that the arrays are conformable.  */
3029
3030 bool
3031 gfc_check_conformance (gfc_expr *op1, gfc_expr *op2, const char *optype_msgid, ...)
3032 {
3033   int op1_flag, op2_flag, d;
3034   mpz_t op1_size, op2_size;
3035   bool t;
3036
3037   va_list argp;
3038   char buffer[240];
3039
3040   if (op1->rank == 0 || op2->rank == 0)
3041     return true;
3042
3043   va_start (argp, optype_msgid);
3044   vsnprintf (buffer, 240, optype_msgid, argp);
3045   va_end (argp);
3046
3047   if (op1->rank != op2->rank)
3048     {
3049       gfc_error ("Incompatible ranks in %s (%d and %d) at %L", _(buffer),
3050                  op1->rank, op2->rank, &op1->where);
3051       return false;
3052     }
3053
3054   t = true;
3055
3056   for (d = 0; d < op1->rank; d++)
3057     {
3058       op1_flag = gfc_array_dimen_size(op1, d, &op1_size);
3059       op2_flag = gfc_array_dimen_size(op2, d, &op2_size);
3060
3061       if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
3062         {
3063           gfc_error ("Different shape for %s at %L on dimension %d "
3064                      "(%d and %d)", _(buffer), &op1->where, d + 1,
3065                      (int) mpz_get_si (op1_size),
3066                      (int) mpz_get_si (op2_size));
3067
3068           t = false;
3069         }
3070
3071       if (op1_flag)
3072         mpz_clear (op1_size);
3073       if (op2_flag)
3074         mpz_clear (op2_size);
3075
3076       if (!t)
3077         return false;
3078     }
3079
3080   return true;
3081 }
3082
3083
3084 /* Given an assignable expression and an arbitrary expression, make
3085    sure that the assignment can take place.  */
3086
3087 bool
3088 gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
3089 {
3090   gfc_symbol *sym;
3091   gfc_ref *ref;
3092   int has_pointer;
3093
3094   sym = lvalue->symtree->n.sym;
3095
3096   /* See if this is the component or subcomponent of a pointer.  */
3097   has_pointer = sym->attr.pointer;
3098   for (ref = lvalue->ref; ref; ref = ref->next)
3099     if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
3100       {
3101         has_pointer = 1;
3102         break;
3103       }
3104
3105   /* 12.5.2.2, Note 12.26: The result variable is very similar to any other
3106      variable local to a function subprogram.  Its existence begins when
3107      execution of the function is initiated and ends when execution of the
3108      function is terminated...
3109      Therefore, the left hand side is no longer a variable, when it is:  */
3110   if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_ST_FUNCTION
3111       && !sym->attr.external)
3112     {
3113       bool bad_proc;
3114       bad_proc = false;
3115
3116       /* (i) Use associated;  */
3117       if (sym->attr.use_assoc)
3118         bad_proc = true;
3119
3120       /* (ii) The assignment is in the main program; or  */
3121       if (gfc_current_ns->proc_name->attr.is_main_program)
3122         bad_proc = true;
3123
3124       /* (iii) A module or internal procedure...  */
3125       if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
3126            || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
3127           && gfc_current_ns->parent
3128           && (!(gfc_current_ns->parent->proc_name->attr.function
3129                 || gfc_current_ns->parent->proc_name->attr.subroutine)
3130               || gfc_current_ns->parent->proc_name->attr.is_main_program))
3131         {
3132           /* ... that is not a function...  */
3133           if (!gfc_current_ns->proc_name->attr.function)
3134             bad_proc = true;
3135
3136           /* ... or is not an entry and has a different name.  */
3137           if (!sym->attr.entry && sym->name != gfc_current_ns->proc_name->name)
3138             bad_proc = true;
3139         }
3140
3141       /* (iv) Host associated and not the function symbol or the
3142               parent result.  This picks up sibling references, which
3143               cannot be entries.  */
3144       if (!sym->attr.entry
3145             && sym->ns == gfc_current_ns->parent
3146             && sym != gfc_current_ns->proc_name
3147             && sym != gfc_current_ns->parent->proc_name->result)
3148         bad_proc = true;
3149
3150       if (bad_proc)
3151         {
3152           gfc_error ("%qs at %L is not a VALUE", sym->name, &lvalue->where);
3153           return false;
3154         }
3155     }
3156
3157   if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
3158     {
3159       gfc_error ("Incompatible ranks %d and %d in assignment at %L",
3160                  lvalue->rank, rvalue->rank, &lvalue->where);
3161       return false;
3162     }
3163
3164   if (lvalue->ts.type == BT_UNKNOWN)
3165     {
3166       gfc_error ("Variable type is UNKNOWN in assignment at %L",
3167                  &lvalue->where);
3168       return false;
3169     }
3170
3171   if (rvalue->expr_type == EXPR_NULL)
3172     {
3173       if (has_pointer && (ref == NULL || ref->next == NULL)
3174           && lvalue->symtree->n.sym->attr.data)
3175         return true;
3176       else
3177         {
3178           gfc_error ("NULL appears on right-hand side in assignment at %L",
3179                      &rvalue->where);
3180           return false;
3181         }
3182     }
3183
3184   /* This is possibly a typo: x = f() instead of x => f().  */
3185   if (warn_surprising
3186       && rvalue->expr_type == EXPR_FUNCTION && gfc_expr_attr (rvalue).pointer)
3187     gfc_warning (OPT_Wsurprising,
3188                  "POINTER-valued function appears on right-hand side of "
3189                  "assignment at %L", &rvalue->where);
3190
3191   /* Check size of array assignments.  */
3192   if (lvalue->rank != 0 && rvalue->rank != 0
3193       && !gfc_check_conformance (lvalue, rvalue, "array assignment"))
3194     return false;
3195
3196   if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER
3197       && lvalue->symtree->n.sym->attr.data
3198       && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L used to "
3199                           "initialize non-integer variable %qs", 
3200                           &rvalue->where, lvalue->symtree->n.sym->name))
3201     return false;
3202   else if (rvalue->is_boz && !lvalue->symtree->n.sym->attr.data
3203       && !gfc_notify_std (GFC_STD_GNU, "BOZ literal at %L outside "
3204                           "a DATA statement and outside INT/REAL/DBLE/CMPLX",
3205                           &rvalue->where))
3206     return false;
3207
3208   /* Handle the case of a BOZ literal on the RHS.  */
3209   if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER)
3210     {
3211       int rc;
3212       if (warn_surprising)
3213         gfc_warning (OPT_Wsurprising,
3214                      "BOZ literal at %L is bitwise transferred "
3215                      "non-integer symbol %qs", &rvalue->where,
3216                      lvalue->symtree->n.sym->name);
3217       if (!gfc_convert_boz (rvalue, &lvalue->ts))
3218         return false;
3219       if ((rc = gfc_range_check (rvalue)) != ARITH_OK)
3220         {
3221           if (rc == ARITH_UNDERFLOW)
3222             gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
3223                        ". This check can be disabled with the option "
3224                        "%<-fno-range-check%>", &rvalue->where);
3225           else if (rc == ARITH_OVERFLOW)
3226             gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
3227                        ". This check can be disabled with the option "
3228                        "%<-fno-range-check%>", &rvalue->where);
3229           else if (rc == ARITH_NAN)
3230             gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
3231                        ". This check can be disabled with the option "
3232                        "%<-fno-range-check%>", &rvalue->where);
3233           return false;
3234         }
3235     }
3236
3237   /*  Warn about type-changing conversions for REAL or COMPLEX constants.
3238       If lvalue and rvalue are mixed REAL and complex, gfc_compare_types
3239       will warn anyway, so there is no need to to so here.  */
3240
3241   if (rvalue->expr_type == EXPR_CONSTANT && lvalue->ts.type == rvalue->ts.type
3242       && (lvalue->ts.type == BT_REAL || lvalue->ts.type == BT_COMPLEX))
3243     {
3244       if (lvalue->ts.kind < rvalue->ts.kind && warn_conversion)
3245         {
3246           /* As a special bonus, don't warn about REAL rvalues which are not
3247              changed by the conversion if -Wconversion is specified.  */
3248           if (rvalue->ts.type == BT_REAL && mpfr_number_p (rvalue->value.real))
3249             {
3250               /* Calculate the difference between the constant and the rounded
3251                  value and check it against zero.  */
3252               mpfr_t rv, diff;
3253               gfc_set_model_kind (lvalue->ts.kind);
3254               mpfr_init (rv);
3255               gfc_set_model_kind (rvalue->ts.kind);
3256               mpfr_init (diff);
3257
3258               mpfr_set (rv, rvalue->value.real, GFC_RND_MODE);
3259               mpfr_sub (diff, rv, rvalue->value.real, GFC_RND_MODE);
3260
3261               if (!mpfr_zero_p (diff))
3262                 gfc_warning (OPT_Wconversion, 
3263                              "Change of value in conversion from "
3264                              " %qs to %qs at %L", gfc_typename (&rvalue->ts),
3265                              gfc_typename (&lvalue->ts), &rvalue->where);
3266
3267               mpfr_clear (rv);
3268               mpfr_clear (diff);
3269             }
3270           else
3271             gfc_warning (OPT_Wconversion,
3272                          "Possible change of value in conversion from %qs "
3273                          "to %qs at %L", gfc_typename (&rvalue->ts),
3274                          gfc_typename (&lvalue->ts), &rvalue->where);
3275
3276         }
3277       else if (warn_conversion_extra && lvalue->ts.kind > rvalue->ts.kind)
3278         {
3279           gfc_warning (OPT_Wconversion_extra,
3280                        "Conversion from %qs to %qs at %L",
3281                        gfc_typename (&rvalue->ts),
3282                        gfc_typename (&lvalue->ts), &rvalue->where);
3283         }
3284     }
3285
3286   if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
3287     return true;
3288
3289   /* Only DATA Statements come here.  */
3290   if (!conform)
3291     {
3292       /* Numeric can be converted to any other numeric. And Hollerith can be
3293          converted to any other type.  */
3294       if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
3295           || rvalue->ts.type == BT_HOLLERITH)
3296         return true;
3297
3298       if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
3299         return true;
3300
3301       gfc_error ("Incompatible types in DATA statement at %L; attempted "
3302                  "conversion of %s to %s", &lvalue->where,
3303                  gfc_typename (&rvalue->ts), gfc_typename (&lvalue->ts));
3304
3305       return false;
3306     }
3307
3308   /* Assignment is the only case where character variables of different
3309      kind values can be converted into one another.  */
3310   if (lvalue->ts.type == BT_CHARACTER && rvalue->ts.type == BT_CHARACTER)
3311     {
3312       if (lvalue->ts.kind != rvalue->ts.kind)
3313         gfc_convert_chartype (rvalue, &lvalue->ts);
3314
3315       return true;
3316     }
3317
3318   return gfc_convert_type (rvalue, &lvalue->ts, 1);
3319 }
3320
3321
3322 /* Check that a pointer assignment is OK.  We first check lvalue, and
3323    we only check rvalue if it's not an assignment to NULL() or a
3324    NULLIFY statement.  */
3325
3326 bool
3327 gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
3328 {
3329   symbol_attribute attr, lhs_attr;
3330   gfc_ref *ref;
3331   bool is_pure, is_implicit_pure, rank_remap;
3332   int proc_pointer;
3333
3334   lhs_attr = gfc_expr_attr (lvalue);
3335   if (lvalue->ts.type == BT_UNKNOWN && !lhs_attr.proc_pointer)
3336     {
3337       gfc_error ("Pointer assignment target is not a POINTER at %L",
3338                  &lvalue->where);
3339       return false;
3340     }
3341
3342   if (lhs_attr.flavor == FL_PROCEDURE && lhs_attr.use_assoc
3343       && !lhs_attr.proc_pointer)
3344     {
3345       gfc_error ("%qs in the pointer assignment at %L cannot be an "
3346                  "l-value since it is a procedure",
3347                  lvalue->symtree->n.sym->name, &lvalue->where);
3348       return false;
3349     }
3350
3351   proc_pointer = lvalue->symtree->n.sym->attr.proc_pointer;
3352
3353   rank_remap = false;
3354   for (ref = lvalue->ref; ref; ref = ref->next)
3355     {
3356       if (ref->type == REF_COMPONENT)
3357         proc_pointer = ref->u.c.component->attr.proc_pointer;
3358
3359       if (ref->type == REF_ARRAY && ref->next == NULL)
3360         {
3361           int dim;
3362
3363           if (ref->u.ar.type == AR_FULL)
3364             break;
3365
3366           if (ref->u.ar.type != AR_SECTION)
3367             {
3368               gfc_error ("Expected bounds specification for %qs at %L",
3369                          lvalue->symtree->n.sym->name, &lvalue->where);
3370               return false;
3371             }
3372
3373           if (!gfc_notify_std (GFC_STD_F2003, "Bounds specification "
3374                                "for %qs in pointer assignment at %L", 
3375                                lvalue->symtree->n.sym->name, &lvalue->where))
3376             return false;
3377
3378           /* When bounds are given, all lbounds are necessary and either all
3379              or none of the upper bounds; no strides are allowed.  If the
3380              upper bounds are present, we may do rank remapping.  */
3381           for (dim = 0; dim < ref->u.ar.dimen; ++dim)
3382             {
3383               if (!ref->u.ar.start[dim]
3384                   || ref->u.ar.dimen_type[dim] != DIMEN_RANGE)
3385                 {
3386                   gfc_error ("Lower bound has to be present at %L",
3387                              &lvalue->where);
3388                   return false;
3389                 }
3390               if (ref->u.ar.stride[dim])
3391                 {
3392                   gfc_error ("Stride must not be present at %L",
3393                              &lvalue->where);
3394                   return false;
3395                 }
3396
3397               if (dim == 0)
3398                 rank_remap = (ref->u.ar.end[dim] != NULL);
3399               else
3400                 {
3401                   if ((rank_remap && !ref->u.ar.end[dim])
3402                       || (!rank_remap && ref->u.ar.end[dim]))
3403                     {
3404                       gfc_error ("Either all or none of the upper bounds"
3405                                  " must be specified at %L", &lvalue->where);
3406                       return false;
3407                     }
3408                 }
3409             }
3410         }
3411     }
3412
3413   is_pure = gfc_pure (NULL);
3414   is_implicit_pure = gfc_implicit_pure (NULL);
3415
3416   /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
3417      kind, etc for lvalue and rvalue must match, and rvalue must be a
3418      pure variable if we're in a pure function.  */
3419   if (rvalue->expr_type == EXPR_NULL && rvalue->ts.type == BT_UNKNOWN)
3420     return true;
3421
3422   /* F2008, C723 (pointer) and C726 (proc-pointer); for PURE also C1283.  */
3423   if (lvalue->expr_type == EXPR_VARIABLE
3424       && gfc_is_coindexed (lvalue))
3425     {
3426       gfc_ref *ref;
3427       for (ref = lvalue->ref; ref; ref = ref->next)
3428         if (ref->type == REF_ARRAY && ref->u.ar.codimen)
3429           {
3430             gfc_error ("Pointer object at %L shall not have a coindex",
3431                        &lvalue->where);
3432             return false;
3433           }
3434     }
3435
3436   /* Checks on rvalue for procedure pointer assignments.  */
3437   if (proc_pointer)
3438     {
3439       char err[200];
3440       gfc_symbol *s1,*s2;
3441       gfc_component *comp;
3442       const char *name;
3443
3444       attr = gfc_expr_attr (rvalue);
3445       if (!((rvalue->expr_type == EXPR_NULL)
3446             || (rvalue->expr_type == EXPR_FUNCTION && attr.proc_pointer)
3447             || (rvalue->expr_type == EXPR_VARIABLE && attr.proc_pointer)
3448             || (rvalue->expr_type == EXPR_VARIABLE
3449                 && attr.flavor == FL_PROCEDURE)))
3450         {
3451           gfc_error ("Invalid procedure pointer assignment at %L",
3452                      &rvalue->where);
3453           return false;
3454         }
3455       if (rvalue->expr_type == EXPR_VARIABLE && !attr.proc_pointer)
3456         {
3457           /* Check for intrinsics.  */
3458           gfc_symbol *sym = rvalue->symtree->n.sym;
3459           if (!sym->attr.intrinsic
3460               && (gfc_is_intrinsic (sym, 0, sym->declared_at)
3461                   || gfc_is_intrinsic (sym, 1, sym->declared_at)))
3462             {
3463               sym->attr.intrinsic = 1;
3464               gfc_resolve_intrinsic (sym, &rvalue->where);
3465               attr = gfc_expr_attr (rvalue);
3466             }
3467           /* Check for result of embracing function.  */
3468           if (sym->attr.function && sym->result == sym)
3469             {
3470               gfc_namespace *ns;
3471
3472               for (ns = gfc_current_ns; ns; ns = ns->parent)
3473                 if (sym == ns->proc_name)
3474                   {
3475                     gfc_error ("Function result %qs is invalid as proc-target "
3476                                "in procedure pointer assignment at %L",
3477                                sym->name, &rvalue->where);
3478                     return false;
3479                   }
3480             }
3481         }
3482       if (attr.abstract)
3483         {
3484           gfc_error ("Abstract interface %qs is invalid "
3485                      "in procedure pointer assignment at %L",
3486                      rvalue->symtree->name, &rvalue->where);
3487           return false;
3488         }
3489       /* Check for F08:C729.  */
3490       if (attr.flavor == FL_PROCEDURE)
3491         {
3492           if (attr.proc == PROC_ST_FUNCTION)
3493             {
3494               gfc_error ("Statement function %qs is invalid "
3495                          "in procedure pointer assignment at %L",
3496                          rvalue->symtree->name, &rvalue->where);
3497               return false;
3498             }
3499           if (attr.proc == PROC_INTERNAL &&
3500               !gfc_notify_std(GFC_STD_F2008, "Internal procedure %qs "
3501                               "is invalid in procedure pointer assignment "
3502                               "at %L", rvalue->symtree->name, &rvalue->where))
3503             return false;
3504           if (attr.intrinsic && gfc_intrinsic_actual_ok (rvalue->symtree->name,
3505                                                          attr.subroutine) == 0)
3506             {
3507               gfc_error ("Intrinsic %qs at %L is invalid in procedure pointer "
3508                          "assignment", rvalue->symtree->name, &rvalue->where);
3509               return false;
3510             }
3511         }
3512       /* Check for F08:C730.  */
3513       if (attr.elemental && !attr.intrinsic)
3514         {
3515           gfc_error ("Nonintrinsic elemental procedure %qs is invalid "
3516                      "in procedure pointer assignment at %L",
3517                      rvalue->symtree->name, &rvalue->where);
3518           return false;
3519         }
3520
3521       /* Ensure that the calling convention is the same. As other attributes
3522          such as DLLEXPORT may differ, one explicitly only tests for the
3523          calling conventions.  */
3524       if (rvalue->expr_type == EXPR_VARIABLE
3525           && lvalue->symtree->n.sym->attr.ext_attr
3526                != rvalue->symtree->n.sym->attr.ext_attr)
3527         {
3528           symbol_attribute calls;
3529
3530           calls.ext_attr = 0;
3531           gfc_add_ext_attribute (&calls, EXT_ATTR_CDECL, NULL);
3532           gfc_add_ext_attribute (&calls, EXT_ATTR_STDCALL, NULL);
3533           gfc_add_ext_attribute (&calls, EXT_ATTR_FASTCALL, NULL);
3534
3535           if ((calls.ext_attr & lvalue->symtree->n.sym->attr.ext_attr)
3536               != (calls.ext_attr & rvalue->symtree->n.sym->attr.ext_attr))
3537             {
3538               gfc_error ("Mismatch in the procedure pointer assignment "
3539                          "at %L: mismatch in the calling convention",
3540                          &rvalue->where);
3541           return false;
3542             }
3543         }
3544
3545       comp = gfc_get_proc_ptr_comp (lvalue);
3546       if (comp)
3547         s1 = comp->ts.interface;
3548       else
3549         {
3550           s1 = lvalue->symtree->n.sym;
3551           if (s1->ts.interface)
3552             s1 = s1->ts.interface;
3553         }
3554
3555       comp = gfc_get_proc_ptr_comp (rvalue);
3556       if (comp)
3557         {
3558           if (rvalue->expr_type == EXPR_FUNCTION)
3559             {
3560               s2 = comp->ts.interface->result;
3561               name = s2->name;
3562             }
3563           else
3564             {
3565               s2 = comp->ts.interface;
3566               name = comp->name;
3567             }
3568         }
3569       else if (rvalue->expr_type == EXPR_FUNCTION)
3570         {
3571           if (rvalue->value.function.esym)
3572             s2 = rvalue->value.function.esym->result;
3573           else
3574             s2 = rvalue->symtree->n.sym->result;
3575
3576           name = s2->name;
3577         }
3578       else
3579         {
3580           s2 = rvalue->symtree->n.sym;
3581           name = s2->name;
3582         }
3583
3584       if (s2 && s2->attr.proc_pointer && s2->ts.interface)
3585         s2 = s2->ts.interface;
3586
3587       if (s1 == s2 || !s1 || !s2)
3588         return true;
3589
3590       /* F08:7.2.2.4 (4)  */
3591       if (s1->attr.if_source == IFSRC_UNKNOWN
3592           && gfc_explicit_interface_required (s2, err, sizeof(err)))
3593         {
3594           gfc_error ("Explicit interface required for %qs at %L: %s",
3595                      s1->name, &lvalue->where, err);
3596           return false;
3597         }
3598       if (s2->attr.if_source == IFSRC_UNKNOWN
3599           && gfc_explicit_interface_required (s1, err, sizeof(err)))
3600         {
3601           gfc_error ("Explicit interface required for %qs at %L: %s",
3602                      s2->name, &rvalue->where, err);
3603           return false;
3604         }
3605
3606       if (!gfc_compare_interfaces (s1, s2, name, 0, 1,
3607                                    err, sizeof(err), NULL, NULL))
3608         {
3609           gfc_error ("Interface mismatch in procedure pointer assignment "
3610                      "at %L: %s", &rvalue->where, err);
3611           return false;
3612         }
3613
3614       /* Check F2008Cor2, C729.  */
3615       if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
3616           && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
3617         {
3618           gfc_error ("Procedure pointer target %qs at %L must be either an "
3619                      "intrinsic, host or use associated, referenced or have "
3620                      "the EXTERNAL attribute", s2->name, &rvalue->where);
3621           return false;
3622         }
3623
3624       return true;
3625     }
3626
3627   if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
3628     {
3629       /* Check for F03:C717.  */
3630       if (UNLIMITED_POLY (rvalue)
3631           && !(UNLIMITED_POLY (lvalue)
3632                || (lvalue->ts.type == BT_DERIVED
3633                    && (lvalue->ts.u.derived->attr.is_bind_c
3634                        || lvalue->ts.u.derived->attr.sequence))))
3635         gfc_error ("Data-pointer-object &L must be unlimited "
3636                    "polymorphic, a sequence derived type or of a "
3637                    "type with the BIND attribute assignment at %L "
3638                    "to be compatible with an unlimited polymorphic "
3639                    "target", &lvalue->where);
3640       else
3641         gfc_error ("Different types in pointer assignment at %L; "
3642                    "attempted assignment of %s to %s", &lvalue->where,
3643                    gfc_typename (&rvalue->ts),
3644                    gfc_typename (&lvalue->ts));
3645       return false;
3646     }
3647
3648   if (lvalue->ts.type != BT_CLASS && lvalue->ts.kind != rvalue->ts.kind)
3649     {
3650       gfc_error ("Different kind type parameters in pointer "
3651                  "assignment at %L", &lvalue->where);
3652       return false;
3653     }
3654
3655   if (lvalue->rank != rvalue->rank && !rank_remap)
3656     {
3657       gfc_error ("Different ranks in pointer assignment at %L", &lvalue->where);
3658       return false;
3659     }
3660
3661   /* Make sure the vtab is present.  */
3662   if (lvalue->ts.type == BT_CLASS && !UNLIMITED_POLY (rvalue))
3663     gfc_find_vtab (&rvalue->ts);
3664
3665   /* Check rank remapping.  */
3666   if (rank_remap)
3667     {
3668       mpz_t lsize, rsize;
3669
3670       /* If this can be determined, check that the target must be at least as
3671          large as the pointer assigned to it is.  */
3672       if (gfc_array_size (lvalue, &lsize)
3673           && gfc_array_size (rvalue, &rsize)
3674           && mpz_cmp (rsize, lsize) < 0)
3675         {
3676           gfc_error ("Rank remapping target is smaller than size of the"
3677                      " pointer (%ld < %ld) at %L",
3678                      mpz_get_si (rsize), mpz_get_si (lsize),
3679                      &lvalue->where);
3680           return false;
3681         }
3682
3683       /* The target must be either rank one or it must be simply contiguous
3684          and F2008 must be allowed.  */
3685       if (rvalue->rank != 1)
3686         {
3687           if (!gfc_is_simply_contiguous (rvalue, true))
3688             {
3689               gfc_error ("Rank remapping target must be rank 1 or"
3690                          " simply contiguous at %L", &rvalue->where);
3691               return false;
3692             }
3693           if (!gfc_notify_std (GFC_STD_F2008, "Rank remapping target is not "
3694                                "rank 1 at %L", &rvalue->where))
3695             return false;
3696         }
3697     }
3698
3699   /* Now punt if we are dealing with a NULLIFY(X) or X = NULL(X).  */
3700   if (rvalue->expr_type == EXPR_NULL)
3701     return true;
3702
3703   if (lvalue->ts.type == BT_CHARACTER)
3704     {
3705       bool t = gfc_check_same_strlen (lvalue, rvalue, "pointer assignment");
3706       if (!t)
3707         return false;
3708     }
3709
3710   if (rvalue->expr_type == EXPR_VARIABLE && is_subref_array (rvalue))
3711     lvalue->symtree->n.sym->attr.subref_array_pointer = 1;
3712
3713   attr = gfc_expr_attr (rvalue);
3714
3715   if (rvalue->expr_type == EXPR_FUNCTION && !attr.pointer)
3716     {
3717       gfc_error ("Target expression in pointer assignment "
3718                  "at %L must deliver a pointer result",
3719                  &rvalue->where);
3720       return false;
3721     }
3722
3723   if (!attr.target && !attr.pointer)
3724     {
3725       gfc_error ("Pointer assignment target is neither TARGET "
3726                  "nor POINTER at %L", &rvalue->where);
3727       return false;
3728     }
3729
3730   if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
3731     {
3732       gfc_error ("Bad target in pointer assignment in PURE "
3733                  "procedure at %L", &rvalue->where);
3734     }
3735
3736   if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
3737     gfc_unset_implicit_pure (gfc_current_ns->proc_name);
3738
3739   if (gfc_has_vector_index (rvalue))
3740     {
3741       gfc_error ("Pointer assignment with vector subscript "
3742                  "on rhs at %L", &rvalue->where);
3743       return false;
3744     }
3745
3746   if (attr.is_protected && attr.use_assoc
3747       && !(attr.pointer || attr.proc_pointer))
3748     {
3749       gfc_error ("Pointer assignment target has PROTECTED "
3750                  "attribute at %L", &rvalue->where);
3751       return false;
3752     }
3753
3754   /* F2008, C725. For PURE also C1283.  */
3755   if (rvalue->expr_type == EXPR_VARIABLE
3756       && gfc_is_coindexed (rvalue))
3757     {
3758       gfc_ref *ref;
3759       for (ref = rvalue->ref; ref; ref = ref->next)
3760         if (ref->type == REF_ARRAY && ref->u.ar.codimen)
3761           {
3762             gfc_error ("Data target at %L shall not have a coindex",
3763                        &rvalue->where);
3764             return false;
3765           }
3766     }
3767
3768   /* Warn if it is the LHS pointer may lives longer than the RHS target.  */
3769   if (warn_target_lifetime
3770       && rvalue->expr_type == EXPR_VARIABLE
3771       && !rvalue->symtree->n.sym->attr.save
3772       && !attr.pointer && !rvalue->symtree->n.sym->attr.host_assoc
3773       && !rvalue->symtree->n.sym->attr.in_common
3774       && !rvalue->symtree->n.sym->attr.use_assoc
3775       && !rvalue->symtree->n.sym->attr.dummy)
3776     {
3777       bool warn;
3778       gfc_namespace *ns;
3779
3780       warn = lvalue->symtree->n.sym->attr.dummy
3781              || lvalue->symtree->n.sym->attr.result
3782              || lvalue->symtree->n.sym->attr.function
3783              || (lvalue->symtree->n.sym->attr.host_assoc
3784                  && lvalue->symtree->n.sym->ns
3785                     != rvalue->symtree->n.sym->ns)
3786              || lvalue->symtree->n.sym->attr.use_assoc
3787              || lvalue->symtree->n.sym->attr.in_common;
3788
3789       if (rvalue->symtree->n.sym->ns->proc_name
3790           && rvalue->symtree->n.sym->ns->proc_name->attr.flavor != FL_PROCEDURE
3791           && rvalue->symtree->n.sym->ns->proc_name->attr.flavor != FL_PROGRAM)
3792        for (ns = rvalue->symtree->n.sym->ns;
3793             ns && ns->proc_name && ns->proc_name->attr.flavor != FL_PROCEDURE;
3794             ns = ns->parent)
3795         if (ns->parent == lvalue->symtree->n.sym->ns)
3796           {
3797             warn = true;
3798             break;
3799           }
3800
3801       if (warn)
3802         gfc_warning (OPT_Wtarget_lifetime,
3803                      "Pointer at %L in pointer assignment might outlive the "
3804                      "pointer target", &lvalue->where);
3805     }
3806
3807   return true;
3808 }
3809
3810
3811 /* Relative of gfc_check_assign() except that the lvalue is a single
3812    symbol.  Used for initialization assignments.  */
3813
3814 bool
3815 gfc_check_assign_symbol (gfc_symbol *sym, gfc_component *comp, gfc_expr *rvalue)
3816 {
3817   gfc_expr lvalue;
3818   bool r;
3819   bool pointer, proc_pointer;
3820
3821   memset (&lvalue, '\0', sizeof (gfc_expr));
3822
3823   lvalue.expr_type = EXPR_VARIABLE;
3824   lvalue.ts = sym->ts;
3825   if (sym->as)
3826     lvalue.rank = sym->as->rank;
3827   lvalue.symtree = XCNEW (gfc_symtree);
3828   lvalue.symtree->n.sym = sym;
3829   lvalue.where = sym->declared_at;
3830
3831   if (comp)
3832     {
3833       lvalue.ref = gfc_get_ref ();
3834       lvalue.ref->type = REF_COMPONENT;
3835       lvalue.ref->u.c.component = comp;
3836       lvalue.ref->u.c.sym = sym;
3837       lvalue.ts = comp->ts;
3838       lvalue.rank = comp->as ? comp->as->rank : 0;
3839       lvalue.where = comp->loc;
3840       pointer = comp->ts.type == BT_CLASS &&  CLASS_DATA (comp)
3841                 ? CLASS_DATA (comp)->attr.class_pointer : comp->attr.pointer;
3842       proc_pointer = comp->attr.proc_pointer;
3843     }
3844   else
3845     {
3846       pointer = sym->ts.type == BT_CLASS &&  CLASS_DATA (sym)
3847                 ? CLASS_DATA (sym)->attr.class_pointer : sym->attr.pointer;
3848       proc_pointer = sym->attr.proc_pointer;
3849     }
3850
3851   if (pointer || proc_pointer)
3852     r = gfc_check_pointer_assign (&lvalue, rvalue);
3853   else
3854     r = gfc_check_assign (&lvalue, rvalue, 1);
3855
3856   free (lvalue.symtree);
3857   free (lvalue.ref);
3858
3859   if (!r)
3860     return r;
3861
3862   if (pointer && rvalue->expr_type != EXPR_NULL)
3863     {
3864       /* F08:C461. Additional checks for pointer initialization.  */
3865       symbol_attribute attr;
3866       attr = gfc_expr_attr (rvalue);
3867       if (attr.allocatable)
3868         {
3869           gfc_error ("Pointer initialization target at %L "
3870                      "must not be ALLOCATABLE", &rvalue->where);
3871           return false;
3872         }
3873       if (!attr.target || attr.pointer)
3874         {
3875           gfc_error ("Pointer initialization target at %L "
3876                      "must have the TARGET attribute", &rvalue->where);
3877           return false;
3878         }
3879
3880       if (!attr.save && rvalue->expr_type == EXPR_VARIABLE
3881           && rvalue->symtree->n.sym->ns->proc_name
3882           && rvalue->symtree->n.sym->ns->proc_name->attr.is_main_program)
3883         {
3884           rvalue->symtree->n.sym->ns->proc_name->attr.save = SAVE_IMPLICIT;
3885           attr.save = SAVE_IMPLICIT;
3886         }
3887
3888       if (!attr.save)
3889         {
3890           gfc_error ("Pointer initialization target at %L "
3891                      "must have the SAVE attribute", &rvalue->where);
3892           return false;
3893         }
3894     }
3895
3896   if (proc_pointer && rvalue->expr_type != EXPR_NULL)
3897     {
3898       /* F08:C1220. Additional checks for procedure pointer initialization.  */
3899       symbol_attribute attr = gfc_expr_attr (rvalue);
3900       if (attr.proc_pointer)
3901         {
3902           gfc_error ("Procedure pointer initialization target at %L "
3903                      "may not be a procedure pointer", &rvalue->where);
3904           return false;
3905         }
3906     }
3907
3908   return true;
3909 }
3910
3911
3912 /* Check for default initializer; sym->value is not enough
3913    as it is also set for EXPR_NULL of allocatables.  */
3914
3915 bool
3916 gfc_has_default_initializer (gfc_symbol *der)
3917 {
3918   gfc_component *c;
3919
3920   gcc_assert (der->attr.flavor == FL_DERIVED);
3921   for (c = der->components; c; c = c->next)
3922     if (c->ts.type == BT_DERIVED)
3923       {
3924         if (!c->attr.pointer
3925              && gfc_has_default_initializer (c->ts.u.derived))
3926           return true;
3927         if (c->attr.pointer && c->initializer)
3928           return true;
3929       }
3930     else
3931       {
3932         if (c->initializer)
3933           return true;
3934       }
3935
3936   return false;
3937 }
3938
3939
3940 /* Get an expression for a default initializer.  */
3941
3942 gfc_expr *
3943 gfc_default_initializer (gfc_typespec *ts)
3944 {
3945   gfc_expr *init;
3946   gfc_component *comp;
3947
3948   /* See if we have a default initializer in this, but not in nested
3949      types (otherwise we could use gfc_has_default_initializer()).  */
3950   for (comp = ts->u.derived->components; comp; comp = comp->next)
3951     if (comp->initializer || comp->attr.allocatable
3952         || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)
3953             && CLASS_DATA (comp)->attr.allocatable))
3954       break;
3955
3956   if (!comp)
3957     return NULL;
3958
3959   init = gfc_get_structure_constructor_expr (ts->type, ts->kind,
3960                                              &ts->u.derived->declared_at);
3961   init->ts = *ts;
3962
3963   for (comp = ts->u.derived->components; comp; comp = comp->next)
3964     {
3965       gfc_constructor *ctor = gfc_constructor_get();
3966
3967       if (comp->initializer)
3968         {
3969           ctor->expr = gfc_copy_expr (comp->initializer);
3970           if ((comp->ts.type != comp->initializer->ts.type
3971                || comp->ts.kind != comp->initializer->ts.kind)
3972               && !comp->attr.pointer && !comp->attr.proc_pointer)
3973             gfc_convert_type_warn (ctor->expr, &comp->ts, 2, false);
3974         }
3975
3976       if (comp->attr.allocatable
3977           || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable))
3978         {
3979           ctor->expr = gfc_get_expr ();
3980           ctor->expr->expr_type = EXPR_NULL;
3981           ctor->expr->ts = comp->ts;
3982         }
3983
3984       gfc_constructor_append (&init->value.constructor, ctor);
3985     }
3986
3987   return init;
3988 }
3989
3990
3991 /* Given a symbol, create an expression node with that symbol as a
3992    variable. If the symbol is array valued, setup a reference of the
3993    whole array.  */
3994
3995 gfc_expr *
3996 gfc_get_variable_expr (gfc_symtree *var)
3997 {
3998   gfc_expr *e;
3999
4000   e = gfc_get_expr ();
4001   e->expr_type = EXPR_VARIABLE;
4002   e->symtree = var;
4003   e->ts = var->n.sym->ts;
4004
4005   if (var->n.sym->attr.flavor != FL_PROCEDURE
4006       && ((var->n.sym->as != NULL && var->n.sym->ts.type != BT_CLASS)
4007            || (var->n.sym->ts.type == BT_CLASS && CLASS_DATA (var->n.sym)
4008                && CLASS_DATA (var->n.sym)->as)))
4009     {
4010       e->rank = var->n.sym->ts.type == BT_CLASS
4011                 ? CLASS_DATA (var->n.sym)->as->rank : var->n.sym->as->rank;
4012       e->ref = gfc_get_ref ();
4013       e->ref->type = REF_ARRAY;
4014       e->ref->u.ar.type = AR_FULL;
4015       e->ref->u.ar.as = gfc_copy_array_spec (var->n.sym->ts.type == BT_CLASS
4016                                              ? CLASS_DATA (var->n.sym)->as
4017                                              : var->n.sym->as);
4018     }
4019
4020   return e;
4021 }
4022
4023
4024 /* Adds a full array reference to an expression, as needed.  */
4025
4026 void
4027 gfc_add_full_array_ref (gfc_expr *e, gfc_array_spec *as)
4028 {
4029   gfc_ref *ref;
4030   for (ref = e->ref; ref; ref = ref->next)
4031     if (!ref->next)
4032       break;
4033   if (ref)
4034     {
4035       ref->next = gfc_get_ref ();
4036       ref = ref->next;
4037     }
4038   else
4039     {
4040       e->ref = gfc_get_ref ();
4041       ref = e->ref;
4042     }
4043   ref->type = REF_ARRAY;
4044   ref->u.ar.type = AR_FULL;
4045   ref->u.ar.dimen = e->rank;
4046   ref->u.ar.where = e->where;
4047   ref->u.ar.as = as;
4048 }
4049
4050
4051 gfc_expr *
4052 gfc_lval_expr_from_sym (gfc_symbol *sym)
4053 {
4054   gfc_expr *lval;
4055   lval = gfc_get_expr ();
4056   lval->expr_type = EXPR_VARIABLE;
4057   lval->where = sym->declared_at;
4058   lval->ts = sym->ts;
4059   lval->symtree = gfc_find_symtree (sym->ns->sym_root, sym->name);
4060
4061   /* It will always be a full array.  */
4062   lval->rank = sym->as ? sym->as->rank : 0;
4063   if (lval->rank)
4064     gfc_add_full_array_ref (lval, sym->ts.type == BT_CLASS ?
4065                             CLASS_DATA (sym)->as : sym->as);
4066   return lval;
4067 }
4068
4069
4070 /* Returns the array_spec of a full array expression.  A NULL is
4071    returned otherwise.  */
4072 gfc_array_spec *
4073 gfc_get_full_arrayspec_from_expr (gfc_expr *expr)
4074 {
4075   gfc_array_spec *as;
4076   gfc_ref *ref;
4077
4078   if (expr->rank == 0)
4079     return NULL;
4080
4081   /* Follow any component references.  */
4082   if (expr->expr_type == EXPR_VARIABLE
4083       || expr->expr_type == EXPR_CONSTANT)
4084     {
4085       as = expr->symtree->n.sym->as;
4086       for (ref = expr->ref; ref; ref = ref->next)
4087         {
4088           switch (ref->type)
4089             {
4090             case REF_COMPONENT:
4091               as = ref->u.c.component->as;
4092               continue;
4093
4094             case REF_SUBSTRING:
4095               continue;
4096
4097             case REF_ARRAY:
4098               {
4099                 switch (ref->u.ar.type)
4100                   {
4101                   case AR_ELEMENT:
4102                   case AR_SECTION:
4103                   case AR_UNKNOWN:
4104                     as = NULL;
4105                     continue;
4106
4107                   case AR_FULL:
4108                     break;
4109                   }
4110                 break;
4111               }
4112             }
4113         }
4114     }
4115   else
4116     as = NULL;
4117
4118   return as;
4119 }
4120
4121
4122 /* General expression traversal function.  */
4123
4124 bool
4125 gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym,
4126                    bool (*func)(gfc_expr *, gfc_symbol *, int*),
4127                    int f)
4128 {
4129   gfc_array_ref ar;
4130   gfc_ref *ref;
4131   gfc_actual_arglist *args;
4132   gfc_constructor *c;
4133   int i;
4134
4135   if (!expr)
4136     return false;
4137
4138   if ((*func) (expr, sym, &f))
4139     return true;
4140
4141   if (expr->ts.type == BT_CHARACTER
4142         && expr->ts.u.cl
4143         && expr->ts.u.cl->length
4144         && expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
4145         && gfc_traverse_expr (expr->ts.u.cl->length, sym, func, f))
4146     return true;
4147
4148   switch (expr->expr_type)
4149     {
4150     case EXPR_PPC:
4151     case EXPR_COMPCALL:
4152     case EXPR_FUNCTION:
4153       for (args = expr->value.function.actual; args; args = args->next)
4154         {
4155           if (gfc_traverse_expr (args->expr, sym, func, f))
4156             return true;
4157         }
4158       break;
4159
4160     case EXPR_VARIABLE:
4161     case EXPR_CONSTANT:
4162     case EXPR_NULL:
4163     case EXPR_SUBSTRING:
4164       break;
4165
4166     case EXPR_STRUCTURE:
4167     case EXPR_ARRAY:
4168       for (c = gfc_constructor_first (expr->value.constructor);
4169            c; c = gfc_constructor_next (c))
4170         {
4171           if (gfc_traverse_expr (c->expr, sym, func, f))
4172             return true;
4173           if (c->iterator)
4174             {
4175               if (gfc_traverse_expr (c->iterator->var, sym, func, f))
4176                 return true;
4177               if (gfc_traverse_expr (c->iterator->start, sym, func, f))
4178                 return true;
4179               if (gfc_traverse_expr (c->iterator->end, sym, func, f))
4180                 return true;
4181               if (gfc_traverse_expr (c->iterator->step, sym, func, f))
4182                 return true;
4183             }
4184         }
4185       break;
4186
4187     case EXPR_OP:
4188       if (gfc_traverse_expr (expr->value.op.op1, sym, func, f))
4189         return true;
4190       if (gfc_traverse_expr (expr->value.op.op2, sym, func, f))
4191         return true;
4192       break;
4193
4194     default:
4195       gcc_unreachable ();
4196       break;
4197     }
4198
4199   ref = expr->ref;
4200   while (ref != NULL)
4201     {
4202       switch (ref->type)
4203         {
4204         case  REF_ARRAY:
4205           ar = ref->u.ar;
4206           for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
4207             {
4208               if (gfc_traverse_expr (ar.start[i], sym, func, f))
4209                 return true;
4210               if (gfc_traverse_expr (ar.end[i], sym, func, f))
4211                 return true;
4212               if (gfc_traverse_expr (ar.stride[i], sym, func, f))
4213                 return true;
4214             }
4215           break;
4216
4217         case REF_SUBSTRING:
4218           if (gfc_traverse_expr (ref->u.ss.start, sym, func, f))
4219             return true;
4220           if (gfc_traverse_expr (ref->u.ss.end, sym, func, f))
4221             return true;
4222           break;
4223
4224         case REF_COMPONENT:
4225           if (ref->u.c.component->ts.type == BT_CHARACTER
4226                 && ref->u.c.component->ts.u.cl
4227                 && ref->u.c.component->ts.u.cl->length
4228                 && ref->u.c.component->ts.u.cl->length->expr_type
4229                      != EXPR_CONSTANT
4230                 && gfc_traverse_expr (ref->u.c.component->ts.u.cl->length,
4231                                       sym, func, f))
4232             return true;
4233
4234           if (ref->u.c.component->as)
4235             for (i = 0; i < ref->u.c.component->as->rank
4236                             + ref->u.c.component->as->corank; i++)
4237               {
4238                 if (gfc_traverse_expr (ref->u.c.component->as->lower[i],
4239                                        sym, func, f))
4240                   return true;
4241                 if (gfc_traverse_expr (ref->u.c.component->as->upper[i],
4242                                        sym, func, f))
4243                   return true;
4244               }
4245           break;
4246
4247         default:
4248           gcc_unreachable ();
4249         }
4250       ref = ref->next;
4251     }
4252   return false;
4253 }
4254
4255 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced.  */
4256
4257 static bool
4258 expr_set_symbols_referenced (gfc_expr *expr,
4259                              gfc_symbol *sym ATTRIBUTE_UNUSED,
4260                              int *f ATTRIBUTE_UNUSED)
4261 {
4262   if (expr->expr_type != EXPR_VARIABLE)
4263     return false;
4264   gfc_set_sym_referenced (expr->symtree->n.sym);
4265   return false;
4266 }
4267
4268 void
4269 gfc_expr_set_symbols_referenced (gfc_expr *expr)
4270 {
4271   gfc_traverse_expr (expr, NULL, expr_set_symbols_referenced, 0);
4272 }
4273
4274
4275 /* Determine if an expression is a procedure pointer component and return
4276    the component in that case.  Otherwise return NULL.  */
4277
4278 gfc_component *
4279 gfc_get_proc_ptr_comp (gfc_expr *expr)
4280 {
4281   gfc_ref *ref;
4282
4283   if (!expr || !expr->ref)
4284     return NULL;
4285
4286   ref = expr->ref;
4287   while (ref->next)
4288     ref = ref->next;
4289
4290   if (ref->type == REF_COMPONENT
4291       && ref->u.c.component->attr.proc_pointer)
4292     return ref->u.c.component;
4293
4294   return NULL;
4295 }
4296
4297
4298 /* Determine if an expression is a procedure pointer component.  */
4299
4300 bool
4301 gfc_is_proc_ptr_comp (gfc_expr *expr)
4302 {
4303   return (gfc_get_proc_ptr_comp (expr) != NULL);
4304 }
4305
4306
4307 /* Determine if an expression is a function with an allocatable class scalar
4308    result.  */
4309 bool
4310 gfc_is_alloc_class_scalar_function (gfc_expr *expr)
4311 {
4312   if (expr->expr_type == EXPR_FUNCTION
4313       && expr->value.function.esym
4314       && expr->value.function.esym->result
4315       && expr->value.function.esym->result->ts.type == BT_CLASS
4316       && !CLASS_DATA (expr->value.function.esym->result)->attr.dimension
4317       && CLASS_DATA (expr->value.function.esym->result)->attr.allocatable)
4318     return true;
4319
4320   return false;
4321 }
4322
4323
4324 /* Determine if an expression is a function with an allocatable class array
4325    result.  */
4326 bool
4327 gfc_is_alloc_class_array_function (gfc_expr *expr)
4328 {
4329   if (expr->expr_type == EXPR_FUNCTION
4330       && expr->value.function.esym
4331       && expr->value.function.esym->result
4332       && expr->value.function.esym->result->ts.type == BT_CLASS
4333       && CLASS_DATA (expr->value.function.esym->result)->attr.dimension
4334       && CLASS_DATA (expr->value.function.esym->result)->attr.allocatable)
4335     return true;
4336
4337   return false;
4338 }
4339
4340
4341 /* Walk an expression tree and check each variable encountered for being typed.
4342    If strict is not set, a top-level variable is tolerated untyped in -std=gnu
4343    mode as is a basic arithmetic expression using those; this is for things in
4344    legacy-code like:
4345
4346      INTEGER :: arr(n), n
4347      INTEGER :: arr(n + 1), n
4348
4349    The namespace is needed for IMPLICIT typing.  */
4350
4351 static gfc_namespace* check_typed_ns;
4352
4353 static bool
4354 expr_check_typed_help (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED,
4355                        int* f ATTRIBUTE_UNUSED)
4356 {
4357   bool t;
4358
4359   if (e->expr_type != EXPR_VARIABLE)
4360     return false;
4361
4362   gcc_assert (e->symtree);
4363   t = gfc_check_symbol_typed (e->symtree->n.sym, check_typed_ns,
4364                               true, e->where);
4365
4366   return (!t);
4367 }
4368
4369 bool
4370 gfc_expr_check_typed (gfc_expr* e, gfc_namespace* ns, bool strict)
4371 {
4372   bool error_found;
4373
4374   /* If this is a top-level variable or EXPR_OP, do the check with strict given
4375      to us.  */
4376   if (!strict)
4377     {
4378       if (e->expr_type == EXPR_VARIABLE && !e->ref)
4379         return gfc_check_symbol_typed (e->symtree->n.sym, ns, strict, e->where);
4380
4381       if (e->expr_type == EXPR_OP)
4382         {
4383           bool t = true;
4384
4385           gcc_assert (e->value.op.op1);
4386           t = gfc_expr_check_typed (e->value.op.op1, ns, strict);
4387
4388           if (t && e->value.op.op2)
4389             t = gfc_expr_check_typed (e->value.op.op2, ns, strict);
4390
4391           return t;
4392         }
4393     }
4394
4395   /* Otherwise, walk the expression and do it strictly.  */
4396   check_typed_ns = ns;
4397   error_found = gfc_traverse_expr (e, NULL, &expr_check_typed_help, 0);
4398
4399   return error_found ? false : true;
4400 }
4401
4402
4403 bool
4404 gfc_ref_this_image (gfc_ref *ref)
4405 {
4406   int n;
4407
4408   gcc_assert (ref->type == REF_ARRAY && ref->u.ar.codimen > 0);
4409
4410   for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
4411     if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
4412       return false;
4413
4414   return true;
4415 }
4416
4417
4418 bool
4419 gfc_is_coindexed (gfc_expr *e)
4420 {
4421   gfc_ref *ref;
4422
4423   for (ref = e->ref; ref; ref = ref->next)
4424     if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
4425       return !gfc_ref_this_image (ref);
4426
4427   return false;
4428 }
4429
4430
4431 /* Coarrays are variables with a corank but not being coindexed. However, also
4432    the following is a coarray: A subobject of a coarray is a coarray if it does
4433    not have any cosubscripts, vector subscripts, allocatable component
4434    selection, or pointer component selection. (F2008, 2.4.7)  */
4435
4436 bool
4437 gfc_is_coarray (gfc_expr *e)
4438 {
4439   gfc_ref *ref;
4440   gfc_symbol *sym;
4441   gfc_component *comp;
4442   bool coindexed;
4443   bool coarray;
4444   int i;
4445
4446   if (e->expr_type != EXPR_VARIABLE)
4447     return false;
4448
4449   coindexed = false;
4450   sym = e->symtree->n.sym;
4451
4452   if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
4453     coarray = CLASS_DATA (sym)->attr.codimension;
4454   else
4455     coarray = sym->attr.codimension;
4456
4457   for (ref = e->ref; ref; ref = ref->next)
4458     switch (ref->type)
4459     {
4460       case REF_COMPONENT:
4461         comp = ref->u.c.component;
4462         if (comp->ts.type == BT_CLASS && comp->attr.class_ok
4463             && (CLASS_DATA (comp)->attr.class_pointer
4464                 || CLASS_DATA (comp)->attr.allocatable))
4465           {
4466             coindexed = false;
4467             coarray = CLASS_DATA (comp)->attr.codimension;
4468           }
4469         else if (comp->attr.pointer || comp->attr.allocatable)
4470           {
4471             coindexed = false;
4472             coarray = comp->attr.codimension;
4473           }
4474         break;
4475
4476      case REF_ARRAY:
4477         if (!coarray)
4478           break;
4479
4480         if (ref->u.ar.codimen > 0 && !gfc_ref_this_image (ref))
4481           {
4482             coindexed = true;
4483             break;
4484           }
4485
4486         for (i = 0; i < ref->u.ar.dimen; i++)
4487           if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
4488             {
4489               coarray = false;
4490               break;
4491             }
4492         break;
4493
4494      case REF_SUBSTRING:
4495         break;
4496     }
4497
4498   return coarray && !coindexed;
4499 }
4500
4501
4502 int
4503 gfc_get_corank (gfc_expr *e)
4504 {
4505   int corank;
4506   gfc_ref *ref;
4507
4508   if (!gfc_is_coarray (e))
4509     return 0;
4510
4511   if (e->ts.type == BT_CLASS && e->ts.u.derived->components)
4512     corank = e->ts.u.derived->components->as
4513              ? e->ts.u.derived->components->as->corank : 0;
4514   else
4515     corank = e->symtree->n.sym->as ? e->symtree->n.sym->as->corank : 0;
4516
4517   for (ref = e->ref; ref; ref = ref->next)
4518     {
4519       if (ref->type == REF_ARRAY)
4520         corank = ref->u.ar.as->corank;
4521       gcc_assert (ref->type != REF_SUBSTRING);
4522     }
4523
4524   return corank;
4525 }
4526
4527
4528 /* Check whether the expression has an ultimate allocatable component.
4529    Being itself allocatable does not count.  */
4530 bool
4531 gfc_has_ultimate_allocatable (gfc_expr *e)
4532 {
4533   gfc_ref *ref, *last = NULL;
4534
4535   if (e->expr_type != EXPR_VARIABLE)
4536     return false;
4537
4538   for (ref = e->ref; ref; ref = ref->next)
4539     if (ref->type == REF_COMPONENT)
4540       last = ref;
4541
4542   if (last && last->u.c.component->ts.type == BT_CLASS)
4543     return CLASS_DATA (last->u.c.component)->attr.alloc_comp;
4544   else if (last && last->u.c.component->ts.type == BT_DERIVED)
4545     return last->u.c.component->ts.u.derived->attr.alloc_comp;
4546   else if (last)
4547     return false;
4548
4549   if (e->ts.type == BT_CLASS)
4550     return CLASS_DATA (e)->attr.alloc_comp;
4551   else if (e->ts.type == BT_DERIVED)
4552     return e->ts.u.derived->attr.alloc_comp;
4553   else
4554     return false;
4555 }
4556
4557
4558 /* Check whether the expression has an pointer component.
4559    Being itself a pointer does not count.  */
4560 bool
4561 gfc_has_ultimate_pointer (gfc_expr *e)
4562 {
4563   gfc_ref *ref, *last = NULL;
4564
4565   if (e->expr_type != EXPR_VARIABLE)
4566     return false;
4567
4568   for (ref = e->ref; ref; ref = ref->next)
4569     if (ref->type == REF_COMPONENT)
4570       last = ref;
4571
4572   if (last && last->u.c.component->ts.type == BT_CLASS)
4573     return CLASS_DATA (last->u.c.component)->attr.pointer_comp;
4574   else if (last && last->u.c.component->ts.type == BT_DERIVED)
4575     return last->u.c.component->ts.u.derived->attr.pointer_comp;
4576   else if (last)
4577     return false;
4578
4579   if (e->ts.type == BT_CLASS)
4580     return CLASS_DATA (e)->attr.pointer_comp;
4581   else if (e->ts.type == BT_DERIVED)
4582     return e->ts.u.derived->attr.pointer_comp;
4583   else
4584     return false;
4585 }
4586
4587
4588 /* Check whether an expression is "simply contiguous", cf. F2008, 6.5.4.
4589    Note: A scalar is not regarded as "simply contiguous" by the standard.
4590    if bool is not strict, some further checks are done - for instance,
4591    a "(::1)" is accepted.  */
4592
4593 bool
4594 gfc_is_simply_contiguous (gfc_expr *expr, bool strict)
4595 {
4596   bool colon;
4597   int i;
4598   gfc_array_ref *ar = NULL;
4599   gfc_ref *ref, *part_ref = NULL;
4600   gfc_symbol *sym;
4601
4602   if (expr->expr_type == EXPR_FUNCTION)
4603     return expr->value.function.esym
4604            ? expr->value.function.esym->result->attr.contiguous : false;
4605   else if (expr->expr_type != EXPR_VARIABLE)
4606     return false;
4607
4608   if (expr->rank == 0)
4609     return false;
4610
4611   for (ref = expr->ref; ref; ref = ref->next)
4612     {
4613       if (ar)
4614         return false; /* Array shall be last part-ref.  */
4615
4616       if (ref->type == REF_COMPONENT)
4617         part_ref  = ref;
4618       else if (ref->type == REF_SUBSTRING)
4619         return false;
4620       else if (ref->u.ar.type != AR_ELEMENT)
4621         ar = &ref->u.ar;
4622     }
4623
4624   sym = expr->symtree->n.sym;
4625   if (expr->ts.type != BT_CLASS
4626         && ((part_ref
4627                 && !part_ref->u.c.component->attr.contiguous
4628                 && part_ref->u.c.component->attr.pointer)
4629             || (!part_ref
4630                 && !sym->attr.contiguous
4631                 && (sym->attr.pointer
4632                     || sym->as->type == AS_ASSUMED_RANK
4633                     || sym->as->type == AS_ASSUMED_SHAPE))))
4634     return false;
4635
4636   if (!ar || ar->type == AR_FULL)
4637     return true;
4638
4639   gcc_assert (ar->type == AR_SECTION);
4640
4641   /* Check for simply contiguous array */
4642   colon = true;
4643   for (i = 0; i < ar->dimen; i++)
4644     {
4645       if (ar->dimen_type[i] == DIMEN_VECTOR)
4646         return false;
4647
4648       if (ar->dimen_type[i] == DIMEN_ELEMENT)
4649         {
4650           colon = false;
4651           continue;
4652         }
4653
4654       gcc_assert (ar->dimen_type[i] == DIMEN_RANGE);
4655
4656
4657       /* If the previous section was not contiguous, that's an error,
4658          unless we have effective only one element and checking is not
4659          strict.  */
4660       if (!colon && (strict || !ar->start[i] || !ar->end[i]
4661                      || ar->start[i]->expr_type != EXPR_CONSTANT
4662                      || ar->end[i]->expr_type != EXPR_CONSTANT
4663                      || mpz_cmp (ar->start[i]->value.integer,
4664                                  ar->end[i]->value.integer) != 0))
4665         return false;
4666
4667       /* Following the standard, "(::1)" or - if known at compile time -
4668          "(lbound:ubound)" are not simply contiguous; if strict
4669          is false, they are regarded as simply contiguous.  */
4670       if (ar->stride[i] && (strict || ar->stride[i]->expr_type != EXPR_CONSTANT
4671                             || ar->stride[i]->ts.type != BT_INTEGER
4672                             || mpz_cmp_si (ar->stride[i]->value.integer, 1) != 0))
4673         return false;
4674
4675       if (ar->start[i]
4676           && (strict || ar->start[i]->expr_type != EXPR_CONSTANT
4677               || !ar->as->lower[i]
4678               || ar->as->lower[i]->expr_type != EXPR_CONSTANT
4679               || mpz_cmp (ar->start[i]->value.integer,
4680                           ar->as->lower[i]->value.integer) != 0))
4681         colon = false;
4682
4683       if (ar->end[i]
4684           && (strict || ar->end[i]->expr_type != EXPR_CONSTANT
4685               || !ar->as->upper[i]
4686               || ar->as->upper[i]->expr_type != EXPR_CONSTANT
4687               || mpz_cmp (ar->end[i]->value.integer,
4688                           ar->as->upper[i]->value.integer) != 0))
4689         colon = false;
4690     }
4691
4692   return true;
4693 }
4694
4695
4696 /* Build call to an intrinsic procedure.  The number of arguments has to be
4697    passed (rather than ending the list with a NULL value) because we may
4698    want to add arguments but with a NULL-expression.  */
4699
4700 gfc_expr*
4701 gfc_build_intrinsic_call (gfc_namespace *ns, gfc_isym_id id, const char* name,
4702                           locus where, unsigned numarg, ...)
4703 {
4704   gfc_expr* result;
4705   gfc_actual_arglist* atail;
4706   gfc_intrinsic_sym* isym;
4707   va_list ap;
4708   unsigned i;
4709   const char *mangled_name = gfc_get_string (GFC_PREFIX ("%s"), name);
4710
4711   isym = gfc_intrinsic_function_by_id (id);
4712   gcc_assert (isym);
4713
4714   result = gfc_get_expr ();
4715   result->expr_type = EXPR_FUNCTION;
4716   result->ts = isym->ts;
4717   result->where = where;
4718   result->value.function.name = mangled_name;
4719   result->value.function.isym = isym;
4720
4721   gfc_get_sym_tree (mangled_name, ns, &result->symtree, false);
4722   gfc_commit_symbol (result->symtree->n.sym);
4723   gcc_assert (result->symtree
4724               && (result->symtree->n.sym->attr.flavor == FL_PROCEDURE
4725                   || result->symtree->n.sym->attr.flavor == FL_UNKNOWN));
4726   result->symtree->n.sym->intmod_sym_id = id;
4727   result->symtree->n.sym->attr.flavor = FL_PROCEDURE;
4728   result->symtree->n.sym->attr.intrinsic = 1;
4729   result->symtree->n.sym->attr.artificial = 1;
4730
4731   va_start (ap, numarg);
4732   atail = NULL;
4733   for (i = 0; i < numarg; ++i)
4734     {
4735       if (atail)
4736         {
4737           atail->next = gfc_get_actual_arglist ();
4738           atail = atail->next;
4739         }
4740       else
4741         atail = result->value.function.actual = gfc_get_actual_arglist ();
4742
4743       atail->expr = va_arg (ap, gfc_expr*);
4744     }
4745   va_end (ap);
4746
4747   return result;
4748 }
4749
4750
4751 /* Check if an expression may appear in a variable definition context
4752    (F2008, 16.6.7) or pointer association context (F2008, 16.6.8).
4753    This is called from the various places when resolving
4754    the pieces that make up such a context.
4755    If own_scope is true (applies to, e.g., ac-implied-do/data-implied-do
4756    variables), some checks are not performed.
4757
4758    Optionally, a possible error message can be suppressed if context is NULL
4759    and just the return status (true / false) be requested.  */
4760
4761 bool
4762 gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj,
4763                           bool own_scope, const char* context)
4764 {
4765   gfc_symbol* sym = NULL;
4766   bool is_pointer;
4767   bool check_intentin;
4768   bool ptr_component;
4769   symbol_attribute attr;
4770   gfc_ref* ref;
4771   int i;
4772
4773   if (e->expr_type == EXPR_VARIABLE)
4774     {
4775       gcc_assert (e->symtree);
4776       sym = e->symtree->n.sym;
4777     }
4778   else if (e->expr_type == EXPR_FUNCTION)
4779     {
4780       gcc_assert (e->symtree);
4781       sym = e->value.function.esym ? e->value.function.esym : e->symtree->n.sym;
4782     }
4783
4784   attr = gfc_expr_attr (e);
4785   if (!pointer && e->expr_type == EXPR_FUNCTION && attr.pointer)
4786     {
4787       if (!(gfc_option.allow_std & GFC_STD_F2008))
4788         {
4789           if (context)
4790             gfc_error ("Fortran 2008: Pointer functions in variable definition"
4791                        " context (%s) at %L", context, &e->where);
4792           return false;
4793         }
4794     }
4795   else if (e->expr_type != EXPR_VARIABLE)
4796     {
4797       if (context)
4798         gfc_error ("Non-variable expression in variable definition context (%s)"
4799                    " at %L", context, &e->where);
4800       return false;
4801     }
4802
4803   if (!pointer && sym->attr.flavor == FL_PARAMETER)
4804     {
4805       if (context)
4806         gfc_error ("Named constant %qs in variable definition context (%s)"
4807                    " at %L", sym->name, context, &e->where);
4808       return false;
4809     }
4810   if (!pointer && sym->attr.flavor != FL_VARIABLE
4811       && !(sym->attr.flavor == FL_PROCEDURE && sym == sym->result)
4812       && !(sym->attr.flavor == FL_PROCEDURE && sym->attr.proc_pointer))
4813     {
4814       if (context)
4815         gfc_error ("%qs in variable definition context (%s) at %L is not"
4816                    " a variable", sym->name, context, &e->where);
4817       return false;
4818     }
4819
4820   /* Find out whether the expr is a pointer; this also means following
4821      component references to the last one.  */
4822   is_pointer = (attr.pointer || attr.proc_pointer);
4823   if (pointer && !is_pointer)
4824     {
4825       if (context)
4826         gfc_error ("Non-POINTER in pointer association context (%s)"
4827                    " at %L", context, &e->where);
4828       return false;
4829     }
4830
4831   /* F2008, C1303.  */
4832   if (!alloc_obj
4833       && (attr.lock_comp
4834           || (e->ts.type == BT_DERIVED
4835               && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
4836               && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)))
4837     {
4838       if (context)
4839         gfc_error ("LOCK_TYPE in variable definition context (%s) at %L",
4840                    context, &e->where);
4841       return false;
4842     }
4843
4844   /* INTENT(IN) dummy argument.  Check this, unless the object itself is the
4845      component of sub-component of a pointer; we need to distinguish
4846      assignment to a pointer component from pointer-assignment to a pointer
4847      component.  Note that (normal) assignment to procedure pointers is not
4848      possible.  */
4849   check_intentin = !own_scope;
4850   ptr_component = (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
4851                   ? CLASS_DATA (sym)->attr.class_pointer : sym->attr.pointer;
4852   for (ref = e->ref; ref && check_intentin; ref = ref->next)
4853     {
4854       if (ptr_component && ref->type == REF_COMPONENT)
4855         check_intentin = false;
4856       if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
4857         {
4858           ptr_component = true;
4859           if (!pointer)
4860             check_intentin = false;
4861         }
4862     }
4863   if (check_intentin && sym->attr.intent == INTENT_IN)
4864     {
4865       if (pointer && is_pointer)
4866         {
4867           if (context)
4868             gfc_error ("Dummy argument %qs with INTENT(IN) in pointer"
4869                        " association context (%s) at %L",
4870                        sym->name, context, &e->where);
4871           return false;
4872         }
4873       if (!pointer && !is_pointer && !sym->attr.pointer)
4874         {
4875           if (context)
4876             gfc_error ("Dummy argument %qs with INTENT(IN) in variable"
4877                        " definition context (%s) at %L",
4878                        sym->name, context, &e->where);
4879           return false;
4880         }
4881     }
4882
4883   /* PROTECTED and use-associated.  */
4884   if (sym->attr.is_protected && sym->attr.use_assoc && check_intentin)
4885     {
4886       if (pointer && is_pointer)
4887         {
4888           if (context)
4889             gfc_error ("Variable %qs is PROTECTED and can not appear in a"
4890                        " pointer association context (%s) at %L",
4891                        sym->name, context, &e->where);
4892           return false;
4893         }
4894       if (!pointer && !is_pointer)
4895         {
4896           if (context)
4897             gfc_error ("Variable %qs is PROTECTED and can not appear in a"
4898                        " variable definition context (%s) at %L",
4899                        sym->name, context, &e->where);
4900           return false;
4901         }
4902     }
4903
4904   /* Variable not assignable from a PURE procedure but appears in
4905      variable definition context.  */
4906   if (!pointer && !own_scope && gfc_pure (NULL) && gfc_impure_variable (sym))
4907     {
4908       if (context)
4909         gfc_error ("Variable %qs can not appear in a variable definition"
4910                    " context (%s) at %L in PURE procedure",
4911                    sym->name, context, &e->where);
4912       return false;
4913     }
4914
4915   if (!pointer && context && gfc_implicit_pure (NULL)
4916       && gfc_impure_variable (sym))
4917     {
4918       gfc_namespace *ns;
4919       gfc_symbol *sym;
4920
4921       for (ns = gfc_current_ns; ns; ns = ns->parent)
4922         {
4923           sym = ns->proc_name;
4924           if (sym == NULL)
4925             break;
4926           if (sym->attr.flavor == FL_PROCEDURE)
4927             {
4928               sym->attr.implicit_pure = 0;
4929               break;
4930             }
4931         }
4932     }
4933   /* Check variable definition context for associate-names.  */
4934   if (!pointer && sym->assoc)
4935     {
4936       const char* name;
4937       gfc_association_list* assoc;
4938
4939       gcc_assert (sym->assoc->target);
4940
4941       /* If this is a SELECT TYPE temporary (the association is used internally
4942          for SELECT TYPE), silently go over to the target.  */
4943       if (sym->attr.select_type_temporary)
4944         {
4945           gfc_expr* t = sym->assoc->target;
4946
4947           gcc_assert (t->expr_type == EXPR_VARIABLE);
4948           name = t->symtree->name;
4949
4950           if (t->symtree->n.sym->assoc)
4951             assoc = t->symtree->n.sym->assoc;
4952           else
4953             assoc = sym->assoc;
4954         }
4955       else
4956         {
4957           name = sym->name;
4958           assoc = sym->assoc;
4959         }
4960       gcc_assert (name && assoc);
4961
4962       /* Is association to a valid variable?  */
4963       if (!assoc->variable)
4964         {
4965           if (context)
4966             {
4967               if (assoc->target->expr_type == EXPR_VARIABLE)
4968                 gfc_error ("%qs at %L associated to vector-indexed target can"
4969                            " not be used in a variable definition context (%s)",
4970                            name, &e->where, context);
4971               else
4972                 gfc_error ("%qs at %L associated to expression can"
4973                            " not be used in a variable definition context (%s)",
4974                            name, &e->where, context);
4975             }
4976           return false;
4977         }
4978
4979       /* Target must be allowed to appear in a variable definition context.  */
4980       if (!gfc_check_vardef_context (assoc->target, pointer, false, false, NULL))
4981         {
4982           if (context)
4983             gfc_error_1 ("Associate-name '%s' can not appear in a variable"
4984                        " definition context (%s) at %L because its target"
4985                        " at %L can not, either",
4986                        name, context, &e->where,
4987                        &assoc->target->where);
4988           return false;
4989         }
4990     }
4991
4992   /* Check for same value in vector expression subscript.  */
4993
4994   if (e->rank > 0)
4995     for (ref = e->ref; ref != NULL; ref = ref->next)
4996       if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
4997         for (i = 0; i < GFC_MAX_DIMENSIONS
4998                && ref->u.ar.dimen_type[i] != 0; i++)
4999           if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
5000             {
5001               gfc_expr *arr = ref->u.ar.start[i];
5002               if (arr->expr_type == EXPR_ARRAY)
5003                 {
5004                   gfc_constructor *c, *n;
5005                   gfc_expr *ec, *en;
5006                   
5007                   for (c = gfc_constructor_first (arr->value.constructor);
5008                        c != NULL; c = gfc_constructor_next (c))
5009                     {
5010                       if (c == NULL || c->iterator != NULL)
5011                         continue;
5012                       
5013                       ec = c->expr;
5014
5015                       for (n = gfc_constructor_next (c); n != NULL;
5016                            n = gfc_constructor_next (n))
5017                         {
5018                           if (n->iterator != NULL)
5019                             continue;
5020                           
5021                           en = n->expr;
5022                           if (gfc_dep_compare_expr (ec, en) == 0)
5023                             {
5024                               if (context)
5025                                 gfc_error_now_1 ("Elements with the same value "
5026                                                  "at %L and %L in vector "
5027                                                  "subscript in a variable "
5028                                                  "definition context (%s)",
5029                                                  &(ec->where), &(en->where),
5030                                                  context);
5031                               return false;
5032                             }
5033                         }
5034                     }
5035                 }
5036             }
5037   
5038   return true;
5039 }