re PR fortran/54286 (Accepts invalid proc-pointer assignments involving proc-ptr...
[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 && sym->formal == 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->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->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)->attr.allocatable))
3890 break;
3891
3892 if (!comp)
3893 return NULL;
3894
3895 init = gfc_get_structure_constructor_expr (ts->type, ts->kind,
3896 &ts->u.derived->declared_at);
3897 init->ts = *ts;
3898
3899 for (comp = ts->u.derived->components; comp; comp = comp->next)
3900 {
3901 gfc_constructor *ctor = gfc_constructor_get();
3902
3903 if (comp->initializer)
3904 {
3905 ctor->expr = gfc_copy_expr (comp->initializer);
3906 if ((comp->ts.type != comp->initializer->ts.type
3907 || comp->ts.kind != comp->initializer->ts.kind)
3908 && !comp->attr.pointer && !comp->attr.proc_pointer)
3909 gfc_convert_type_warn (ctor->expr, &comp->ts, 2, false);
3910 }
3911
3912 if (comp->attr.allocatable
3913 || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable))
3914 {
3915 ctor->expr = gfc_get_expr ();
3916 ctor->expr->expr_type = EXPR_NULL;
3917 ctor->expr->ts = comp->ts;
3918 }
3919
3920 gfc_constructor_append (&init->value.constructor, ctor);
3921 }
3922
3923 return init;
3924 }
3925
3926
3927 /* Given a symbol, create an expression node with that symbol as a
3928 variable. If the symbol is array valued, setup a reference of the
3929 whole array. */
3930
3931 gfc_expr *
3932 gfc_get_variable_expr (gfc_symtree *var)
3933 {
3934 gfc_expr *e;
3935
3936 e = gfc_get_expr ();
3937 e->expr_type = EXPR_VARIABLE;
3938 e->symtree = var;
3939 e->ts = var->n.sym->ts;
3940
3941 if ((var->n.sym->as != NULL && var->n.sym->ts.type != BT_CLASS)
3942 || (var->n.sym->ts.type == BT_CLASS && CLASS_DATA (var->n.sym)
3943 && CLASS_DATA (var->n.sym)->as))
3944 {
3945 e->rank = var->n.sym->ts.type == BT_CLASS
3946 ? CLASS_DATA (var->n.sym)->as->rank : var->n.sym->as->rank;
3947 e->ref = gfc_get_ref ();
3948 e->ref->type = REF_ARRAY;
3949 e->ref->u.ar.type = AR_FULL;
3950 e->ref->u.ar.as = gfc_copy_array_spec (var->n.sym->ts.type == BT_CLASS
3951 ? CLASS_DATA (var->n.sym)->as
3952 : var->n.sym->as);
3953 }
3954
3955 return e;
3956 }
3957
3958
3959 /* Adds a full array reference to an expression, as needed. */
3960
3961 void
3962 gfc_add_full_array_ref (gfc_expr *e, gfc_array_spec *as)
3963 {
3964 gfc_ref *ref;
3965 for (ref = e->ref; ref; ref = ref->next)
3966 if (!ref->next)
3967 break;
3968 if (ref)
3969 {
3970 ref->next = gfc_get_ref ();
3971 ref = ref->next;
3972 }
3973 else
3974 {
3975 e->ref = gfc_get_ref ();
3976 ref = e->ref;
3977 }
3978 ref->type = REF_ARRAY;
3979 ref->u.ar.type = AR_FULL;
3980 ref->u.ar.dimen = e->rank;
3981 ref->u.ar.where = e->where;
3982 ref->u.ar.as = as;
3983 }
3984
3985
3986 gfc_expr *
3987 gfc_lval_expr_from_sym (gfc_symbol *sym)
3988 {
3989 gfc_expr *lval;
3990 lval = gfc_get_expr ();
3991 lval->expr_type = EXPR_VARIABLE;
3992 lval->where = sym->declared_at;
3993 lval->ts = sym->ts;
3994 lval->symtree = gfc_find_symtree (sym->ns->sym_root, sym->name);
3995
3996 /* It will always be a full array. */
3997 lval->rank = sym->as ? sym->as->rank : 0;
3998 if (lval->rank)
3999 gfc_add_full_array_ref (lval, sym->ts.type == BT_CLASS ?
4000 CLASS_DATA (sym)->as : sym->as);
4001 return lval;
4002 }
4003
4004
4005 /* Returns the array_spec of a full array expression. A NULL is
4006 returned otherwise. */
4007 gfc_array_spec *
4008 gfc_get_full_arrayspec_from_expr (gfc_expr *expr)
4009 {
4010 gfc_array_spec *as;
4011 gfc_ref *ref;
4012
4013 if (expr->rank == 0)
4014 return NULL;
4015
4016 /* Follow any component references. */
4017 if (expr->expr_type == EXPR_VARIABLE
4018 || expr->expr_type == EXPR_CONSTANT)
4019 {
4020 as = expr->symtree->n.sym->as;
4021 for (ref = expr->ref; ref; ref = ref->next)
4022 {
4023 switch (ref->type)
4024 {
4025 case REF_COMPONENT:
4026 as = ref->u.c.component->as;
4027 continue;
4028
4029 case REF_SUBSTRING:
4030 continue;
4031
4032 case REF_ARRAY:
4033 {
4034 switch (ref->u.ar.type)
4035 {
4036 case AR_ELEMENT:
4037 case AR_SECTION:
4038 case AR_UNKNOWN:
4039 as = NULL;
4040 continue;
4041
4042 case AR_FULL:
4043 break;
4044 }
4045 break;
4046 }
4047 }
4048 }
4049 }
4050 else
4051 as = NULL;
4052
4053 return as;
4054 }
4055
4056
4057 /* General expression traversal function. */
4058
4059 bool
4060 gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym,
4061 bool (*func)(gfc_expr *, gfc_symbol *, int*),
4062 int f)
4063 {
4064 gfc_array_ref ar;
4065 gfc_ref *ref;
4066 gfc_actual_arglist *args;
4067 gfc_constructor *c;
4068 int i;
4069
4070 if (!expr)
4071 return false;
4072
4073 if ((*func) (expr, sym, &f))
4074 return true;
4075
4076 if (expr->ts.type == BT_CHARACTER
4077 && expr->ts.u.cl
4078 && expr->ts.u.cl->length
4079 && expr->ts.u.cl->length->expr_type != EXPR_CONSTANT
4080 && gfc_traverse_expr (expr->ts.u.cl->length, sym, func, f))
4081 return true;
4082
4083 switch (expr->expr_type)
4084 {
4085 case EXPR_PPC:
4086 case EXPR_COMPCALL:
4087 case EXPR_FUNCTION:
4088 for (args = expr->value.function.actual; args; args = args->next)
4089 {
4090 if (gfc_traverse_expr (args->expr, sym, func, f))
4091 return true;
4092 }
4093 break;
4094
4095 case EXPR_VARIABLE:
4096 case EXPR_CONSTANT:
4097 case EXPR_NULL:
4098 case EXPR_SUBSTRING:
4099 break;
4100
4101 case EXPR_STRUCTURE:
4102 case EXPR_ARRAY:
4103 for (c = gfc_constructor_first (expr->value.constructor);
4104 c; c = gfc_constructor_next (c))
4105 {
4106 if (gfc_traverse_expr (c->expr, sym, func, f))
4107 return true;
4108 if (c->iterator)
4109 {
4110 if (gfc_traverse_expr (c->iterator->var, sym, func, f))
4111 return true;
4112 if (gfc_traverse_expr (c->iterator->start, sym, func, f))
4113 return true;
4114 if (gfc_traverse_expr (c->iterator->end, sym, func, f))
4115 return true;
4116 if (gfc_traverse_expr (c->iterator->step, sym, func, f))
4117 return true;
4118 }
4119 }
4120 break;
4121
4122 case EXPR_OP:
4123 if (gfc_traverse_expr (expr->value.op.op1, sym, func, f))
4124 return true;
4125 if (gfc_traverse_expr (expr->value.op.op2, sym, func, f))
4126 return true;
4127 break;
4128
4129 default:
4130 gcc_unreachable ();
4131 break;
4132 }
4133
4134 ref = expr->ref;
4135 while (ref != NULL)
4136 {
4137 switch (ref->type)
4138 {
4139 case REF_ARRAY:
4140 ar = ref->u.ar;
4141 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
4142 {
4143 if (gfc_traverse_expr (ar.start[i], sym, func, f))
4144 return true;
4145 if (gfc_traverse_expr (ar.end[i], sym, func, f))
4146 return true;
4147 if (gfc_traverse_expr (ar.stride[i], sym, func, f))
4148 return true;
4149 }
4150 break;
4151
4152 case REF_SUBSTRING:
4153 if (gfc_traverse_expr (ref->u.ss.start, sym, func, f))
4154 return true;
4155 if (gfc_traverse_expr (ref->u.ss.end, sym, func, f))
4156 return true;
4157 break;
4158
4159 case REF_COMPONENT:
4160 if (ref->u.c.component->ts.type == BT_CHARACTER
4161 && ref->u.c.component->ts.u.cl
4162 && ref->u.c.component->ts.u.cl->length
4163 && ref->u.c.component->ts.u.cl->length->expr_type
4164 != EXPR_CONSTANT
4165 && gfc_traverse_expr (ref->u.c.component->ts.u.cl->length,
4166 sym, func, f))
4167 return true;
4168
4169 if (ref->u.c.component->as)
4170 for (i = 0; i < ref->u.c.component->as->rank
4171 + ref->u.c.component->as->corank; i++)
4172 {
4173 if (gfc_traverse_expr (ref->u.c.component->as->lower[i],
4174 sym, func, f))
4175 return true;
4176 if (gfc_traverse_expr (ref->u.c.component->as->upper[i],
4177 sym, func, f))
4178 return true;
4179 }
4180 break;
4181
4182 default:
4183 gcc_unreachable ();
4184 }
4185 ref = ref->next;
4186 }
4187 return false;
4188 }
4189
4190 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */
4191
4192 static bool
4193 expr_set_symbols_referenced (gfc_expr *expr,
4194 gfc_symbol *sym ATTRIBUTE_UNUSED,
4195 int *f ATTRIBUTE_UNUSED)
4196 {
4197 if (expr->expr_type != EXPR_VARIABLE)
4198 return false;
4199 gfc_set_sym_referenced (expr->symtree->n.sym);
4200 return false;
4201 }
4202
4203 void
4204 gfc_expr_set_symbols_referenced (gfc_expr *expr)
4205 {
4206 gfc_traverse_expr (expr, NULL, expr_set_symbols_referenced, 0);
4207 }
4208
4209
4210 /* Determine if an expression is a procedure pointer component and return
4211 the component in that case. Otherwise return NULL. */
4212
4213 gfc_component *
4214 gfc_get_proc_ptr_comp (gfc_expr *expr)
4215 {
4216 gfc_ref *ref;
4217
4218 if (!expr || !expr->ref)
4219 return NULL;
4220
4221 ref = expr->ref;
4222 while (ref->next)
4223 ref = ref->next;
4224
4225 if (ref->type == REF_COMPONENT
4226 && ref->u.c.component->attr.proc_pointer)
4227 return ref->u.c.component;
4228
4229 return NULL;
4230 }
4231
4232
4233 /* Determine if an expression is a procedure pointer component. */
4234
4235 bool
4236 gfc_is_proc_ptr_comp (gfc_expr *expr)
4237 {
4238 return (gfc_get_proc_ptr_comp (expr) != NULL);
4239 }
4240
4241
4242 /* Walk an expression tree and check each variable encountered for being typed.
4243 If strict is not set, a top-level variable is tolerated untyped in -std=gnu
4244 mode as is a basic arithmetic expression using those; this is for things in
4245 legacy-code like:
4246
4247 INTEGER :: arr(n), n
4248 INTEGER :: arr(n + 1), n
4249
4250 The namespace is needed for IMPLICIT typing. */
4251
4252 static gfc_namespace* check_typed_ns;
4253
4254 static bool
4255 expr_check_typed_help (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED,
4256 int* f ATTRIBUTE_UNUSED)
4257 {
4258 gfc_try t;
4259
4260 if (e->expr_type != EXPR_VARIABLE)
4261 return false;
4262
4263 gcc_assert (e->symtree);
4264 t = gfc_check_symbol_typed (e->symtree->n.sym, check_typed_ns,
4265 true, e->where);
4266
4267 return (t == FAILURE);
4268 }
4269
4270 gfc_try
4271 gfc_expr_check_typed (gfc_expr* e, gfc_namespace* ns, bool strict)
4272 {
4273 bool error_found;
4274
4275 /* If this is a top-level variable or EXPR_OP, do the check with strict given
4276 to us. */
4277 if (!strict)
4278 {
4279 if (e->expr_type == EXPR_VARIABLE && !e->ref)
4280 return gfc_check_symbol_typed (e->symtree->n.sym, ns, strict, e->where);
4281
4282 if (e->expr_type == EXPR_OP)
4283 {
4284 gfc_try t = SUCCESS;
4285
4286 gcc_assert (e->value.op.op1);
4287 t = gfc_expr_check_typed (e->value.op.op1, ns, strict);
4288
4289 if (t == SUCCESS && e->value.op.op2)
4290 t = gfc_expr_check_typed (e->value.op.op2, ns, strict);
4291
4292 return t;
4293 }
4294 }
4295
4296 /* Otherwise, walk the expression and do it strictly. */
4297 check_typed_ns = ns;
4298 error_found = gfc_traverse_expr (e, NULL, &expr_check_typed_help, 0);
4299
4300 return error_found ? FAILURE : SUCCESS;
4301 }
4302
4303
4304 /* Walk an expression tree and replace all dummy symbols by the corresponding
4305 symbol in the formal_ns of "sym". Needed for copying interfaces in PROCEDURE
4306 statements. The boolean return value is required by gfc_traverse_expr. */
4307
4308 static bool
4309 replace_symbol (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED)
4310 {
4311 if ((expr->expr_type == EXPR_VARIABLE
4312 || (expr->expr_type == EXPR_FUNCTION
4313 && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
4314 && expr->symtree->n.sym->ns == sym->ts.interface->formal_ns
4315 && expr->symtree->n.sym->attr.dummy)
4316 {
4317 gfc_symtree *root = sym->formal_ns ? sym->formal_ns->sym_root
4318 : gfc_current_ns->sym_root;
4319 gfc_symtree *stree = gfc_find_symtree (root, expr->symtree->n.sym->name);
4320 gcc_assert (stree);
4321 stree->n.sym->attr = expr->symtree->n.sym->attr;
4322 expr->symtree = stree;
4323 }
4324 return false;
4325 }
4326
4327 void
4328 gfc_expr_replace_symbols (gfc_expr *expr, gfc_symbol *dest)
4329 {
4330 gfc_traverse_expr (expr, dest, &replace_symbol, 0);
4331 }
4332
4333
4334 /* The following is analogous to 'replace_symbol', and needed for copying
4335 interfaces for procedure pointer components. The argument 'sym' must formally
4336 be a gfc_symbol, so that the function can be passed to gfc_traverse_expr.
4337 However, it gets actually passed a gfc_component (i.e. the procedure pointer
4338 component in whose formal_ns the arguments have to be). */
4339
4340 static bool
4341 replace_comp (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED)
4342 {
4343 gfc_component *comp;
4344 comp = (gfc_component *)sym;
4345 if ((expr->expr_type == EXPR_VARIABLE
4346 || (expr->expr_type == EXPR_FUNCTION
4347 && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
4348 && expr->symtree->n.sym->ns == comp->ts.interface->formal_ns)
4349 {
4350 gfc_symtree *stree;
4351 gfc_namespace *ns = comp->formal_ns;
4352 /* Don't use gfc_get_symtree as we prefer to fail badly if we don't find
4353 the symtree rather than create a new one (and probably fail later). */
4354 stree = gfc_find_symtree (ns ? ns->sym_root : gfc_current_ns->sym_root,
4355 expr->symtree->n.sym->name);
4356 gcc_assert (stree);
4357 stree->n.sym->attr = expr->symtree->n.sym->attr;
4358 expr->symtree = stree;
4359 }
4360 return false;
4361 }
4362
4363 void
4364 gfc_expr_replace_comp (gfc_expr *expr, gfc_component *dest)
4365 {
4366 gfc_traverse_expr (expr, (gfc_symbol *)dest, &replace_comp, 0);
4367 }
4368
4369
4370 bool
4371 gfc_ref_this_image (gfc_ref *ref)
4372 {
4373 int n;
4374
4375 gcc_assert (ref->type == REF_ARRAY && ref->u.ar.codimen > 0);
4376
4377 for (n = ref->u.ar.dimen; n < ref->u.ar.dimen + ref->u.ar.codimen; n++)
4378 if (ref->u.ar.dimen_type[n] != DIMEN_THIS_IMAGE)
4379 return false;
4380
4381 return true;
4382 }
4383
4384
4385 bool
4386 gfc_is_coindexed (gfc_expr *e)
4387 {
4388 gfc_ref *ref;
4389
4390 for (ref = e->ref; ref; ref = ref->next)
4391 if (ref->type == REF_ARRAY && ref->u.ar.codimen > 0)
4392 return !gfc_ref_this_image (ref);
4393
4394 return false;
4395 }
4396
4397
4398 /* Coarrays are variables with a corank but not being coindexed. However, also
4399 the following is a coarray: A subobject of a coarray is a coarray if it does
4400 not have any cosubscripts, vector subscripts, allocatable component
4401 selection, or pointer component selection. (F2008, 2.4.7) */
4402
4403 bool
4404 gfc_is_coarray (gfc_expr *e)
4405 {
4406 gfc_ref *ref;
4407 gfc_symbol *sym;
4408 gfc_component *comp;
4409 bool coindexed;
4410 bool coarray;
4411 int i;
4412
4413 if (e->expr_type != EXPR_VARIABLE)
4414 return false;
4415
4416 coindexed = false;
4417 sym = e->symtree->n.sym;
4418
4419 if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
4420 coarray = CLASS_DATA (sym)->attr.codimension;
4421 else
4422 coarray = sym->attr.codimension;
4423
4424 for (ref = e->ref; ref; ref = ref->next)
4425 switch (ref->type)
4426 {
4427 case REF_COMPONENT:
4428 comp = ref->u.c.component;
4429 if (comp->ts.type == BT_CLASS && comp->attr.class_ok
4430 && (CLASS_DATA (comp)->attr.class_pointer
4431 || CLASS_DATA (comp)->attr.allocatable))
4432 {
4433 coindexed = false;
4434 coarray = CLASS_DATA (comp)->attr.codimension;
4435 }
4436 else if (comp->attr.pointer || comp->attr.allocatable)
4437 {
4438 coindexed = false;
4439 coarray = comp->attr.codimension;
4440 }
4441 break;
4442
4443 case REF_ARRAY:
4444 if (!coarray)
4445 break;
4446
4447 if (ref->u.ar.codimen > 0 && !gfc_ref_this_image (ref))
4448 {
4449 coindexed = true;
4450 break;
4451 }
4452
4453 for (i = 0; i < ref->u.ar.dimen; i++)
4454 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
4455 {
4456 coarray = false;
4457 break;
4458 }
4459 break;
4460
4461 case REF_SUBSTRING:
4462 break;
4463 }
4464
4465 return coarray && !coindexed;
4466 }
4467
4468
4469 int
4470 gfc_get_corank (gfc_expr *e)
4471 {
4472 int corank;
4473 gfc_ref *ref;
4474
4475 if (!gfc_is_coarray (e))
4476 return 0;
4477
4478 if (e->ts.type == BT_CLASS && e->ts.u.derived->components)
4479 corank = e->ts.u.derived->components->as
4480 ? e->ts.u.derived->components->as->corank : 0;
4481 else
4482 corank = e->symtree->n.sym->as ? e->symtree->n.sym->as->corank : 0;
4483
4484 for (ref = e->ref; ref; ref = ref->next)
4485 {
4486 if (ref->type == REF_ARRAY)
4487 corank = ref->u.ar.as->corank;
4488 gcc_assert (ref->type != REF_SUBSTRING);
4489 }
4490
4491 return corank;
4492 }
4493
4494
4495 /* Check whether the expression has an ultimate allocatable component.
4496 Being itself allocatable does not count. */
4497 bool
4498 gfc_has_ultimate_allocatable (gfc_expr *e)
4499 {
4500 gfc_ref *ref, *last = NULL;
4501
4502 if (e->expr_type != EXPR_VARIABLE)
4503 return false;
4504
4505 for (ref = e->ref; ref; ref = ref->next)
4506 if (ref->type == REF_COMPONENT)
4507 last = ref;
4508
4509 if (last && last->u.c.component->ts.type == BT_CLASS)
4510 return CLASS_DATA (last->u.c.component)->attr.alloc_comp;
4511 else if (last && last->u.c.component->ts.type == BT_DERIVED)
4512 return last->u.c.component->ts.u.derived->attr.alloc_comp;
4513 else if (last)
4514 return false;
4515
4516 if (e->ts.type == BT_CLASS)
4517 return CLASS_DATA (e)->attr.alloc_comp;
4518 else if (e->ts.type == BT_DERIVED)
4519 return e->ts.u.derived->attr.alloc_comp;
4520 else
4521 return false;
4522 }
4523
4524
4525 /* Check whether the expression has an pointer component.
4526 Being itself a pointer does not count. */
4527 bool
4528 gfc_has_ultimate_pointer (gfc_expr *e)
4529 {
4530 gfc_ref *ref, *last = NULL;
4531
4532 if (e->expr_type != EXPR_VARIABLE)
4533 return false;
4534
4535 for (ref = e->ref; ref; ref = ref->next)
4536 if (ref->type == REF_COMPONENT)
4537 last = ref;
4538
4539 if (last && last->u.c.component->ts.type == BT_CLASS)
4540 return CLASS_DATA (last->u.c.component)->attr.pointer_comp;
4541 else if (last && last->u.c.component->ts.type == BT_DERIVED)
4542 return last->u.c.component->ts.u.derived->attr.pointer_comp;
4543 else if (last)
4544 return false;
4545
4546 if (e->ts.type == BT_CLASS)
4547 return CLASS_DATA (e)->attr.pointer_comp;
4548 else if (e->ts.type == BT_DERIVED)
4549 return e->ts.u.derived->attr.pointer_comp;
4550 else
4551 return false;
4552 }
4553
4554
4555 /* Check whether an expression is "simply contiguous", cf. F2008, 6.5.4.
4556 Note: A scalar is not regarded as "simply contiguous" by the standard.
4557 if bool is not strict, some further checks are done - for instance,
4558 a "(::1)" is accepted. */
4559
4560 bool
4561 gfc_is_simply_contiguous (gfc_expr *expr, bool strict)
4562 {
4563 bool colon;
4564 int i;
4565 gfc_array_ref *ar = NULL;
4566 gfc_ref *ref, *part_ref = NULL;
4567 gfc_symbol *sym;
4568
4569 if (expr->expr_type == EXPR_FUNCTION)
4570 return expr->value.function.esym
4571 ? expr->value.function.esym->result->attr.contiguous : false;
4572 else if (expr->expr_type != EXPR_VARIABLE)
4573 return false;
4574
4575 if (expr->rank == 0)
4576 return false;
4577
4578 for (ref = expr->ref; ref; ref = ref->next)
4579 {
4580 if (ar)
4581 return false; /* Array shall be last part-ref. */
4582
4583 if (ref->type == REF_COMPONENT)
4584 part_ref = ref;
4585 else if (ref->type == REF_SUBSTRING)
4586 return false;
4587 else if (ref->u.ar.type != AR_ELEMENT)
4588 ar = &ref->u.ar;
4589 }
4590
4591 sym = expr->symtree->n.sym;
4592 if (expr->ts.type != BT_CLASS
4593 && ((part_ref
4594 && !part_ref->u.c.component->attr.contiguous
4595 && part_ref->u.c.component->attr.pointer)
4596 || (!part_ref
4597 && !sym->attr.contiguous
4598 && (sym->attr.pointer
4599 || sym->as->type == AS_ASSUMED_RANK
4600 || sym->as->type == AS_ASSUMED_SHAPE))))
4601 return false;
4602
4603 if (!ar || ar->type == AR_FULL)
4604 return true;
4605
4606 gcc_assert (ar->type == AR_SECTION);
4607
4608 /* Check for simply contiguous array */
4609 colon = true;
4610 for (i = 0; i < ar->dimen; i++)
4611 {
4612 if (ar->dimen_type[i] == DIMEN_VECTOR)
4613 return false;
4614
4615 if (ar->dimen_type[i] == DIMEN_ELEMENT)
4616 {
4617 colon = false;
4618 continue;
4619 }
4620
4621 gcc_assert (ar->dimen_type[i] == DIMEN_RANGE);
4622
4623
4624 /* If the previous section was not contiguous, that's an error,
4625 unless we have effective only one element and checking is not
4626 strict. */
4627 if (!colon && (strict || !ar->start[i] || !ar->end[i]
4628 || ar->start[i]->expr_type != EXPR_CONSTANT
4629 || ar->end[i]->expr_type != EXPR_CONSTANT
4630 || mpz_cmp (ar->start[i]->value.integer,
4631 ar->end[i]->value.integer) != 0))
4632 return false;
4633
4634 /* Following the standard, "(::1)" or - if known at compile time -
4635 "(lbound:ubound)" are not simply contiguous; if strict
4636 is false, they are regarded as simply contiguous. */
4637 if (ar->stride[i] && (strict || ar->stride[i]->expr_type != EXPR_CONSTANT
4638 || ar->stride[i]->ts.type != BT_INTEGER
4639 || mpz_cmp_si (ar->stride[i]->value.integer, 1) != 0))
4640 return false;
4641
4642 if (ar->start[i]
4643 && (strict || ar->start[i]->expr_type != EXPR_CONSTANT
4644 || !ar->as->lower[i]
4645 || ar->as->lower[i]->expr_type != EXPR_CONSTANT
4646 || mpz_cmp (ar->start[i]->value.integer,
4647 ar->as->lower[i]->value.integer) != 0))
4648 colon = false;
4649
4650 if (ar->end[i]
4651 && (strict || ar->end[i]->expr_type != EXPR_CONSTANT
4652 || !ar->as->upper[i]
4653 || ar->as->upper[i]->expr_type != EXPR_CONSTANT
4654 || mpz_cmp (ar->end[i]->value.integer,
4655 ar->as->upper[i]->value.integer) != 0))
4656 colon = false;
4657 }
4658
4659 return true;
4660 }
4661
4662
4663 /* Build call to an intrinsic procedure. The number of arguments has to be
4664 passed (rather than ending the list with a NULL value) because we may
4665 want to add arguments but with a NULL-expression. */
4666
4667 gfc_expr*
4668 gfc_build_intrinsic_call (gfc_namespace *ns, gfc_isym_id id, const char* name,
4669 locus where, unsigned numarg, ...)
4670 {
4671 gfc_expr* result;
4672 gfc_actual_arglist* atail;
4673 gfc_intrinsic_sym* isym;
4674 va_list ap;
4675 unsigned i;
4676 const char *mangled_name = gfc_get_string (GFC_PREFIX ("%s"), name);
4677
4678 isym = gfc_intrinsic_function_by_id (id);
4679 gcc_assert (isym);
4680
4681 result = gfc_get_expr ();
4682 result->expr_type = EXPR_FUNCTION;
4683 result->ts = isym->ts;
4684 result->where = where;
4685 result->value.function.name = mangled_name;
4686 result->value.function.isym = isym;
4687
4688 gfc_get_sym_tree (mangled_name, ns, &result->symtree, false);
4689 gfc_commit_symbol (result->symtree->n.sym);
4690 gcc_assert (result->symtree
4691 && (result->symtree->n.sym->attr.flavor == FL_PROCEDURE
4692 || result->symtree->n.sym->attr.flavor == FL_UNKNOWN));
4693 result->symtree->n.sym->intmod_sym_id = id;
4694 result->symtree->n.sym->attr.flavor = FL_PROCEDURE;
4695 result->symtree->n.sym->attr.intrinsic = 1;
4696
4697 va_start (ap, numarg);
4698 atail = NULL;
4699 for (i = 0; i < numarg; ++i)
4700 {
4701 if (atail)
4702 {
4703 atail->next = gfc_get_actual_arglist ();
4704 atail = atail->next;
4705 }
4706 else
4707 atail = result->value.function.actual = gfc_get_actual_arglist ();
4708
4709 atail->expr = va_arg (ap, gfc_expr*);
4710 }
4711 va_end (ap);
4712
4713 return result;
4714 }
4715
4716
4717 /* Check if an expression may appear in a variable definition context
4718 (F2008, 16.6.7) or pointer association context (F2008, 16.6.8).
4719 This is called from the various places when resolving
4720 the pieces that make up such a context.
4721 If own_scope is true (applies to, e.g., ac-implied-do/data-implied-do
4722 variables), some checks are not performed.
4723
4724 Optionally, a possible error message can be suppressed if context is NULL
4725 and just the return status (SUCCESS / FAILURE) be requested. */
4726
4727 gfc_try
4728 gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj,
4729 bool own_scope, const char* context)
4730 {
4731 gfc_symbol* sym = NULL;
4732 bool is_pointer;
4733 bool check_intentin;
4734 bool ptr_component;
4735 bool unlimited;
4736 symbol_attribute attr;
4737 gfc_ref* ref;
4738
4739 if (e->expr_type == EXPR_VARIABLE)
4740 {
4741 gcc_assert (e->symtree);
4742 sym = e->symtree->n.sym;
4743 }
4744 else if (e->expr_type == EXPR_FUNCTION)
4745 {
4746 gcc_assert (e->symtree);
4747 sym = e->value.function.esym ? e->value.function.esym : e->symtree->n.sym;
4748 }
4749
4750 unlimited = e->ts.type == BT_CLASS && UNLIMITED_POLY (sym);
4751
4752 attr = gfc_expr_attr (e);
4753 if (!pointer && e->expr_type == EXPR_FUNCTION && attr.pointer)
4754 {
4755 if (!(gfc_option.allow_std & GFC_STD_F2008))
4756 {
4757 if (context)
4758 gfc_error ("Fortran 2008: Pointer functions in variable definition"
4759 " context (%s) at %L", context, &e->where);
4760 return FAILURE;
4761 }
4762 }
4763 else if (e->expr_type != EXPR_VARIABLE)
4764 {
4765 if (context)
4766 gfc_error ("Non-variable expression in variable definition context (%s)"
4767 " at %L", context, &e->where);
4768 return FAILURE;
4769 }
4770
4771 if (!pointer && sym->attr.flavor == FL_PARAMETER)
4772 {
4773 if (context)
4774 gfc_error ("Named constant '%s' in variable definition context (%s)"
4775 " at %L", sym->name, context, &e->where);
4776 return FAILURE;
4777 }
4778 if (!pointer && sym->attr.flavor != FL_VARIABLE
4779 && !(sym->attr.flavor == FL_PROCEDURE && sym == sym->result)
4780 && !(sym->attr.flavor == FL_PROCEDURE && sym->attr.proc_pointer))
4781 {
4782 if (context)
4783 gfc_error ("'%s' in variable definition context (%s) at %L is not"
4784 " a variable", sym->name, context, &e->where);
4785 return FAILURE;
4786 }
4787
4788 /* Find out whether the expr is a pointer; this also means following
4789 component references to the last one. */
4790 is_pointer = (attr.pointer || attr.proc_pointer);
4791 if (pointer && !is_pointer && !unlimited)
4792 {
4793 if (context)
4794 gfc_error ("Non-POINTER in pointer association context (%s)"
4795 " at %L", context, &e->where);
4796 return FAILURE;
4797 }
4798
4799 /* F2008, C1303. */
4800 if (!alloc_obj
4801 && (attr.lock_comp
4802 || (e->ts.type == BT_DERIVED
4803 && e->ts.u.derived->from_intmod == INTMOD_ISO_FORTRAN_ENV
4804 && e->ts.u.derived->intmod_sym_id == ISOFORTRAN_LOCK_TYPE)))
4805 {
4806 if (context)
4807 gfc_error ("LOCK_TYPE in variable definition context (%s) at %L",
4808 context, &e->where);
4809 return FAILURE;
4810 }
4811
4812 /* INTENT(IN) dummy argument. Check this, unless the object itself is the
4813 component of sub-component of a pointer; we need to distinguish
4814 assignment to a pointer component from pointer-assignment to a pointer
4815 component. Note that (normal) assignment to procedure pointers is not
4816 possible. */
4817 check_intentin = !own_scope;
4818 ptr_component = (sym->ts.type == BT_CLASS && CLASS_DATA (sym))
4819 ? CLASS_DATA (sym)->attr.class_pointer : sym->attr.pointer;
4820 for (ref = e->ref; ref && check_intentin; ref = ref->next)
4821 {
4822 if (ptr_component && ref->type == REF_COMPONENT)
4823 check_intentin = false;
4824 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
4825 {
4826 ptr_component = true;
4827 if (!pointer)
4828 check_intentin = false;
4829 }
4830 }
4831 if (check_intentin && sym->attr.intent == INTENT_IN)
4832 {
4833 if (pointer && is_pointer)
4834 {
4835 if (context)
4836 gfc_error ("Dummy argument '%s' with INTENT(IN) in pointer"
4837 " association context (%s) at %L",
4838 sym->name, context, &e->where);
4839 return FAILURE;
4840 }
4841 if (!pointer && !is_pointer && !sym->attr.pointer)
4842 {
4843 if (context)
4844 gfc_error ("Dummy argument '%s' with INTENT(IN) in variable"
4845 " definition context (%s) at %L",
4846 sym->name, context, &e->where);
4847 return FAILURE;
4848 }
4849 }
4850
4851 /* PROTECTED and use-associated. */
4852 if (sym->attr.is_protected && sym->attr.use_assoc && check_intentin)
4853 {
4854 if (pointer && is_pointer)
4855 {
4856 if (context)
4857 gfc_error ("Variable '%s' is PROTECTED and can not appear in a"
4858 " pointer association context (%s) at %L",
4859 sym->name, context, &e->where);
4860 return FAILURE;
4861 }
4862 if (!pointer && !is_pointer)
4863 {
4864 if (context)
4865 gfc_error ("Variable '%s' is PROTECTED and can not appear in a"
4866 " variable definition context (%s) at %L",
4867 sym->name, context, &e->where);
4868 return FAILURE;
4869 }
4870 }
4871
4872 /* Variable not assignable from a PURE procedure but appears in
4873 variable definition context. */
4874 if (!pointer && !own_scope && gfc_pure (NULL) && gfc_impure_variable (sym))
4875 {
4876 if (context)
4877 gfc_error ("Variable '%s' can not appear in a variable definition"
4878 " context (%s) at %L in PURE procedure",
4879 sym->name, context, &e->where);
4880 return FAILURE;
4881 }
4882
4883 if (!pointer && context && gfc_implicit_pure (NULL)
4884 && gfc_impure_variable (sym))
4885 {
4886 gfc_namespace *ns;
4887 gfc_symbol *sym;
4888
4889 for (ns = gfc_current_ns; ns; ns = ns->parent)
4890 {
4891 sym = ns->proc_name;
4892 if (sym == NULL)
4893 break;
4894 if (sym->attr.flavor == FL_PROCEDURE)
4895 {
4896 sym->attr.implicit_pure = 0;
4897 break;
4898 }
4899 }
4900 }
4901 /* Check variable definition context for associate-names. */
4902 if (!pointer && sym->assoc)
4903 {
4904 const char* name;
4905 gfc_association_list* assoc;
4906
4907 gcc_assert (sym->assoc->target);
4908
4909 /* If this is a SELECT TYPE temporary (the association is used internally
4910 for SELECT TYPE), silently go over to the target. */
4911 if (sym->attr.select_type_temporary)
4912 {
4913 gfc_expr* t = sym->assoc->target;
4914
4915 gcc_assert (t->expr_type == EXPR_VARIABLE);
4916 name = t->symtree->name;
4917
4918 if (t->symtree->n.sym->assoc)
4919 assoc = t->symtree->n.sym->assoc;
4920 else
4921 assoc = sym->assoc;
4922 }
4923 else
4924 {
4925 name = sym->name;
4926 assoc = sym->assoc;
4927 }
4928 gcc_assert (name && assoc);
4929
4930 /* Is association to a valid variable? */
4931 if (!assoc->variable)
4932 {
4933 if (context)
4934 {
4935 if (assoc->target->expr_type == EXPR_VARIABLE)
4936 gfc_error ("'%s' at %L associated to vector-indexed target can"
4937 " not be used in a variable definition context (%s)",
4938 name, &e->where, context);
4939 else
4940 gfc_error ("'%s' at %L associated to expression can"
4941 " not be used in a variable definition context (%s)",
4942 name, &e->where, context);
4943 }
4944 return FAILURE;
4945 }
4946
4947 /* Target must be allowed to appear in a variable definition context. */
4948 if (gfc_check_vardef_context (assoc->target, pointer, false, false, NULL)
4949 == FAILURE)
4950 {
4951 if (context)
4952 gfc_error ("Associate-name '%s' can not appear in a variable"
4953 " definition context (%s) at %L because its target"
4954 " at %L can not, either",
4955 name, context, &e->where,
4956 &assoc->target->where);
4957 return FAILURE;
4958 }
4959 }
4960
4961 return SUCCESS;
4962 }