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