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