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