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