re PR fortran/32881 (PURE attribute escapes from contained procedure)
[gcc.git] / gcc / fortran / expr.c
1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3 Free Software Foundation, Inc.
4 Contributed by Andy Vaught
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 #include "config.h"
23 #include "system.h"
24 #include "gfortran.h"
25 #include "arith.h"
26 #include "match.h"
27
28 /* Get a new expr node. */
29
30 gfc_expr *
31 gfc_get_expr (void)
32 {
33 gfc_expr *e;
34
35 e = gfc_getmem (sizeof (gfc_expr));
36 gfc_clear_ts (&e->ts);
37 e->shape = NULL;
38 e->ref = NULL;
39 e->symtree = NULL;
40 e->con_by_offset = NULL;
41 return e;
42 }
43
44
45 /* Free an argument list and everything below it. */
46
47 void
48 gfc_free_actual_arglist (gfc_actual_arglist *a1)
49 {
50 gfc_actual_arglist *a2;
51
52 while (a1)
53 {
54 a2 = a1->next;
55 gfc_free_expr (a1->expr);
56 gfc_free (a1);
57 a1 = a2;
58 }
59 }
60
61
62 /* Copy an arglist structure and all of the arguments. */
63
64 gfc_actual_arglist *
65 gfc_copy_actual_arglist (gfc_actual_arglist *p)
66 {
67 gfc_actual_arglist *head, *tail, *new;
68
69 head = tail = NULL;
70
71 for (; p; p = p->next)
72 {
73 new = gfc_get_actual_arglist ();
74 *new = *p;
75
76 new->expr = gfc_copy_expr (p->expr);
77 new->next = NULL;
78
79 if (head == NULL)
80 head = new;
81 else
82 tail->next = new;
83
84 tail = new;
85 }
86
87 return head;
88 }
89
90
91 /* Free a list of reference structures. */
92
93 void
94 gfc_free_ref_list (gfc_ref *p)
95 {
96 gfc_ref *q;
97 int i;
98
99 for (; p; p = q)
100 {
101 q = p->next;
102
103 switch (p->type)
104 {
105 case REF_ARRAY:
106 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
107 {
108 gfc_free_expr (p->u.ar.start[i]);
109 gfc_free_expr (p->u.ar.end[i]);
110 gfc_free_expr (p->u.ar.stride[i]);
111 }
112
113 break;
114
115 case REF_SUBSTRING:
116 gfc_free_expr (p->u.ss.start);
117 gfc_free_expr (p->u.ss.end);
118 break;
119
120 case REF_COMPONENT:
121 break;
122 }
123
124 gfc_free (p);
125 }
126 }
127
128
129 /* Workhorse function for gfc_free_expr() that frees everything
130 beneath an expression node, but not the node itself. This is
131 useful when we want to simplify a node and replace it with
132 something else or the expression node belongs to another structure. */
133
134 static void
135 free_expr0 (gfc_expr *e)
136 {
137 int n;
138
139 switch (e->expr_type)
140 {
141 case EXPR_CONSTANT:
142 /* Free any parts of the value that need freeing. */
143 switch (e->ts.type)
144 {
145 case BT_INTEGER:
146 mpz_clear (e->value.integer);
147 break;
148
149 case BT_REAL:
150 mpfr_clear (e->value.real);
151 break;
152
153 case BT_CHARACTER:
154 gfc_free (e->value.character.string);
155 break;
156
157 case BT_COMPLEX:
158 mpfr_clear (e->value.complex.r);
159 mpfr_clear (e->value.complex.i);
160 break;
161
162 default:
163 break;
164 }
165
166 /* Free the representation, except in character constants where it
167 is the same as value.character.string and thus already freed. */
168 if (e->representation.string && e->ts.type != BT_CHARACTER)
169 gfc_free (e->representation.string);
170
171 break;
172
173 case EXPR_OP:
174 if (e->value.op.op1 != NULL)
175 gfc_free_expr (e->value.op.op1);
176 if (e->value.op.op2 != NULL)
177 gfc_free_expr (e->value.op.op2);
178 break;
179
180 case EXPR_FUNCTION:
181 gfc_free_actual_arglist (e->value.function.actual);
182 break;
183
184 case EXPR_VARIABLE:
185 break;
186
187 case EXPR_ARRAY:
188 case EXPR_STRUCTURE:
189 gfc_free_constructor (e->value.constructor);
190 break;
191
192 case EXPR_SUBSTRING:
193 gfc_free (e->value.character.string);
194 break;
195
196 case EXPR_NULL:
197 break;
198
199 default:
200 gfc_internal_error ("free_expr0(): Bad expr type");
201 }
202
203 /* Free a shape array. */
204 if (e->shape != NULL)
205 {
206 for (n = 0; n < e->rank; n++)
207 mpz_clear (e->shape[n]);
208
209 gfc_free (e->shape);
210 }
211
212 gfc_free_ref_list (e->ref);
213
214 memset (e, '\0', sizeof (gfc_expr));
215 }
216
217
218 /* Free an expression node and everything beneath it. */
219
220 void
221 gfc_free_expr (gfc_expr *e)
222 {
223 if (e == NULL)
224 return;
225 if (e->con_by_offset)
226 splay_tree_delete (e->con_by_offset);
227 free_expr0 (e);
228 gfc_free (e);
229 }
230
231
232 /* Graft the *src expression onto the *dest subexpression. */
233
234 void
235 gfc_replace_expr (gfc_expr *dest, gfc_expr *src)
236 {
237 free_expr0 (dest);
238 *dest = *src;
239 gfc_free (src);
240 }
241
242
243 /* Try to extract an integer constant from the passed expression node.
244 Returns an error message or NULL if the result is set. It is
245 tempting to generate an error and return SUCCESS or FAILURE, but
246 failure is OK for some callers. */
247
248 const char *
249 gfc_extract_int (gfc_expr *expr, int *result)
250 {
251 if (expr->expr_type != EXPR_CONSTANT)
252 return _("Constant expression required at %C");
253
254 if (expr->ts.type != BT_INTEGER)
255 return _("Integer expression required at %C");
256
257 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
258 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
259 {
260 return _("Integer value too large in expression at %C");
261 }
262
263 *result = (int) mpz_get_si (expr->value.integer);
264
265 return NULL;
266 }
267
268
269 /* Recursively copy a list of reference structures. */
270
271 static gfc_ref *
272 copy_ref (gfc_ref *src)
273 {
274 gfc_array_ref *ar;
275 gfc_ref *dest;
276
277 if (src == NULL)
278 return NULL;
279
280 dest = gfc_get_ref ();
281 dest->type = src->type;
282
283 switch (src->type)
284 {
285 case REF_ARRAY:
286 ar = gfc_copy_array_ref (&src->u.ar);
287 dest->u.ar = *ar;
288 gfc_free (ar);
289 break;
290
291 case REF_COMPONENT:
292 dest->u.c = src->u.c;
293 break;
294
295 case REF_SUBSTRING:
296 dest->u.ss = src->u.ss;
297 dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
298 dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
299 break;
300 }
301
302 dest->next = copy_ref (src->next);
303
304 return dest;
305 }
306
307
308 /* Detect whether an expression has any vector index array references. */
309
310 int
311 gfc_has_vector_index (gfc_expr *e)
312 {
313 gfc_ref *ref;
314 int i;
315 for (ref = e->ref; ref; ref = ref->next)
316 if (ref->type == REF_ARRAY)
317 for (i = 0; i < ref->u.ar.dimen; i++)
318 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
319 return 1;
320 return 0;
321 }
322
323
324 /* Copy a shape array. */
325
326 mpz_t *
327 gfc_copy_shape (mpz_t *shape, int rank)
328 {
329 mpz_t *new_shape;
330 int n;
331
332 if (shape == NULL)
333 return NULL;
334
335 new_shape = gfc_get_shape (rank);
336
337 for (n = 0; n < rank; n++)
338 mpz_init_set (new_shape[n], shape[n]);
339
340 return new_shape;
341 }
342
343
344 /* Copy a shape array excluding dimension N, where N is an integer
345 constant expression. Dimensions are numbered in fortran style --
346 starting with ONE.
347
348 So, if the original shape array contains R elements
349 { s1 ... sN-1 sN sN+1 ... sR-1 sR}
350 the result contains R-1 elements:
351 { s1 ... sN-1 sN+1 ... sR-1}
352
353 If anything goes wrong -- N is not a constant, its value is out
354 of range -- or anything else, just returns NULL. */
355
356 mpz_t *
357 gfc_copy_shape_excluding (mpz_t *shape, int rank, gfc_expr *dim)
358 {
359 mpz_t *new_shape, *s;
360 int i, n;
361
362 if (shape == NULL
363 || rank <= 1
364 || dim == NULL
365 || dim->expr_type != EXPR_CONSTANT
366 || dim->ts.type != BT_INTEGER)
367 return NULL;
368
369 n = mpz_get_si (dim->value.integer);
370 n--; /* Convert to zero based index. */
371 if (n < 0 || n >= rank)
372 return NULL;
373
374 s = new_shape = gfc_get_shape (rank - 1);
375
376 for (i = 0; i < rank; i++)
377 {
378 if (i == n)
379 continue;
380 mpz_init_set (*s, shape[i]);
381 s++;
382 }
383
384 return new_shape;
385 }
386
387
388 /* Given an expression pointer, return a copy of the expression. This
389 subroutine is recursive. */
390
391 gfc_expr *
392 gfc_copy_expr (gfc_expr *p)
393 {
394 gfc_expr *q;
395 char *s;
396
397 if (p == NULL)
398 return NULL;
399
400 q = gfc_get_expr ();
401 *q = *p;
402
403 switch (q->expr_type)
404 {
405 case EXPR_SUBSTRING:
406 s = gfc_getmem (p->value.character.length + 1);
407 q->value.character.string = s;
408
409 memcpy (s, p->value.character.string, p->value.character.length + 1);
410 break;
411
412 case EXPR_CONSTANT:
413 /* Copy target representation, if it exists. */
414 if (p->representation.string)
415 {
416 s = gfc_getmem (p->representation.length + 1);
417 q->representation.string = s;
418
419 memcpy (s, p->representation.string, p->representation.length + 1);
420 }
421
422 /* Copy the values of any pointer components of p->value. */
423 switch (q->ts.type)
424 {
425 case BT_INTEGER:
426 mpz_init_set (q->value.integer, p->value.integer);
427 break;
428
429 case BT_REAL:
430 gfc_set_model_kind (q->ts.kind);
431 mpfr_init (q->value.real);
432 mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
433 break;
434
435 case BT_COMPLEX:
436 gfc_set_model_kind (q->ts.kind);
437 mpfr_init (q->value.complex.r);
438 mpfr_init (q->value.complex.i);
439 mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
440 mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
441 break;
442
443 case BT_CHARACTER:
444 if (p->representation.string)
445 q->value.character.string = q->representation.string;
446 else
447 {
448 s = gfc_getmem (p->value.character.length + 1);
449 q->value.character.string = s;
450
451 /* This is the case for the C_NULL_CHAR named constant. */
452 if (p->value.character.length == 0
453 && (p->ts.is_c_interop || p->ts.is_iso_c))
454 {
455 *s = '\0';
456 /* Need to set the length to 1 to make sure the NUL
457 terminator is copied. */
458 q->value.character.length = 1;
459 }
460 else
461 memcpy (s, p->value.character.string,
462 p->value.character.length + 1);
463 }
464 break;
465
466 case BT_HOLLERITH:
467 case BT_LOGICAL:
468 case BT_DERIVED:
469 break; /* Already done. */
470
471 case BT_PROCEDURE:
472 case BT_VOID:
473 /* Should never be reached. */
474 case BT_UNKNOWN:
475 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
476 /* Not reached. */
477 }
478
479 break;
480
481 case EXPR_OP:
482 switch (q->value.op.operator)
483 {
484 case INTRINSIC_NOT:
485 case INTRINSIC_PARENTHESES:
486 case INTRINSIC_UPLUS:
487 case INTRINSIC_UMINUS:
488 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
489 break;
490
491 default: /* Binary operators. */
492 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
493 q->value.op.op2 = gfc_copy_expr (p->value.op.op2);
494 break;
495 }
496
497 break;
498
499 case EXPR_FUNCTION:
500 q->value.function.actual =
501 gfc_copy_actual_arglist (p->value.function.actual);
502 break;
503
504 case EXPR_STRUCTURE:
505 case EXPR_ARRAY:
506 q->value.constructor = gfc_copy_constructor (p->value.constructor);
507 break;
508
509 case EXPR_VARIABLE:
510 case EXPR_NULL:
511 break;
512 }
513
514 q->shape = gfc_copy_shape (p->shape, p->rank);
515
516 q->ref = copy_ref (p->ref);
517
518 return q;
519 }
520
521
522 /* Return the maximum kind of two expressions. In general, higher
523 kind numbers mean more precision for numeric types. */
524
525 int
526 gfc_kind_max (gfc_expr *e1, gfc_expr *e2)
527 {
528 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
529 }
530
531
532 /* Returns nonzero if the type is numeric, zero otherwise. */
533
534 static int
535 numeric_type (bt type)
536 {
537 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
538 }
539
540
541 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
542
543 int
544 gfc_numeric_ts (gfc_typespec *ts)
545 {
546 return numeric_type (ts->type);
547 }
548
549
550 /* Returns an expression node that is an integer constant. */
551
552 gfc_expr *
553 gfc_int_expr (int i)
554 {
555 gfc_expr *p;
556
557 p = gfc_get_expr ();
558
559 p->expr_type = EXPR_CONSTANT;
560 p->ts.type = BT_INTEGER;
561 p->ts.kind = gfc_default_integer_kind;
562
563 p->where = gfc_current_locus;
564 mpz_init_set_si (p->value.integer, i);
565
566 return p;
567 }
568
569
570 /* Returns an expression node that is a logical constant. */
571
572 gfc_expr *
573 gfc_logical_expr (int i, locus *where)
574 {
575 gfc_expr *p;
576
577 p = gfc_get_expr ();
578
579 p->expr_type = EXPR_CONSTANT;
580 p->ts.type = BT_LOGICAL;
581 p->ts.kind = gfc_default_logical_kind;
582
583 if (where == NULL)
584 where = &gfc_current_locus;
585 p->where = *where;
586 p->value.logical = i;
587
588 return p;
589 }
590
591
592 /* Return an expression node with an optional argument list attached.
593 A variable number of gfc_expr pointers are strung together in an
594 argument list with a NULL pointer terminating the list. */
595
596 gfc_expr *
597 gfc_build_conversion (gfc_expr *e)
598 {
599 gfc_expr *p;
600
601 p = gfc_get_expr ();
602 p->expr_type = EXPR_FUNCTION;
603 p->symtree = NULL;
604 p->value.function.actual = NULL;
605
606 p->value.function.actual = gfc_get_actual_arglist ();
607 p->value.function.actual->expr = e;
608
609 return p;
610 }
611
612
613 /* Given an expression node with some sort of numeric binary
614 expression, insert type conversions required to make the operands
615 have the same type.
616
617 The exception is that the operands of an exponential don't have to
618 have the same type. If possible, the base is promoted to the type
619 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
620 1.0**2 stays as it is. */
621
622 void
623 gfc_type_convert_binary (gfc_expr *e)
624 {
625 gfc_expr *op1, *op2;
626
627 op1 = e->value.op.op1;
628 op2 = e->value.op.op2;
629
630 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
631 {
632 gfc_clear_ts (&e->ts);
633 return;
634 }
635
636 /* Kind conversions of same type. */
637 if (op1->ts.type == op2->ts.type)
638 {
639 if (op1->ts.kind == op2->ts.kind)
640 {
641 /* No type conversions. */
642 e->ts = op1->ts;
643 goto done;
644 }
645
646 if (op1->ts.kind > op2->ts.kind)
647 gfc_convert_type (op2, &op1->ts, 2);
648 else
649 gfc_convert_type (op1, &op2->ts, 2);
650
651 e->ts = op1->ts;
652 goto done;
653 }
654
655 /* Integer combined with real or complex. */
656 if (op2->ts.type == BT_INTEGER)
657 {
658 e->ts = op1->ts;
659
660 /* Special case for ** operator. */
661 if (e->value.op.operator == INTRINSIC_POWER)
662 goto done;
663
664 gfc_convert_type (e->value.op.op2, &e->ts, 2);
665 goto done;
666 }
667
668 if (op1->ts.type == BT_INTEGER)
669 {
670 e->ts = op2->ts;
671 gfc_convert_type (e->value.op.op1, &e->ts, 2);
672 goto done;
673 }
674
675 /* Real combined with complex. */
676 e->ts.type = BT_COMPLEX;
677 if (op1->ts.kind > op2->ts.kind)
678 e->ts.kind = op1->ts.kind;
679 else
680 e->ts.kind = op2->ts.kind;
681 if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
682 gfc_convert_type (e->value.op.op1, &e->ts, 2);
683 if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
684 gfc_convert_type (e->value.op.op2, &e->ts, 2);
685
686 done:
687 return;
688 }
689
690
691 static match
692 check_specification_function (gfc_expr *e)
693 {
694 gfc_symbol *sym;
695
696 if (!e->symtree)
697 return MATCH_NO;
698
699 sym = e->symtree->n.sym;
700
701 /* F95, 7.1.6.2; F2003, 7.1.7 */
702 if (sym
703 && sym->attr.function
704 && sym->attr.pure
705 && !sym->attr.intrinsic
706 && !sym->attr.recursive
707 && sym->attr.proc != PROC_INTERNAL
708 && sym->attr.proc != PROC_ST_FUNCTION
709 && sym->attr.proc != PROC_UNKNOWN
710 && sym->formal == NULL)
711 return MATCH_YES;
712
713 return MATCH_NO;
714 }
715
716 /* Function to determine if an expression is constant or not. This
717 function expects that the expression has already been simplified. */
718
719 int
720 gfc_is_constant_expr (gfc_expr *e)
721 {
722 gfc_constructor *c;
723 gfc_actual_arglist *arg;
724 int rv;
725
726 if (e == NULL)
727 return 1;
728
729 switch (e->expr_type)
730 {
731 case EXPR_OP:
732 rv = (gfc_is_constant_expr (e->value.op.op1)
733 && (e->value.op.op2 == NULL
734 || gfc_is_constant_expr (e->value.op.op2)));
735 break;
736
737 case EXPR_VARIABLE:
738 rv = 0;
739 break;
740
741 case EXPR_FUNCTION:
742 /* Specification functions are constant. */
743 if (check_specification_function (e) == MATCH_YES)
744 {
745 rv = 1;
746 break;
747 }
748
749 /* Call to intrinsic with at least one argument. */
750 rv = 0;
751 if (e->value.function.isym && e->value.function.actual)
752 {
753 for (arg = e->value.function.actual; arg; arg = arg->next)
754 {
755 if (!gfc_is_constant_expr (arg->expr))
756 break;
757 }
758 if (arg == NULL)
759 rv = 1;
760 }
761 break;
762
763 case EXPR_CONSTANT:
764 case EXPR_NULL:
765 rv = 1;
766 break;
767
768 case EXPR_SUBSTRING:
769 rv = e->ref == NULL || (gfc_is_constant_expr (e->ref->u.ss.start)
770 && gfc_is_constant_expr (e->ref->u.ss.end));
771 break;
772
773 case EXPR_STRUCTURE:
774 rv = 0;
775 for (c = e->value.constructor; c; c = c->next)
776 if (!gfc_is_constant_expr (c->expr))
777 break;
778
779 if (c == NULL)
780 rv = 1;
781 break;
782
783 case EXPR_ARRAY:
784 rv = gfc_constant_ac (e);
785 break;
786
787 default:
788 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
789 }
790
791 return rv;
792 }
793
794
795 /* Try to collapse intrinsic expressions. */
796
797 static try
798 simplify_intrinsic_op (gfc_expr *p, int type)
799 {
800 gfc_intrinsic_op op;
801 gfc_expr *op1, *op2, *result;
802
803 if (p->value.op.operator == INTRINSIC_USER)
804 return SUCCESS;
805
806 op1 = p->value.op.op1;
807 op2 = p->value.op.op2;
808 op = p->value.op.operator;
809
810 if (gfc_simplify_expr (op1, type) == FAILURE)
811 return FAILURE;
812 if (gfc_simplify_expr (op2, type) == FAILURE)
813 return FAILURE;
814
815 if (!gfc_is_constant_expr (op1)
816 || (op2 != NULL && !gfc_is_constant_expr (op2)))
817 return SUCCESS;
818
819 /* Rip p apart. */
820 p->value.op.op1 = NULL;
821 p->value.op.op2 = NULL;
822
823 switch (op)
824 {
825 case INTRINSIC_PARENTHESES:
826 result = gfc_parentheses (op1);
827 break;
828
829 case INTRINSIC_UPLUS:
830 result = gfc_uplus (op1);
831 break;
832
833 case INTRINSIC_UMINUS:
834 result = gfc_uminus (op1);
835 break;
836
837 case INTRINSIC_PLUS:
838 result = gfc_add (op1, op2);
839 break;
840
841 case INTRINSIC_MINUS:
842 result = gfc_subtract (op1, op2);
843 break;
844
845 case INTRINSIC_TIMES:
846 result = gfc_multiply (op1, op2);
847 break;
848
849 case INTRINSIC_DIVIDE:
850 result = gfc_divide (op1, op2);
851 break;
852
853 case INTRINSIC_POWER:
854 result = gfc_power (op1, op2);
855 break;
856
857 case INTRINSIC_CONCAT:
858 result = gfc_concat (op1, op2);
859 break;
860
861 case INTRINSIC_EQ:
862 case INTRINSIC_EQ_OS:
863 result = gfc_eq (op1, op2, op);
864 break;
865
866 case INTRINSIC_NE:
867 case INTRINSIC_NE_OS:
868 result = gfc_ne (op1, op2, op);
869 break;
870
871 case INTRINSIC_GT:
872 case INTRINSIC_GT_OS:
873 result = gfc_gt (op1, op2, op);
874 break;
875
876 case INTRINSIC_GE:
877 case INTRINSIC_GE_OS:
878 result = gfc_ge (op1, op2, op);
879 break;
880
881 case INTRINSIC_LT:
882 case INTRINSIC_LT_OS:
883 result = gfc_lt (op1, op2, op);
884 break;
885
886 case INTRINSIC_LE:
887 case INTRINSIC_LE_OS:
888 result = gfc_le (op1, op2, op);
889 break;
890
891 case INTRINSIC_NOT:
892 result = gfc_not (op1);
893 break;
894
895 case INTRINSIC_AND:
896 result = gfc_and (op1, op2);
897 break;
898
899 case INTRINSIC_OR:
900 result = gfc_or (op1, op2);
901 break;
902
903 case INTRINSIC_EQV:
904 result = gfc_eqv (op1, op2);
905 break;
906
907 case INTRINSIC_NEQV:
908 result = gfc_neqv (op1, op2);
909 break;
910
911 default:
912 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
913 }
914
915 if (result == NULL)
916 {
917 gfc_free_expr (op1);
918 gfc_free_expr (op2);
919 return FAILURE;
920 }
921
922 result->rank = p->rank;
923 result->where = p->where;
924 gfc_replace_expr (p, result);
925
926 return SUCCESS;
927 }
928
929
930 /* Subroutine to simplify constructor expressions. Mutually recursive
931 with gfc_simplify_expr(). */
932
933 static try
934 simplify_constructor (gfc_constructor *c, int type)
935 {
936 for (; c; c = c->next)
937 {
938 if (c->iterator
939 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
940 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
941 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
942 return FAILURE;
943
944 if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
945 return FAILURE;
946 }
947
948 return SUCCESS;
949 }
950
951
952 /* Pull a single array element out of an array constructor. */
953
954 static try
955 find_array_element (gfc_constructor *cons, gfc_array_ref *ar,
956 gfc_constructor **rval)
957 {
958 unsigned long nelemen;
959 int i;
960 mpz_t delta;
961 mpz_t offset;
962 mpz_t span;
963 mpz_t tmp;
964 gfc_expr *e;
965 try t;
966
967 t = SUCCESS;
968 e = NULL;
969
970 mpz_init_set_ui (offset, 0);
971 mpz_init (delta);
972 mpz_init (tmp);
973 mpz_init_set_ui (span, 1);
974 for (i = 0; i < ar->dimen; i++)
975 {
976 e = gfc_copy_expr (ar->start[i]);
977 if (e->expr_type != EXPR_CONSTANT)
978 {
979 cons = NULL;
980 goto depart;
981 }
982
983 /* Check the bounds. */
984 if (ar->as->upper[i]
985 && (mpz_cmp (e->value.integer, ar->as->upper[i]->value.integer) > 0
986 || mpz_cmp (e->value.integer,
987 ar->as->lower[i]->value.integer) < 0))
988 {
989 gfc_error ("index in dimension %d is out of bounds "
990 "at %L", i + 1, &ar->c_where[i]);
991 cons = NULL;
992 t = FAILURE;
993 goto depart;
994 }
995
996 mpz_sub (delta, e->value.integer, ar->as->lower[i]->value.integer);
997 mpz_mul (delta, delta, span);
998 mpz_add (offset, offset, delta);
999
1000 mpz_set_ui (tmp, 1);
1001 mpz_add (tmp, tmp, ar->as->upper[i]->value.integer);
1002 mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer);
1003 mpz_mul (span, span, tmp);
1004 }
1005
1006 if (cons)
1007 {
1008 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
1009 {
1010 if (cons->iterator)
1011 {
1012 cons = NULL;
1013 goto depart;
1014 }
1015 cons = cons->next;
1016 }
1017 }
1018
1019 depart:
1020 mpz_clear (delta);
1021 mpz_clear (offset);
1022 mpz_clear (span);
1023 mpz_clear (tmp);
1024 if (e)
1025 gfc_free_expr (e);
1026 *rval = cons;
1027 return t;
1028 }
1029
1030
1031 /* Find a component of a structure constructor. */
1032
1033 static gfc_constructor *
1034 find_component_ref (gfc_constructor *cons, gfc_ref *ref)
1035 {
1036 gfc_component *comp;
1037 gfc_component *pick;
1038
1039 comp = ref->u.c.sym->components;
1040 pick = ref->u.c.component;
1041 while (comp != pick)
1042 {
1043 comp = comp->next;
1044 cons = cons->next;
1045 }
1046
1047 return cons;
1048 }
1049
1050
1051 /* Replace an expression with the contents of a constructor, removing
1052 the subobject reference in the process. */
1053
1054 static void
1055 remove_subobject_ref (gfc_expr *p, gfc_constructor *cons)
1056 {
1057 gfc_expr *e;
1058
1059 e = cons->expr;
1060 cons->expr = NULL;
1061 e->ref = p->ref->next;
1062 p->ref->next = NULL;
1063 gfc_replace_expr (p, e);
1064 }
1065
1066
1067 /* Pull an array section out of an array constructor. */
1068
1069 static try
1070 find_array_section (gfc_expr *expr, gfc_ref *ref)
1071 {
1072 int idx;
1073 int rank;
1074 int d;
1075 int shape_i;
1076 long unsigned one = 1;
1077 bool incr_ctr;
1078 mpz_t start[GFC_MAX_DIMENSIONS];
1079 mpz_t end[GFC_MAX_DIMENSIONS];
1080 mpz_t stride[GFC_MAX_DIMENSIONS];
1081 mpz_t delta[GFC_MAX_DIMENSIONS];
1082 mpz_t ctr[GFC_MAX_DIMENSIONS];
1083 mpz_t delta_mpz;
1084 mpz_t tmp_mpz;
1085 mpz_t nelts;
1086 mpz_t ptr;
1087 mpz_t index;
1088 gfc_constructor *cons;
1089 gfc_constructor *base;
1090 gfc_expr *begin;
1091 gfc_expr *finish;
1092 gfc_expr *step;
1093 gfc_expr *upper;
1094 gfc_expr *lower;
1095 gfc_constructor *vecsub[GFC_MAX_DIMENSIONS], *c;
1096 try t;
1097
1098 t = SUCCESS;
1099
1100 base = expr->value.constructor;
1101 expr->value.constructor = NULL;
1102
1103 rank = ref->u.ar.as->rank;
1104
1105 if (expr->shape == NULL)
1106 expr->shape = gfc_get_shape (rank);
1107
1108 mpz_init_set_ui (delta_mpz, one);
1109 mpz_init_set_ui (nelts, one);
1110 mpz_init (tmp_mpz);
1111
1112 /* Do the initialization now, so that we can cleanup without
1113 keeping track of where we were. */
1114 for (d = 0; d < rank; d++)
1115 {
1116 mpz_init (delta[d]);
1117 mpz_init (start[d]);
1118 mpz_init (end[d]);
1119 mpz_init (ctr[d]);
1120 mpz_init (stride[d]);
1121 vecsub[d] = NULL;
1122 }
1123
1124 /* Build the counters to clock through the array reference. */
1125 shape_i = 0;
1126 for (d = 0; d < rank; d++)
1127 {
1128 /* Make this stretch of code easier on the eye! */
1129 begin = ref->u.ar.start[d];
1130 finish = ref->u.ar.end[d];
1131 step = ref->u.ar.stride[d];
1132 lower = ref->u.ar.as->lower[d];
1133 upper = ref->u.ar.as->upper[d];
1134
1135 if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */
1136 {
1137 gcc_assert (begin);
1138
1139 if (begin->expr_type != EXPR_ARRAY)
1140 {
1141 t = FAILURE;
1142 goto cleanup;
1143 }
1144
1145 gcc_assert (begin->rank == 1);
1146 gcc_assert (begin->shape);
1147
1148 vecsub[d] = begin->value.constructor;
1149 mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1150 mpz_mul (nelts, nelts, begin->shape[0]);
1151 mpz_set (expr->shape[shape_i++], begin->shape[0]);
1152
1153 /* Check bounds. */
1154 for (c = vecsub[d]; c; c = c->next)
1155 {
1156 if (mpz_cmp (c->expr->value.integer, upper->value.integer) > 0
1157 || mpz_cmp (c->expr->value.integer,
1158 lower->value.integer) < 0)
1159 {
1160 gfc_error ("index in dimension %d is out of bounds "
1161 "at %L", d + 1, &ref->u.ar.c_where[d]);
1162 t = FAILURE;
1163 goto cleanup;
1164 }
1165 }
1166 }
1167 else
1168 {
1169 if ((begin && begin->expr_type != EXPR_CONSTANT)
1170 || (finish && finish->expr_type != EXPR_CONSTANT)
1171 || (step && step->expr_type != EXPR_CONSTANT))
1172 {
1173 t = FAILURE;
1174 goto cleanup;
1175 }
1176
1177 /* Obtain the stride. */
1178 if (step)
1179 mpz_set (stride[d], step->value.integer);
1180 else
1181 mpz_set_ui (stride[d], one);
1182
1183 if (mpz_cmp_ui (stride[d], 0) == 0)
1184 mpz_set_ui (stride[d], one);
1185
1186 /* Obtain the start value for the index. */
1187 if (begin)
1188 mpz_set (start[d], begin->value.integer);
1189 else
1190 mpz_set (start[d], lower->value.integer);
1191
1192 mpz_set (ctr[d], start[d]);
1193
1194 /* Obtain the end value for the index. */
1195 if (finish)
1196 mpz_set (end[d], finish->value.integer);
1197 else
1198 mpz_set (end[d], upper->value.integer);
1199
1200 /* Separate 'if' because elements sometimes arrive with
1201 non-null end. */
1202 if (ref->u.ar.dimen_type[d] == DIMEN_ELEMENT)
1203 mpz_set (end [d], begin->value.integer);
1204
1205 /* Check the bounds. */
1206 if (mpz_cmp (ctr[d], upper->value.integer) > 0
1207 || mpz_cmp (end[d], upper->value.integer) > 0
1208 || mpz_cmp (ctr[d], lower->value.integer) < 0
1209 || mpz_cmp (end[d], lower->value.integer) < 0)
1210 {
1211 gfc_error ("index in dimension %d is out of bounds "
1212 "at %L", d + 1, &ref->u.ar.c_where[d]);
1213 t = FAILURE;
1214 goto cleanup;
1215 }
1216
1217 /* Calculate the number of elements and the shape. */
1218 mpz_set (tmp_mpz, stride[d]);
1219 mpz_add (tmp_mpz, end[d], tmp_mpz);
1220 mpz_sub (tmp_mpz, tmp_mpz, ctr[d]);
1221 mpz_div (tmp_mpz, tmp_mpz, stride[d]);
1222 mpz_mul (nelts, nelts, tmp_mpz);
1223
1224 /* An element reference reduces the rank of the expression; don't
1225 add anything to the shape array. */
1226 if (ref->u.ar.dimen_type[d] != DIMEN_ELEMENT)
1227 mpz_set (expr->shape[shape_i++], tmp_mpz);
1228 }
1229
1230 /* Calculate the 'stride' (=delta) for conversion of the
1231 counter values into the index along the constructor. */
1232 mpz_set (delta[d], delta_mpz);
1233 mpz_sub (tmp_mpz, upper->value.integer, lower->value.integer);
1234 mpz_add_ui (tmp_mpz, tmp_mpz, one);
1235 mpz_mul (delta_mpz, delta_mpz, tmp_mpz);
1236 }
1237
1238 mpz_init (index);
1239 mpz_init (ptr);
1240 cons = base;
1241
1242 /* Now clock through the array reference, calculating the index in
1243 the source constructor and transferring the elements to the new
1244 constructor. */
1245 for (idx = 0; idx < (int) mpz_get_si (nelts); idx++)
1246 {
1247 if (ref->u.ar.offset)
1248 mpz_set (ptr, ref->u.ar.offset->value.integer);
1249 else
1250 mpz_init_set_ui (ptr, 0);
1251
1252 incr_ctr = true;
1253 for (d = 0; d < rank; d++)
1254 {
1255 mpz_set (tmp_mpz, ctr[d]);
1256 mpz_sub (tmp_mpz, tmp_mpz, ref->u.ar.as->lower[d]->value.integer);
1257 mpz_mul (tmp_mpz, tmp_mpz, delta[d]);
1258 mpz_add (ptr, ptr, tmp_mpz);
1259
1260 if (!incr_ctr) continue;
1261
1262 if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */
1263 {
1264 gcc_assert(vecsub[d]);
1265
1266 if (!vecsub[d]->next)
1267 vecsub[d] = ref->u.ar.start[d]->value.constructor;
1268 else
1269 {
1270 vecsub[d] = vecsub[d]->next;
1271 incr_ctr = false;
1272 }
1273 mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1274 }
1275 else
1276 {
1277 mpz_add (ctr[d], ctr[d], stride[d]);
1278
1279 if (mpz_cmp_ui (stride[d], 0) > 0
1280 ? mpz_cmp (ctr[d], end[d]) > 0
1281 : mpz_cmp (ctr[d], end[d]) < 0)
1282 mpz_set (ctr[d], start[d]);
1283 else
1284 incr_ctr = false;
1285 }
1286 }
1287
1288 /* There must be a better way of dealing with negative strides
1289 than resetting the index and the constructor pointer! */
1290 if (mpz_cmp (ptr, index) < 0)
1291 {
1292 mpz_set_ui (index, 0);
1293 cons = base;
1294 }
1295
1296 while (mpz_cmp (ptr, index) > 0)
1297 {
1298 mpz_add_ui (index, index, one);
1299 cons = cons->next;
1300 }
1301
1302 gfc_append_constructor (expr, gfc_copy_expr (cons->expr));
1303 }
1304
1305 mpz_clear (ptr);
1306 mpz_clear (index);
1307
1308 cleanup:
1309
1310 mpz_clear (delta_mpz);
1311 mpz_clear (tmp_mpz);
1312 mpz_clear (nelts);
1313 for (d = 0; d < rank; d++)
1314 {
1315 mpz_clear (delta[d]);
1316 mpz_clear (start[d]);
1317 mpz_clear (end[d]);
1318 mpz_clear (ctr[d]);
1319 mpz_clear (stride[d]);
1320 }
1321 gfc_free_constructor (base);
1322 return t;
1323 }
1324
1325 /* Pull a substring out of an expression. */
1326
1327 static try
1328 find_substring_ref (gfc_expr *p, gfc_expr **newp)
1329 {
1330 int end;
1331 int start;
1332 char *chr;
1333
1334 if (p->ref->u.ss.start->expr_type != EXPR_CONSTANT
1335 || p->ref->u.ss.end->expr_type != EXPR_CONSTANT)
1336 return FAILURE;
1337
1338 *newp = gfc_copy_expr (p);
1339 chr = p->value.character.string;
1340 end = (int) mpz_get_ui (p->ref->u.ss.end->value.integer);
1341 start = (int) mpz_get_ui (p->ref->u.ss.start->value.integer);
1342
1343 (*newp)->value.character.length = end - start + 1;
1344 strncpy ((*newp)->value.character.string, &chr[start - 1],
1345 (*newp)->value.character.length);
1346 return SUCCESS;
1347 }
1348
1349
1350
1351 /* Simplify a subobject reference of a constructor. This occurs when
1352 parameter variable values are substituted. */
1353
1354 static try
1355 simplify_const_ref (gfc_expr *p)
1356 {
1357 gfc_constructor *cons;
1358 gfc_expr *newp;
1359
1360 while (p->ref)
1361 {
1362 switch (p->ref->type)
1363 {
1364 case REF_ARRAY:
1365 switch (p->ref->u.ar.type)
1366 {
1367 case AR_ELEMENT:
1368 if (find_array_element (p->value.constructor, &p->ref->u.ar,
1369 &cons) == FAILURE)
1370 return FAILURE;
1371
1372 if (!cons)
1373 return SUCCESS;
1374
1375 remove_subobject_ref (p, cons);
1376 break;
1377
1378 case AR_SECTION:
1379 if (find_array_section (p, p->ref) == FAILURE)
1380 return FAILURE;
1381 p->ref->u.ar.type = AR_FULL;
1382
1383 /* Fall through. */
1384
1385 case AR_FULL:
1386 if (p->ref->next != NULL
1387 && (p->ts.type == BT_CHARACTER || p->ts.type == BT_DERIVED))
1388 {
1389 cons = p->value.constructor;
1390 for (; cons; cons = cons->next)
1391 {
1392 cons->expr->ref = copy_ref (p->ref->next);
1393 simplify_const_ref (cons->expr);
1394 }
1395 }
1396 gfc_free_ref_list (p->ref);
1397 p->ref = NULL;
1398 break;
1399
1400 default:
1401 return SUCCESS;
1402 }
1403
1404 break;
1405
1406 case REF_COMPONENT:
1407 cons = find_component_ref (p->value.constructor, p->ref);
1408 remove_subobject_ref (p, cons);
1409 break;
1410
1411 case REF_SUBSTRING:
1412 if (find_substring_ref (p, &newp) == FAILURE)
1413 return FAILURE;
1414
1415 gfc_replace_expr (p, newp);
1416 gfc_free_ref_list (p->ref);
1417 p->ref = NULL;
1418 break;
1419 }
1420 }
1421
1422 return SUCCESS;
1423 }
1424
1425
1426 /* Simplify a chain of references. */
1427
1428 static try
1429 simplify_ref_chain (gfc_ref *ref, int type)
1430 {
1431 int n;
1432
1433 for (; ref; ref = ref->next)
1434 {
1435 switch (ref->type)
1436 {
1437 case REF_ARRAY:
1438 for (n = 0; n < ref->u.ar.dimen; n++)
1439 {
1440 if (gfc_simplify_expr (ref->u.ar.start[n], type) == FAILURE)
1441 return FAILURE;
1442 if (gfc_simplify_expr (ref->u.ar.end[n], type) == FAILURE)
1443 return FAILURE;
1444 if (gfc_simplify_expr (ref->u.ar.stride[n], type) == FAILURE)
1445 return FAILURE;
1446 }
1447 break;
1448
1449 case REF_SUBSTRING:
1450 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1451 return FAILURE;
1452 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1453 return FAILURE;
1454 break;
1455
1456 default:
1457 break;
1458 }
1459 }
1460 return SUCCESS;
1461 }
1462
1463
1464 /* Try to substitute the value of a parameter variable. */
1465
1466 static try
1467 simplify_parameter_variable (gfc_expr *p, int type)
1468 {
1469 gfc_expr *e;
1470 try t;
1471
1472 e = gfc_copy_expr (p->symtree->n.sym->value);
1473 if (e == NULL)
1474 return FAILURE;
1475
1476 e->rank = p->rank;
1477
1478 /* Do not copy subobject refs for constant. */
1479 if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
1480 e->ref = copy_ref (p->ref);
1481 t = gfc_simplify_expr (e, type);
1482
1483 /* Only use the simplification if it eliminated all subobject references. */
1484 if (t == SUCCESS && !e->ref)
1485 gfc_replace_expr (p, e);
1486 else
1487 gfc_free_expr (e);
1488
1489 return t;
1490 }
1491
1492 /* Given an expression, simplify it by collapsing constant
1493 expressions. Most simplification takes place when the expression
1494 tree is being constructed. If an intrinsic function is simplified
1495 at some point, we get called again to collapse the result against
1496 other constants.
1497
1498 We work by recursively simplifying expression nodes, simplifying
1499 intrinsic functions where possible, which can lead to further
1500 constant collapsing. If an operator has constant operand(s), we
1501 rip the expression apart, and rebuild it, hoping that it becomes
1502 something simpler.
1503
1504 The expression type is defined for:
1505 0 Basic expression parsing
1506 1 Simplifying array constructors -- will substitute
1507 iterator values.
1508 Returns FAILURE on error, SUCCESS otherwise.
1509 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1510
1511 try
1512 gfc_simplify_expr (gfc_expr *p, int type)
1513 {
1514 gfc_actual_arglist *ap;
1515
1516 if (p == NULL)
1517 return SUCCESS;
1518
1519 switch (p->expr_type)
1520 {
1521 case EXPR_CONSTANT:
1522 case EXPR_NULL:
1523 break;
1524
1525 case EXPR_FUNCTION:
1526 for (ap = p->value.function.actual; ap; ap = ap->next)
1527 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1528 return FAILURE;
1529
1530 if (p->value.function.isym != NULL
1531 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1532 return FAILURE;
1533
1534 break;
1535
1536 case EXPR_SUBSTRING:
1537 if (simplify_ref_chain (p->ref, type) == FAILURE)
1538 return FAILURE;
1539
1540 if (gfc_is_constant_expr (p))
1541 {
1542 char *s;
1543 int start, end;
1544
1545 if (p->ref && p->ref->u.ss.start)
1546 {
1547 gfc_extract_int (p->ref->u.ss.start, &start);
1548 start--; /* Convert from one-based to zero-based. */
1549 }
1550 else
1551 start = 0;
1552
1553 if (p->ref && p->ref->u.ss.end)
1554 gfc_extract_int (p->ref->u.ss.end, &end);
1555 else
1556 end = p->value.character.length;
1557
1558 s = gfc_getmem (end - start + 2);
1559 memcpy (s, p->value.character.string + start, end - start);
1560 s[end - start + 1] = '\0'; /* TODO: C-style string. */
1561 gfc_free (p->value.character.string);
1562 p->value.character.string = s;
1563 p->value.character.length = end - start;
1564 p->ts.cl = gfc_get_charlen ();
1565 p->ts.cl->next = gfc_current_ns->cl_list;
1566 gfc_current_ns->cl_list = p->ts.cl;
1567 p->ts.cl->length = gfc_int_expr (p->value.character.length);
1568 gfc_free_ref_list (p->ref);
1569 p->ref = NULL;
1570 p->expr_type = EXPR_CONSTANT;
1571 }
1572 break;
1573
1574 case EXPR_OP:
1575 if (simplify_intrinsic_op (p, type) == FAILURE)
1576 return FAILURE;
1577 break;
1578
1579 case EXPR_VARIABLE:
1580 /* Only substitute array parameter variables if we are in an
1581 initialization expression, or we want a subsection. */
1582 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1583 && (gfc_init_expr || p->ref
1584 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1585 {
1586 if (simplify_parameter_variable (p, type) == FAILURE)
1587 return FAILURE;
1588 break;
1589 }
1590
1591 if (type == 1)
1592 {
1593 gfc_simplify_iterator_var (p);
1594 }
1595
1596 /* Simplify subcomponent references. */
1597 if (simplify_ref_chain (p->ref, type) == FAILURE)
1598 return FAILURE;
1599
1600 break;
1601
1602 case EXPR_STRUCTURE:
1603 case EXPR_ARRAY:
1604 if (simplify_ref_chain (p->ref, type) == FAILURE)
1605 return FAILURE;
1606
1607 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1608 return FAILURE;
1609
1610 if (p->expr_type == EXPR_ARRAY && p->ref && p->ref->type == REF_ARRAY
1611 && p->ref->u.ar.type == AR_FULL)
1612 gfc_expand_constructor (p);
1613
1614 if (simplify_const_ref (p) == FAILURE)
1615 return FAILURE;
1616
1617 break;
1618 }
1619
1620 return SUCCESS;
1621 }
1622
1623
1624 /* Returns the type of an expression with the exception that iterator
1625 variables are automatically integers no matter what else they may
1626 be declared as. */
1627
1628 static bt
1629 et0 (gfc_expr *e)
1630 {
1631 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1632 return BT_INTEGER;
1633
1634 return e->ts.type;
1635 }
1636
1637
1638 /* Check an intrinsic arithmetic operation to see if it is consistent
1639 with some type of expression. */
1640
1641 static try check_init_expr (gfc_expr *);
1642
1643
1644 /* Scalarize an expression for an elemental intrinsic call. */
1645
1646 static try
1647 scalarize_intrinsic_call (gfc_expr *e)
1648 {
1649 gfc_actual_arglist *a, *b;
1650 gfc_constructor *args[5], *ctor, *new_ctor;
1651 gfc_expr *expr, *old;
1652 int n, i, rank[5];
1653
1654 old = gfc_copy_expr (e);
1655
1656 /* Assume that the old expression carries the type information and
1657 that the first arg carries all the shape information. */
1658 expr = gfc_copy_expr (old->value.function.actual->expr);
1659 gfc_free_constructor (expr->value.constructor);
1660 expr->value.constructor = NULL;
1661
1662 expr->ts = old->ts;
1663 expr->expr_type = EXPR_ARRAY;
1664
1665 /* Copy the array argument constructors into an array, with nulls
1666 for the scalars. */
1667 n = 0;
1668 a = old->value.function.actual;
1669 for (; a; a = a->next)
1670 {
1671 /* Check that this is OK for an initialization expression. */
1672 if (a->expr && check_init_expr (a->expr) == FAILURE)
1673 goto cleanup;
1674
1675 rank[n] = 0;
1676 if (a->expr && a->expr->rank && a->expr->expr_type == EXPR_VARIABLE)
1677 {
1678 rank[n] = a->expr->rank;
1679 ctor = a->expr->symtree->n.sym->value->value.constructor;
1680 args[n] = gfc_copy_constructor (ctor);
1681 }
1682 else if (a->expr && a->expr->expr_type == EXPR_ARRAY)
1683 {
1684 if (a->expr->rank)
1685 rank[n] = a->expr->rank;
1686 else
1687 rank[n] = 1;
1688 args[n] = gfc_copy_constructor (a->expr->value.constructor);
1689 }
1690 else
1691 args[n] = NULL;
1692 n++;
1693 }
1694
1695 for (i = 1; i < n; i++)
1696 if (rank[i] && rank[i] != rank[0])
1697 goto compliance;
1698
1699 /* Using the first argument as the master, step through the array
1700 calling the function for each element and advancing the array
1701 constructors together. */
1702 ctor = args[0];
1703 new_ctor = NULL;
1704 for (; ctor; ctor = ctor->next)
1705 {
1706 if (expr->value.constructor == NULL)
1707 expr->value.constructor
1708 = new_ctor = gfc_get_constructor ();
1709 else
1710 {
1711 new_ctor->next = gfc_get_constructor ();
1712 new_ctor = new_ctor->next;
1713 }
1714 new_ctor->expr = gfc_copy_expr (old);
1715 gfc_free_actual_arglist (new_ctor->expr->value.function.actual);
1716 a = NULL;
1717 b = old->value.function.actual;
1718 for (i = 0; i < n; i++)
1719 {
1720 if (a == NULL)
1721 new_ctor->expr->value.function.actual
1722 = a = gfc_get_actual_arglist ();
1723 else
1724 {
1725 a->next = gfc_get_actual_arglist ();
1726 a = a->next;
1727 }
1728 if (args[i])
1729 a->expr = gfc_copy_expr (args[i]->expr);
1730 else
1731 a->expr = gfc_copy_expr (b->expr);
1732
1733 b = b->next;
1734 }
1735
1736 /* Simplify the function calls. */
1737 if (gfc_simplify_expr (new_ctor->expr, 0) == FAILURE)
1738 goto cleanup;
1739
1740 for (i = 0; i < n; i++)
1741 if (args[i])
1742 args[i] = args[i]->next;
1743
1744 for (i = 1; i < n; i++)
1745 if (rank[i] && ((args[i] != NULL && args[0] == NULL)
1746 || (args[i] == NULL && args[0] != NULL)))
1747 goto compliance;
1748 }
1749
1750 free_expr0 (e);
1751 *e = *expr;
1752 gfc_free_expr (old);
1753 return SUCCESS;
1754
1755 compliance:
1756 gfc_error_now ("elemental function arguments at %C are not compliant");
1757
1758 cleanup:
1759 gfc_free_expr (expr);
1760 gfc_free_expr (old);
1761 return FAILURE;
1762 }
1763
1764
1765 static try
1766 check_intrinsic_op (gfc_expr *e, try (*check_function) (gfc_expr *))
1767 {
1768 gfc_expr *op1 = e->value.op.op1;
1769 gfc_expr *op2 = e->value.op.op2;
1770
1771 if ((*check_function) (op1) == FAILURE)
1772 return FAILURE;
1773
1774 switch (e->value.op.operator)
1775 {
1776 case INTRINSIC_UPLUS:
1777 case INTRINSIC_UMINUS:
1778 if (!numeric_type (et0 (op1)))
1779 goto not_numeric;
1780 break;
1781
1782 case INTRINSIC_EQ:
1783 case INTRINSIC_EQ_OS:
1784 case INTRINSIC_NE:
1785 case INTRINSIC_NE_OS:
1786 case INTRINSIC_GT:
1787 case INTRINSIC_GT_OS:
1788 case INTRINSIC_GE:
1789 case INTRINSIC_GE_OS:
1790 case INTRINSIC_LT:
1791 case INTRINSIC_LT_OS:
1792 case INTRINSIC_LE:
1793 case INTRINSIC_LE_OS:
1794 if ((*check_function) (op2) == FAILURE)
1795 return FAILURE;
1796
1797 if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
1798 && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
1799 {
1800 gfc_error ("Numeric or CHARACTER operands are required in "
1801 "expression at %L", &e->where);
1802 return FAILURE;
1803 }
1804 break;
1805
1806 case INTRINSIC_PLUS:
1807 case INTRINSIC_MINUS:
1808 case INTRINSIC_TIMES:
1809 case INTRINSIC_DIVIDE:
1810 case INTRINSIC_POWER:
1811 if ((*check_function) (op2) == FAILURE)
1812 return FAILURE;
1813
1814 if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
1815 goto not_numeric;
1816
1817 if (e->value.op.operator == INTRINSIC_POWER
1818 && check_function == check_init_expr && et0 (op2) != BT_INTEGER)
1819 {
1820 if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Noninteger "
1821 "exponent in an initialization "
1822 "expression at %L", &op2->where)
1823 == FAILURE)
1824 return FAILURE;
1825 }
1826
1827 break;
1828
1829 case INTRINSIC_CONCAT:
1830 if ((*check_function) (op2) == FAILURE)
1831 return FAILURE;
1832
1833 if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
1834 {
1835 gfc_error ("Concatenation operator in expression at %L "
1836 "must have two CHARACTER operands", &op1->where);
1837 return FAILURE;
1838 }
1839
1840 if (op1->ts.kind != op2->ts.kind)
1841 {
1842 gfc_error ("Concat operator at %L must concatenate strings of the "
1843 "same kind", &e->where);
1844 return FAILURE;
1845 }
1846
1847 break;
1848
1849 case INTRINSIC_NOT:
1850 if (et0 (op1) != BT_LOGICAL)
1851 {
1852 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1853 "operand", &op1->where);
1854 return FAILURE;
1855 }
1856
1857 break;
1858
1859 case INTRINSIC_AND:
1860 case INTRINSIC_OR:
1861 case INTRINSIC_EQV:
1862 case INTRINSIC_NEQV:
1863 if ((*check_function) (op2) == FAILURE)
1864 return FAILURE;
1865
1866 if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
1867 {
1868 gfc_error ("LOGICAL operands are required in expression at %L",
1869 &e->where);
1870 return FAILURE;
1871 }
1872
1873 break;
1874
1875 case INTRINSIC_PARENTHESES:
1876 break;
1877
1878 default:
1879 gfc_error ("Only intrinsic operators can be used in expression at %L",
1880 &e->where);
1881 return FAILURE;
1882 }
1883
1884 return SUCCESS;
1885
1886 not_numeric:
1887 gfc_error ("Numeric operands are required in expression at %L", &e->where);
1888
1889 return FAILURE;
1890 }
1891
1892
1893 static match
1894 check_init_expr_arguments (gfc_expr *e)
1895 {
1896 gfc_actual_arglist *ap;
1897
1898 for (ap = e->value.function.actual; ap; ap = ap->next)
1899 if (check_init_expr (ap->expr) == FAILURE)
1900 return MATCH_ERROR;
1901
1902 return MATCH_YES;
1903 }
1904
1905 /* F95, 7.1.6.1, Initialization expressions, (7)
1906 F2003, 7.1.7 Initialization expression, (8) */
1907
1908 static match
1909 check_inquiry (gfc_expr *e, int not_restricted)
1910 {
1911 const char *name;
1912 const char *const *functions;
1913
1914 static const char *const inquiry_func_f95[] = {
1915 "lbound", "shape", "size", "ubound",
1916 "bit_size", "len", "kind",
1917 "digits", "epsilon", "huge", "maxexponent", "minexponent",
1918 "precision", "radix", "range", "tiny",
1919 NULL
1920 };
1921
1922 static const char *const inquiry_func_f2003[] = {
1923 "lbound", "shape", "size", "ubound",
1924 "bit_size", "len", "kind",
1925 "digits", "epsilon", "huge", "maxexponent", "minexponent",
1926 "precision", "radix", "range", "tiny",
1927 "new_line", NULL
1928 };
1929
1930 int i;
1931 gfc_actual_arglist *ap;
1932
1933 if (!e->value.function.isym
1934 || !e->value.function.isym->inquiry)
1935 return MATCH_NO;
1936
1937 /* An undeclared parameter will get us here (PR25018). */
1938 if (e->symtree == NULL)
1939 return MATCH_NO;
1940
1941 name = e->symtree->n.sym->name;
1942
1943 functions = (gfc_option.warn_std & GFC_STD_F2003)
1944 ? inquiry_func_f2003 : inquiry_func_f95;
1945
1946 for (i = 0; functions[i]; i++)
1947 if (strcmp (functions[i], name) == 0)
1948 break;
1949
1950 if (functions[i] == NULL)
1951 {
1952 gfc_error ("Inquiry function '%s' at %L is not permitted "
1953 "in an initialization expression", name, &e->where);
1954 return MATCH_ERROR;
1955 }
1956
1957 /* At this point we have an inquiry function with a variable argument. The
1958 type of the variable might be undefined, but we need it now, because the
1959 arguments of these functions are not allowed to be undefined. */
1960
1961 for (ap = e->value.function.actual; ap; ap = ap->next)
1962 {
1963 if (!ap->expr)
1964 continue;
1965
1966 if (ap->expr->ts.type == BT_UNKNOWN)
1967 {
1968 if (ap->expr->symtree->n.sym->ts.type == BT_UNKNOWN
1969 && gfc_set_default_type (ap->expr->symtree->n.sym, 0, gfc_current_ns)
1970 == FAILURE)
1971 return MATCH_NO;
1972
1973 ap->expr->ts = ap->expr->symtree->n.sym->ts;
1974 }
1975
1976 /* Assumed character length will not reduce to a constant expression
1977 with LEN, as required by the standard. */
1978 if (i == 5 && not_restricted
1979 && ap->expr->symtree->n.sym->ts.type == BT_CHARACTER
1980 && ap->expr->symtree->n.sym->ts.cl->length == NULL)
1981 {
1982 gfc_error ("assumed character length variable '%s' in constant "
1983 "expression at %L", e->symtree->n.sym->name, &e->where);
1984 return MATCH_ERROR;
1985 }
1986 else if (not_restricted && check_init_expr (ap->expr) == FAILURE)
1987 return MATCH_ERROR;
1988 }
1989
1990 return MATCH_YES;
1991 }
1992
1993
1994 /* F95, 7.1.6.1, Initialization expressions, (5)
1995 F2003, 7.1.7 Initialization expression, (5) */
1996
1997 static match
1998 check_transformational (gfc_expr *e)
1999 {
2000 static const char * const trans_func_f95[] = {
2001 "repeat", "reshape", "selected_int_kind",
2002 "selected_real_kind", "transfer", "trim", NULL
2003 };
2004
2005 int i;
2006 const char *name;
2007
2008 if (!e->value.function.isym
2009 || !e->value.function.isym->transformational)
2010 return MATCH_NO;
2011
2012 name = e->symtree->n.sym->name;
2013
2014 /* NULL() is dealt with below. */
2015 if (strcmp ("null", name) == 0)
2016 return MATCH_NO;
2017
2018 for (i = 0; trans_func_f95[i]; i++)
2019 if (strcmp (trans_func_f95[i], name) == 0)
2020 break;
2021
2022 /* FIXME, F2003: implement translation of initialization
2023 expressions before enabling this check. For F95, error
2024 out if the transformational function is not in the list. */
2025 #if 0
2026 if (trans_func_f95[i] == NULL
2027 && gfc_notify_std (GFC_STD_F2003,
2028 "transformational intrinsic '%s' at %L is not permitted "
2029 "in an initialization expression", name, &e->where) == FAILURE)
2030 return MATCH_ERROR;
2031 #else
2032 if (trans_func_f95[i] == NULL)
2033 {
2034 gfc_error("transformational intrinsic '%s' at %L is not permitted "
2035 "in an initialization expression", name, &e->where);
2036 return MATCH_ERROR;
2037 }
2038 #endif
2039
2040 return check_init_expr_arguments (e);
2041 }
2042
2043
2044 /* F95, 7.1.6.1, Initialization expressions, (6)
2045 F2003, 7.1.7 Initialization expression, (6) */
2046
2047 static match
2048 check_null (gfc_expr *e)
2049 {
2050 if (strcmp ("null", e->symtree->n.sym->name) != 0)
2051 return MATCH_NO;
2052
2053 return check_init_expr_arguments (e);
2054 }
2055
2056
2057 static match
2058 check_elemental (gfc_expr *e)
2059 {
2060 if (!e->value.function.isym
2061 || !e->value.function.isym->elemental)
2062 return MATCH_NO;
2063
2064 if ((e->ts.type != BT_INTEGER || e->ts.type != BT_CHARACTER)
2065 && gfc_notify_std (GFC_STD_F2003, "Extension: Evaluation of "
2066 "nonstandard initialization expression at %L",
2067 &e->where) == FAILURE)
2068 return MATCH_ERROR;
2069
2070 return check_init_expr_arguments (e);
2071 }
2072
2073
2074 static match
2075 check_conversion (gfc_expr *e)
2076 {
2077 if (!e->value.function.isym
2078 || !e->value.function.isym->conversion)
2079 return MATCH_NO;
2080
2081 return check_init_expr_arguments (e);
2082 }
2083
2084
2085 /* Verify that an expression is an initialization expression. A side
2086 effect is that the expression tree is reduced to a single constant
2087 node if all goes well. This would normally happen when the
2088 expression is constructed but function references are assumed to be
2089 intrinsics in the context of initialization expressions. If
2090 FAILURE is returned an error message has been generated. */
2091
2092 static try
2093 check_init_expr (gfc_expr *e)
2094 {
2095 match m;
2096 try t;
2097 gfc_intrinsic_sym *isym;
2098
2099 if (e == NULL)
2100 return SUCCESS;
2101
2102 switch (e->expr_type)
2103 {
2104 case EXPR_OP:
2105 t = check_intrinsic_op (e, check_init_expr);
2106 if (t == SUCCESS)
2107 t = gfc_simplify_expr (e, 0);
2108
2109 break;
2110
2111 case EXPR_FUNCTION:
2112 t = FAILURE;
2113
2114 if ((m = check_specification_function (e)) != MATCH_YES)
2115 {
2116 if ((m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES)
2117 {
2118 gfc_error ("Function '%s' in initialization expression at %L "
2119 "must be an intrinsic or a specification function",
2120 e->symtree->n.sym->name, &e->where);
2121 break;
2122 }
2123
2124 if ((m = check_conversion (e)) == MATCH_NO
2125 && (m = check_inquiry (e, 1)) == MATCH_NO
2126 && (m = check_null (e)) == MATCH_NO
2127 && (m = check_transformational (e)) == MATCH_NO
2128 && (m = check_elemental (e)) == MATCH_NO)
2129 {
2130 gfc_error ("Intrinsic function '%s' at %L is not permitted "
2131 "in an initialization expression",
2132 e->symtree->n.sym->name, &e->where);
2133 m = MATCH_ERROR;
2134 }
2135
2136 /* Try to scalarize an elemental intrinsic function that has an
2137 array argument. */
2138 isym = gfc_find_function (e->symtree->n.sym->name);
2139 if (isym && isym->elemental
2140 && e->value.function.actual->expr->expr_type == EXPR_ARRAY)
2141 {
2142 if ((t = scalarize_intrinsic_call (e)) == SUCCESS)
2143 break;
2144 }
2145 }
2146
2147 if (m == MATCH_YES)
2148 t = gfc_simplify_expr (e, 0);
2149
2150 break;
2151
2152 case EXPR_VARIABLE:
2153 t = SUCCESS;
2154
2155 if (gfc_check_iter_variable (e) == SUCCESS)
2156 break;
2157
2158 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
2159 {
2160 t = simplify_parameter_variable (e, 0);
2161 break;
2162 }
2163
2164 if (gfc_in_match_data ())
2165 break;
2166
2167 t = FAILURE;
2168
2169 if (e->symtree->n.sym->as)
2170 {
2171 switch (e->symtree->n.sym->as->type)
2172 {
2173 case AS_ASSUMED_SIZE:
2174 gfc_error ("assumed size array '%s' at %L is not permitted "
2175 "in an initialization expression",
2176 e->symtree->n.sym->name, &e->where);
2177 break;
2178
2179 case AS_ASSUMED_SHAPE:
2180 gfc_error ("assumed shape array '%s' at %L is not permitted "
2181 "in an initialization expression",
2182 e->symtree->n.sym->name, &e->where);
2183 break;
2184
2185 case AS_DEFERRED:
2186 gfc_error ("deferred array '%s' at %L is not permitted "
2187 "in an initialization expression",
2188 e->symtree->n.sym->name, &e->where);
2189 break;
2190
2191 default:
2192 gcc_unreachable();
2193 }
2194 }
2195 else
2196 gfc_error ("Parameter '%s' at %L has not been declared or is "
2197 "a variable, which does not reduce to a constant "
2198 "expression", e->symtree->n.sym->name, &e->where);
2199
2200 break;
2201
2202 case EXPR_CONSTANT:
2203 case EXPR_NULL:
2204 t = SUCCESS;
2205 break;
2206
2207 case EXPR_SUBSTRING:
2208 t = check_init_expr (e->ref->u.ss.start);
2209 if (t == FAILURE)
2210 break;
2211
2212 t = check_init_expr (e->ref->u.ss.end);
2213 if (t == SUCCESS)
2214 t = gfc_simplify_expr (e, 0);
2215
2216 break;
2217
2218 case EXPR_STRUCTURE:
2219 t = gfc_check_constructor (e, check_init_expr);
2220 break;
2221
2222 case EXPR_ARRAY:
2223 t = gfc_check_constructor (e, check_init_expr);
2224 if (t == FAILURE)
2225 break;
2226
2227 t = gfc_expand_constructor (e);
2228 if (t == FAILURE)
2229 break;
2230
2231 t = gfc_check_constructor_type (e);
2232 break;
2233
2234 default:
2235 gfc_internal_error ("check_init_expr(): Unknown expression type");
2236 }
2237
2238 return t;
2239 }
2240
2241
2242 /* Match an initialization expression. We work by first matching an
2243 expression, then reducing it to a constant. */
2244
2245 match
2246 gfc_match_init_expr (gfc_expr **result)
2247 {
2248 gfc_expr *expr;
2249 match m;
2250 try t;
2251
2252 m = gfc_match_expr (&expr);
2253 if (m != MATCH_YES)
2254 return m;
2255
2256 gfc_init_expr = 1;
2257 t = gfc_resolve_expr (expr);
2258 if (t == SUCCESS)
2259 t = check_init_expr (expr);
2260 gfc_init_expr = 0;
2261
2262 if (t == FAILURE)
2263 {
2264 gfc_free_expr (expr);
2265 return MATCH_ERROR;
2266 }
2267
2268 if (expr->expr_type == EXPR_ARRAY
2269 && (gfc_check_constructor_type (expr) == FAILURE
2270 || gfc_expand_constructor (expr) == FAILURE))
2271 {
2272 gfc_free_expr (expr);
2273 return MATCH_ERROR;
2274 }
2275
2276 /* Not all inquiry functions are simplified to constant expressions
2277 so it is necessary to call check_inquiry again. */
2278 if (!gfc_is_constant_expr (expr) && check_inquiry (expr, 1) != MATCH_YES
2279 && !gfc_in_match_data ())
2280 {
2281 gfc_error ("Initialization expression didn't reduce %C");
2282 return MATCH_ERROR;
2283 }
2284
2285 *result = expr;
2286
2287 return MATCH_YES;
2288 }
2289
2290
2291 static try check_restricted (gfc_expr *);
2292
2293 /* Given an actual argument list, test to see that each argument is a
2294 restricted expression and optionally if the expression type is
2295 integer or character. */
2296
2297 static try
2298 restricted_args (gfc_actual_arglist *a)
2299 {
2300 for (; a; a = a->next)
2301 {
2302 if (check_restricted (a->expr) == FAILURE)
2303 return FAILURE;
2304 }
2305
2306 return SUCCESS;
2307 }
2308
2309
2310 /************* Restricted/specification expressions *************/
2311
2312
2313 /* Make sure a non-intrinsic function is a specification function. */
2314
2315 static try
2316 external_spec_function (gfc_expr *e)
2317 {
2318 gfc_symbol *f;
2319
2320 f = e->value.function.esym;
2321
2322 if (f->attr.proc == PROC_ST_FUNCTION)
2323 {
2324 gfc_error ("Specification function '%s' at %L cannot be a statement "
2325 "function", f->name, &e->where);
2326 return FAILURE;
2327 }
2328
2329 if (f->attr.proc == PROC_INTERNAL)
2330 {
2331 gfc_error ("Specification function '%s' at %L cannot be an internal "
2332 "function", f->name, &e->where);
2333 return FAILURE;
2334 }
2335
2336 if (!f->attr.pure && !f->attr.elemental)
2337 {
2338 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
2339 &e->where);
2340 return FAILURE;
2341 }
2342
2343 if (f->attr.recursive)
2344 {
2345 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
2346 f->name, &e->where);
2347 return FAILURE;
2348 }
2349
2350 return restricted_args (e->value.function.actual);
2351 }
2352
2353
2354 /* Check to see that a function reference to an intrinsic is a
2355 restricted expression. */
2356
2357 static try
2358 restricted_intrinsic (gfc_expr *e)
2359 {
2360 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
2361 if (check_inquiry (e, 0) == MATCH_YES)
2362 return SUCCESS;
2363
2364 return restricted_args (e->value.function.actual);
2365 }
2366
2367
2368 /* Verify that an expression is a restricted expression. Like its
2369 cousin check_init_expr(), an error message is generated if we
2370 return FAILURE. */
2371
2372 static try
2373 check_restricted (gfc_expr *e)
2374 {
2375 gfc_symbol *sym;
2376 try t;
2377
2378 if (e == NULL)
2379 return SUCCESS;
2380
2381 switch (e->expr_type)
2382 {
2383 case EXPR_OP:
2384 t = check_intrinsic_op (e, check_restricted);
2385 if (t == SUCCESS)
2386 t = gfc_simplify_expr (e, 0);
2387
2388 break;
2389
2390 case EXPR_FUNCTION:
2391 t = e->value.function.esym ? external_spec_function (e)
2392 : restricted_intrinsic (e);
2393 break;
2394
2395 case EXPR_VARIABLE:
2396 sym = e->symtree->n.sym;
2397 t = FAILURE;
2398
2399 if (sym->attr.optional)
2400 {
2401 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
2402 sym->name, &e->where);
2403 break;
2404 }
2405
2406 if (sym->attr.intent == INTENT_OUT)
2407 {
2408 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
2409 sym->name, &e->where);
2410 break;
2411 }
2412
2413 /* gfc_is_formal_arg broadcasts that a formal argument list is being
2414 processed in resolve.c(resolve_formal_arglist). This is done so
2415 that host associated dummy array indices are accepted (PR23446).
2416 This mechanism also does the same for the specification expressions
2417 of array-valued functions. */
2418 if (sym->attr.in_common
2419 || sym->attr.use_assoc
2420 || sym->attr.dummy
2421 || sym->ns != gfc_current_ns
2422 || (sym->ns->proc_name != NULL
2423 && sym->ns->proc_name->attr.flavor == FL_MODULE)
2424 || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
2425 {
2426 t = SUCCESS;
2427 break;
2428 }
2429
2430 gfc_error ("Variable '%s' cannot appear in the expression at %L",
2431 sym->name, &e->where);
2432
2433 break;
2434
2435 case EXPR_NULL:
2436 case EXPR_CONSTANT:
2437 t = SUCCESS;
2438 break;
2439
2440 case EXPR_SUBSTRING:
2441 t = gfc_specification_expr (e->ref->u.ss.start);
2442 if (t == FAILURE)
2443 break;
2444
2445 t = gfc_specification_expr (e->ref->u.ss.end);
2446 if (t == SUCCESS)
2447 t = gfc_simplify_expr (e, 0);
2448
2449 break;
2450
2451 case EXPR_STRUCTURE:
2452 t = gfc_check_constructor (e, check_restricted);
2453 break;
2454
2455 case EXPR_ARRAY:
2456 t = gfc_check_constructor (e, check_restricted);
2457 break;
2458
2459 default:
2460 gfc_internal_error ("check_restricted(): Unknown expression type");
2461 }
2462
2463 return t;
2464 }
2465
2466
2467 /* Check to see that an expression is a specification expression. If
2468 we return FAILURE, an error has been generated. */
2469
2470 try
2471 gfc_specification_expr (gfc_expr *e)
2472 {
2473
2474 if (e == NULL)
2475 return SUCCESS;
2476
2477 if (e->ts.type != BT_INTEGER)
2478 {
2479 gfc_error ("Expression at %L must be of INTEGER type", &e->where);
2480 return FAILURE;
2481 }
2482
2483 if (e->rank != 0)
2484 {
2485 gfc_error ("Expression at %L must be scalar", &e->where);
2486 return FAILURE;
2487 }
2488
2489 if (gfc_simplify_expr (e, 0) == FAILURE)
2490 return FAILURE;
2491
2492 return check_restricted (e);
2493 }
2494
2495
2496 /************** Expression conformance checks. *************/
2497
2498 /* Given two expressions, make sure that the arrays are conformable. */
2499
2500 try
2501 gfc_check_conformance (const char *optype_msgid, gfc_expr *op1, gfc_expr *op2)
2502 {
2503 int op1_flag, op2_flag, d;
2504 mpz_t op1_size, op2_size;
2505 try t;
2506
2507 if (op1->rank == 0 || op2->rank == 0)
2508 return SUCCESS;
2509
2510 if (op1->rank != op2->rank)
2511 {
2512 gfc_error ("Incompatible ranks in %s at %L", _(optype_msgid),
2513 &op1->where);
2514 return FAILURE;
2515 }
2516
2517 t = SUCCESS;
2518
2519 for (d = 0; d < op1->rank; d++)
2520 {
2521 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
2522 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
2523
2524 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
2525 {
2526 gfc_error ("different shape for %s at %L on dimension %d (%d/%d)",
2527 _(optype_msgid), &op1->where, d + 1,
2528 (int) mpz_get_si (op1_size),
2529 (int) mpz_get_si (op2_size));
2530
2531 t = FAILURE;
2532 }
2533
2534 if (op1_flag)
2535 mpz_clear (op1_size);
2536 if (op2_flag)
2537 mpz_clear (op2_size);
2538
2539 if (t == FAILURE)
2540 return FAILURE;
2541 }
2542
2543 return SUCCESS;
2544 }
2545
2546
2547 /* Given an assignable expression and an arbitrary expression, make
2548 sure that the assignment can take place. */
2549
2550 try
2551 gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
2552 {
2553 gfc_symbol *sym;
2554 gfc_ref *ref;
2555 int has_pointer;
2556
2557 sym = lvalue->symtree->n.sym;
2558
2559 /* Check INTENT(IN), unless the object itself is the component or
2560 sub-component of a pointer. */
2561 has_pointer = sym->attr.pointer;
2562
2563 for (ref = lvalue->ref; ref; ref = ref->next)
2564 if (ref->type == REF_COMPONENT && ref->u.c.component->pointer)
2565 {
2566 has_pointer = 1;
2567 break;
2568 }
2569
2570 if (!has_pointer && sym->attr.intent == INTENT_IN)
2571 {
2572 gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L",
2573 sym->name, &lvalue->where);
2574 return FAILURE;
2575 }
2576
2577 /* 12.5.2.2, Note 12.26: The result variable is very similar to any other
2578 variable local to a function subprogram. Its existence begins when
2579 execution of the function is initiated and ends when execution of the
2580 function is terminated...
2581 Therefore, the left hand side is no longer a variable, when it is: */
2582 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_ST_FUNCTION
2583 && !sym->attr.external)
2584 {
2585 bool bad_proc;
2586 bad_proc = false;
2587
2588 /* (i) Use associated; */
2589 if (sym->attr.use_assoc)
2590 bad_proc = true;
2591
2592 /* (ii) The assignment is in the main program; or */
2593 if (gfc_current_ns->proc_name->attr.is_main_program)
2594 bad_proc = true;
2595
2596 /* (iii) A module or internal procedure... */
2597 if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
2598 || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
2599 && gfc_current_ns->parent
2600 && (!(gfc_current_ns->parent->proc_name->attr.function
2601 || gfc_current_ns->parent->proc_name->attr.subroutine)
2602 || gfc_current_ns->parent->proc_name->attr.is_main_program))
2603 {
2604 /* ... that is not a function... */
2605 if (!gfc_current_ns->proc_name->attr.function)
2606 bad_proc = true;
2607
2608 /* ... or is not an entry and has a different name. */
2609 if (!sym->attr.entry && sym->name != gfc_current_ns->proc_name->name)
2610 bad_proc = true;
2611 }
2612
2613 if (bad_proc)
2614 {
2615 gfc_error ("'%s' at %L is not a VALUE", sym->name, &lvalue->where);
2616 return FAILURE;
2617 }
2618 }
2619
2620 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
2621 {
2622 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
2623 lvalue->rank, rvalue->rank, &lvalue->where);
2624 return FAILURE;
2625 }
2626
2627 if (lvalue->ts.type == BT_UNKNOWN)
2628 {
2629 gfc_error ("Variable type is UNKNOWN in assignment at %L",
2630 &lvalue->where);
2631 return FAILURE;
2632 }
2633
2634 if (rvalue->expr_type == EXPR_NULL)
2635 {
2636 if (lvalue->symtree->n.sym->attr.pointer
2637 && lvalue->symtree->n.sym->attr.data)
2638 return SUCCESS;
2639 else
2640 {
2641 gfc_error ("NULL appears on right-hand side in assignment at %L",
2642 &rvalue->where);
2643 return FAILURE;
2644 }
2645 }
2646
2647 if (sym->attr.cray_pointee
2648 && lvalue->ref != NULL
2649 && lvalue->ref->u.ar.type == AR_FULL
2650 && lvalue->ref->u.ar.as->cp_was_assumed)
2651 {
2652 gfc_error ("Vector assignment to assumed-size Cray Pointee at %L "
2653 "is illegal", &lvalue->where);
2654 return FAILURE;
2655 }
2656
2657 /* This is possibly a typo: x = f() instead of x => f(). */
2658 if (gfc_option.warn_surprising
2659 && rvalue->expr_type == EXPR_FUNCTION
2660 && rvalue->symtree->n.sym->attr.pointer)
2661 gfc_warning ("POINTER valued function appears on right-hand side of "
2662 "assignment at %L", &rvalue->where);
2663
2664 /* Check size of array assignments. */
2665 if (lvalue->rank != 0 && rvalue->rank != 0
2666 && gfc_check_conformance ("Array assignment", lvalue, rvalue) != SUCCESS)
2667 return FAILURE;
2668
2669 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
2670 return SUCCESS;
2671
2672 if (!conform)
2673 {
2674 /* Numeric can be converted to any other numeric. And Hollerith can be
2675 converted to any other type. */
2676 if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
2677 || rvalue->ts.type == BT_HOLLERITH)
2678 return SUCCESS;
2679
2680 if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
2681 return SUCCESS;
2682
2683 gfc_error ("Incompatible types in assignment at %L, %s to %s",
2684 &rvalue->where, gfc_typename (&rvalue->ts),
2685 gfc_typename (&lvalue->ts));
2686
2687 return FAILURE;
2688 }
2689
2690 return gfc_convert_type (rvalue, &lvalue->ts, 1);
2691 }
2692
2693
2694 /* Check that a pointer assignment is OK. We first check lvalue, and
2695 we only check rvalue if it's not an assignment to NULL() or a
2696 NULLIFY statement. */
2697
2698 try
2699 gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
2700 {
2701 symbol_attribute attr;
2702 gfc_ref *ref;
2703 int is_pure;
2704 int pointer, check_intent_in;
2705
2706 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
2707 {
2708 gfc_error ("Pointer assignment target is not a POINTER at %L",
2709 &lvalue->where);
2710 return FAILURE;
2711 }
2712
2713 if (lvalue->symtree->n.sym->attr.flavor == FL_PROCEDURE
2714 && lvalue->symtree->n.sym->attr.use_assoc)
2715 {
2716 gfc_error ("'%s' in the pointer assignment at %L cannot be an "
2717 "l-value since it is a procedure",
2718 lvalue->symtree->n.sym->name, &lvalue->where);
2719 return FAILURE;
2720 }
2721
2722
2723 /* Check INTENT(IN), unless the object itself is the component or
2724 sub-component of a pointer. */
2725 check_intent_in = 1;
2726 pointer = lvalue->symtree->n.sym->attr.pointer;
2727
2728 for (ref = lvalue->ref; ref; ref = ref->next)
2729 {
2730 if (pointer)
2731 check_intent_in = 0;
2732
2733 if (ref->type == REF_COMPONENT && ref->u.c.component->pointer)
2734 pointer = 1;
2735 }
2736
2737 if (check_intent_in && lvalue->symtree->n.sym->attr.intent == INTENT_IN)
2738 {
2739 gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L",
2740 lvalue->symtree->n.sym->name, &lvalue->where);
2741 return FAILURE;
2742 }
2743
2744 if (!pointer)
2745 {
2746 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
2747 return FAILURE;
2748 }
2749
2750 is_pure = gfc_pure (NULL);
2751
2752 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym)
2753 && lvalue->symtree->n.sym->value != rvalue)
2754 {
2755 gfc_error ("Bad pointer object in PURE procedure at %L", &lvalue->where);
2756 return FAILURE;
2757 }
2758
2759 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
2760 kind, etc for lvalue and rvalue must match, and rvalue must be a
2761 pure variable if we're in a pure function. */
2762 if (rvalue->expr_type == EXPR_NULL && rvalue->ts.type == BT_UNKNOWN)
2763 return SUCCESS;
2764
2765 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
2766 {
2767 gfc_error ("Different types in pointer assignment at %L",
2768 &lvalue->where);
2769 return FAILURE;
2770 }
2771
2772 if (lvalue->ts.kind != rvalue->ts.kind)
2773 {
2774 gfc_error ("Different kind type parameters in pointer "
2775 "assignment at %L", &lvalue->where);
2776 return FAILURE;
2777 }
2778
2779 if (lvalue->rank != rvalue->rank)
2780 {
2781 gfc_error ("Different ranks in pointer assignment at %L",
2782 &lvalue->where);
2783 return FAILURE;
2784 }
2785
2786 /* Now punt if we are dealing with a NULLIFY(X) or X = NULL(X). */
2787 if (rvalue->expr_type == EXPR_NULL)
2788 return SUCCESS;
2789
2790 if (lvalue->ts.type == BT_CHARACTER
2791 && lvalue->ts.cl && rvalue->ts.cl
2792 && lvalue->ts.cl->length && rvalue->ts.cl->length
2793 && abs (gfc_dep_compare_expr (lvalue->ts.cl->length,
2794 rvalue->ts.cl->length)) == 1)
2795 {
2796 gfc_error ("Different character lengths in pointer "
2797 "assignment at %L", &lvalue->where);
2798 return FAILURE;
2799 }
2800
2801 attr = gfc_expr_attr (rvalue);
2802 if (!attr.target && !attr.pointer)
2803 {
2804 gfc_error ("Pointer assignment target is neither TARGET "
2805 "nor POINTER at %L", &rvalue->where);
2806 return FAILURE;
2807 }
2808
2809 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
2810 {
2811 gfc_error ("Bad target in pointer assignment in PURE "
2812 "procedure at %L", &rvalue->where);
2813 }
2814
2815 if (gfc_has_vector_index (rvalue))
2816 {
2817 gfc_error ("Pointer assignment with vector subscript "
2818 "on rhs at %L", &rvalue->where);
2819 return FAILURE;
2820 }
2821
2822 if (attr.protected && attr.use_assoc)
2823 {
2824 gfc_error ("Pointer assigment target has PROTECTED "
2825 "attribute at %L", &rvalue->where);
2826 return FAILURE;
2827 }
2828
2829 return SUCCESS;
2830 }
2831
2832
2833 /* Relative of gfc_check_assign() except that the lvalue is a single
2834 symbol. Used for initialization assignments. */
2835
2836 try
2837 gfc_check_assign_symbol (gfc_symbol *sym, gfc_expr *rvalue)
2838 {
2839 gfc_expr lvalue;
2840 try r;
2841
2842 memset (&lvalue, '\0', sizeof (gfc_expr));
2843
2844 lvalue.expr_type = EXPR_VARIABLE;
2845 lvalue.ts = sym->ts;
2846 if (sym->as)
2847 lvalue.rank = sym->as->rank;
2848 lvalue.symtree = (gfc_symtree *) gfc_getmem (sizeof (gfc_symtree));
2849 lvalue.symtree->n.sym = sym;
2850 lvalue.where = sym->declared_at;
2851
2852 if (sym->attr.pointer)
2853 r = gfc_check_pointer_assign (&lvalue, rvalue);
2854 else
2855 r = gfc_check_assign (&lvalue, rvalue, 1);
2856
2857 gfc_free (lvalue.symtree);
2858
2859 return r;
2860 }
2861
2862
2863 /* Get an expression for a default initializer. */
2864
2865 gfc_expr *
2866 gfc_default_initializer (gfc_typespec *ts)
2867 {
2868 gfc_constructor *tail;
2869 gfc_expr *init;
2870 gfc_component *c;
2871
2872 init = NULL;
2873
2874 /* See if we have a default initializer. */
2875 for (c = ts->derived->components; c; c = c->next)
2876 {
2877 if ((c->initializer || c->allocatable) && init == NULL)
2878 init = gfc_get_expr ();
2879 }
2880
2881 if (init == NULL)
2882 return NULL;
2883
2884 /* Build the constructor. */
2885 init->expr_type = EXPR_STRUCTURE;
2886 init->ts = *ts;
2887 init->where = ts->derived->declared_at;
2888 tail = NULL;
2889 for (c = ts->derived->components; c; c = c->next)
2890 {
2891 if (tail == NULL)
2892 init->value.constructor = tail = gfc_get_constructor ();
2893 else
2894 {
2895 tail->next = gfc_get_constructor ();
2896 tail = tail->next;
2897 }
2898
2899 if (c->initializer)
2900 tail->expr = gfc_copy_expr (c->initializer);
2901
2902 if (c->allocatable)
2903 {
2904 tail->expr = gfc_get_expr ();
2905 tail->expr->expr_type = EXPR_NULL;
2906 tail->expr->ts = c->ts;
2907 }
2908 }
2909 return init;
2910 }
2911
2912
2913 /* Given a symbol, create an expression node with that symbol as a
2914 variable. If the symbol is array valued, setup a reference of the
2915 whole array. */
2916
2917 gfc_expr *
2918 gfc_get_variable_expr (gfc_symtree *var)
2919 {
2920 gfc_expr *e;
2921
2922 e = gfc_get_expr ();
2923 e->expr_type = EXPR_VARIABLE;
2924 e->symtree = var;
2925 e->ts = var->n.sym->ts;
2926
2927 if (var->n.sym->as != NULL)
2928 {
2929 e->rank = var->n.sym->as->rank;
2930 e->ref = gfc_get_ref ();
2931 e->ref->type = REF_ARRAY;
2932 e->ref->u.ar.type = AR_FULL;
2933 }
2934
2935 return e;
2936 }
2937
2938
2939 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */
2940
2941 void
2942 gfc_expr_set_symbols_referenced (gfc_expr *expr)
2943 {
2944 gfc_actual_arglist *arg;
2945 gfc_constructor *c;
2946 gfc_ref *ref;
2947 int i;
2948
2949 if (!expr) return;
2950
2951 switch (expr->expr_type)
2952 {
2953 case EXPR_OP:
2954 gfc_expr_set_symbols_referenced (expr->value.op.op1);
2955 gfc_expr_set_symbols_referenced (expr->value.op.op2);
2956 break;
2957
2958 case EXPR_FUNCTION:
2959 for (arg = expr->value.function.actual; arg; arg = arg->next)
2960 gfc_expr_set_symbols_referenced (arg->expr);
2961 break;
2962
2963 case EXPR_VARIABLE:
2964 gfc_set_sym_referenced (expr->symtree->n.sym);
2965 break;
2966
2967 case EXPR_CONSTANT:
2968 case EXPR_NULL:
2969 case EXPR_SUBSTRING:
2970 break;
2971
2972 case EXPR_STRUCTURE:
2973 case EXPR_ARRAY:
2974 for (c = expr->value.constructor; c; c = c->next)
2975 gfc_expr_set_symbols_referenced (c->expr);
2976 break;
2977
2978 default:
2979 gcc_unreachable ();
2980 break;
2981 }
2982
2983 for (ref = expr->ref; ref; ref = ref->next)
2984 switch (ref->type)
2985 {
2986 case REF_ARRAY:
2987 for (i = 0; i < ref->u.ar.dimen; i++)
2988 {
2989 gfc_expr_set_symbols_referenced (ref->u.ar.start[i]);
2990 gfc_expr_set_symbols_referenced (ref->u.ar.end[i]);
2991 gfc_expr_set_symbols_referenced (ref->u.ar.stride[i]);
2992 }
2993 break;
2994
2995 case REF_COMPONENT:
2996 break;
2997
2998 case REF_SUBSTRING:
2999 gfc_expr_set_symbols_referenced (ref->u.ss.start);
3000 gfc_expr_set_symbols_referenced (ref->u.ss.end);
3001 break;
3002
3003 default:
3004 gcc_unreachable ();
3005 break;
3006 }
3007 }