re PR fortran/23091 (ICE in gfc_trans_auto_array_allocation)
[gcc.git] / gcc / fortran / expr.c
1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
3 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 2, 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 COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA. */
22
23 #include "config.h"
24 #include "system.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
28
29 /* Get a new expr node. */
30
31 gfc_expr *
32 gfc_get_expr (void)
33 {
34 gfc_expr *e;
35
36 e = gfc_getmem (sizeof (gfc_expr));
37
38 gfc_clear_ts (&e->ts);
39 e->shape = NULL;
40 e->ref = NULL;
41 e->symtree = NULL;
42
43 return e;
44 }
45
46
47 /* Free an argument list and everything below it. */
48
49 void
50 gfc_free_actual_arglist (gfc_actual_arglist * a1)
51 {
52 gfc_actual_arglist *a2;
53
54 while (a1)
55 {
56 a2 = a1->next;
57 gfc_free_expr (a1->expr);
58 gfc_free (a1);
59 a1 = a2;
60 }
61 }
62
63
64 /* Copy an arglist structure and all of the arguments. */
65
66 gfc_actual_arglist *
67 gfc_copy_actual_arglist (gfc_actual_arglist * p)
68 {
69 gfc_actual_arglist *head, *tail, *new;
70
71 head = tail = NULL;
72
73 for (; p; p = p->next)
74 {
75 new = gfc_get_actual_arglist ();
76 *new = *p;
77
78 new->expr = gfc_copy_expr (p->expr);
79 new->next = NULL;
80
81 if (head == NULL)
82 head = new;
83 else
84 tail->next = new;
85
86 tail = new;
87 }
88
89 return head;
90 }
91
92
93 /* Free a list of reference structures. */
94
95 void
96 gfc_free_ref_list (gfc_ref * p)
97 {
98 gfc_ref *q;
99 int i;
100
101 for (; p; p = q)
102 {
103 q = p->next;
104
105 switch (p->type)
106 {
107 case REF_ARRAY:
108 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
109 {
110 gfc_free_expr (p->u.ar.start[i]);
111 gfc_free_expr (p->u.ar.end[i]);
112 gfc_free_expr (p->u.ar.stride[i]);
113 }
114
115 break;
116
117 case REF_SUBSTRING:
118 gfc_free_expr (p->u.ss.start);
119 gfc_free_expr (p->u.ss.end);
120 break;
121
122 case REF_COMPONENT:
123 break;
124 }
125
126 gfc_free (p);
127 }
128 }
129
130
131 /* Workhorse function for gfc_free_expr() that frees everything
132 beneath an expression node, but not the node itself. This is
133 useful when we want to simplify a node and replace it with
134 something else or the expression node belongs to another structure. */
135
136 static void
137 free_expr0 (gfc_expr * e)
138 {
139 int n;
140
141 switch (e->expr_type)
142 {
143 case EXPR_CONSTANT:
144 if (e->from_H)
145 {
146 gfc_free (e->value.character.string);
147 break;
148 }
149
150 switch (e->ts.type)
151 {
152 case BT_INTEGER:
153 mpz_clear (e->value.integer);
154 break;
155
156 case BT_REAL:
157 mpfr_clear (e->value.real);
158 break;
159
160 case BT_CHARACTER:
161 case BT_HOLLERITH:
162 gfc_free (e->value.character.string);
163 break;
164
165 case BT_COMPLEX:
166 mpfr_clear (e->value.complex.r);
167 mpfr_clear (e->value.complex.i);
168 break;
169
170 default:
171 break;
172 }
173
174 break;
175
176 case EXPR_OP:
177 if (e->value.op.op1 != NULL)
178 gfc_free_expr (e->value.op.op1);
179 if (e->value.op.op2 != NULL)
180 gfc_free_expr (e->value.op.op2);
181 break;
182
183 case EXPR_FUNCTION:
184 gfc_free_actual_arglist (e->value.function.actual);
185 break;
186
187 case EXPR_VARIABLE:
188 break;
189
190 case EXPR_ARRAY:
191 case EXPR_STRUCTURE:
192 gfc_free_constructor (e->value.constructor);
193 break;
194
195 case EXPR_SUBSTRING:
196 gfc_free (e->value.character.string);
197 break;
198
199 case EXPR_NULL:
200 break;
201
202 default:
203 gfc_internal_error ("free_expr0(): Bad expr type");
204 }
205
206 /* Free a shape array. */
207 if (e->shape != NULL)
208 {
209 for (n = 0; n < e->rank; n++)
210 mpz_clear (e->shape[n]);
211
212 gfc_free (e->shape);
213 }
214
215 gfc_free_ref_list (e->ref);
216
217 memset (e, '\0', sizeof (gfc_expr));
218 }
219
220
221 /* Free an expression node and everything beneath it. */
222
223 void
224 gfc_free_expr (gfc_expr * e)
225 {
226
227 if (e == NULL)
228 return;
229
230 free_expr0 (e);
231 gfc_free (e);
232 }
233
234
235 /* Graft the *src expression onto the *dest subexpression. */
236
237 void
238 gfc_replace_expr (gfc_expr * dest, gfc_expr * src)
239 {
240
241 free_expr0 (dest);
242 *dest = *src;
243
244 gfc_free (src);
245 }
246
247
248 /* Try to extract an integer constant from the passed expression node.
249 Returns an error message or NULL if the result is set. It is
250 tempting to generate an error and return SUCCESS or FAILURE, but
251 failure is OK for some callers. */
252
253 const char *
254 gfc_extract_int (gfc_expr * expr, int *result)
255 {
256
257 if (expr->expr_type != EXPR_CONSTANT)
258 return _("Constant expression required at %C");
259
260 if (expr->ts.type != BT_INTEGER)
261 return _("Integer expression required at %C");
262
263 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
264 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
265 {
266 return _("Integer value too large in expression at %C");
267 }
268
269 *result = (int) mpz_get_si (expr->value.integer);
270
271 return NULL;
272 }
273
274
275 /* Recursively copy a list of reference structures. */
276
277 static gfc_ref *
278 copy_ref (gfc_ref * src)
279 {
280 gfc_array_ref *ar;
281 gfc_ref *dest;
282
283 if (src == NULL)
284 return NULL;
285
286 dest = gfc_get_ref ();
287 dest->type = src->type;
288
289 switch (src->type)
290 {
291 case REF_ARRAY:
292 ar = gfc_copy_array_ref (&src->u.ar);
293 dest->u.ar = *ar;
294 gfc_free (ar);
295 break;
296
297 case REF_COMPONENT:
298 dest->u.c = src->u.c;
299 break;
300
301 case REF_SUBSTRING:
302 dest->u.ss = src->u.ss;
303 dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
304 dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
305 break;
306 }
307
308 dest->next = copy_ref (src->next);
309
310 return dest;
311 }
312
313
314 /* Detect whether an expression has any vector index array
315 references. */
316
317 int
318 gfc_has_vector_index (gfc_expr *e)
319 {
320 gfc_ref * ref;
321 int i;
322 for (ref = e->ref; ref; ref = ref->next)
323 if (ref->type == REF_ARRAY)
324 for (i = 0; i < ref->u.ar.dimen; i++)
325 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
326 return 1;
327 return 0;
328 }
329
330
331 /* Copy a shape array. */
332
333 mpz_t *
334 gfc_copy_shape (mpz_t * shape, int rank)
335 {
336 mpz_t *new_shape;
337 int n;
338
339 if (shape == NULL)
340 return NULL;
341
342 new_shape = gfc_get_shape (rank);
343
344 for (n = 0; n < rank; n++)
345 mpz_init_set (new_shape[n], shape[n]);
346
347 return new_shape;
348 }
349
350
351 /* Copy a shape array excluding dimension N, where N is an integer
352 constant expression. Dimensions are numbered in fortran style --
353 starting with ONE.
354
355 So, if the original shape array contains R elements
356 { s1 ... sN-1 sN sN+1 ... sR-1 sR}
357 the result contains R-1 elements:
358 { s1 ... sN-1 sN+1 ... sR-1}
359
360 If anything goes wrong -- N is not a constant, its value is out
361 of range -- or anything else, just returns NULL.
362 */
363
364 mpz_t *
365 gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim)
366 {
367 mpz_t *new_shape, *s;
368 int i, n;
369
370 if (shape == NULL
371 || rank <= 1
372 || dim == NULL
373 || dim->expr_type != EXPR_CONSTANT
374 || dim->ts.type != BT_INTEGER)
375 return NULL;
376
377 n = mpz_get_si (dim->value.integer);
378 n--; /* Convert to zero based index */
379 if (n < 0 || n >= rank)
380 return NULL;
381
382 s = new_shape = gfc_get_shape (rank-1);
383
384 for (i = 0; i < rank; i++)
385 {
386 if (i == n)
387 continue;
388 mpz_init_set (*s, shape[i]);
389 s++;
390 }
391
392 return new_shape;
393 }
394
395 /* Given an expression pointer, return a copy of the expression. This
396 subroutine is recursive. */
397
398 gfc_expr *
399 gfc_copy_expr (gfc_expr * p)
400 {
401 gfc_expr *q;
402 char *s;
403
404 if (p == NULL)
405 return NULL;
406
407 q = gfc_get_expr ();
408 *q = *p;
409
410 switch (q->expr_type)
411 {
412 case EXPR_SUBSTRING:
413 s = gfc_getmem (p->value.character.length + 1);
414 q->value.character.string = s;
415
416 memcpy (s, p->value.character.string, p->value.character.length + 1);
417 break;
418
419 case EXPR_CONSTANT:
420 if (p->from_H)
421 {
422 s = gfc_getmem (p->value.character.length + 1);
423 q->value.character.string = s;
424
425 memcpy (s, p->value.character.string,
426 p->value.character.length + 1);
427 break;
428 }
429 switch (q->ts.type)
430 {
431 case BT_INTEGER:
432 mpz_init_set (q->value.integer, p->value.integer);
433 break;
434
435 case BT_REAL:
436 gfc_set_model_kind (q->ts.kind);
437 mpfr_init (q->value.real);
438 mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
439 break;
440
441 case BT_COMPLEX:
442 gfc_set_model_kind (q->ts.kind);
443 mpfr_init (q->value.complex.r);
444 mpfr_init (q->value.complex.i);
445 mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
446 mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
447 break;
448
449 case BT_CHARACTER:
450 case BT_HOLLERITH:
451 s = gfc_getmem (p->value.character.length + 1);
452 q->value.character.string = s;
453
454 memcpy (s, p->value.character.string,
455 p->value.character.length + 1);
456 break;
457
458 case BT_LOGICAL:
459 case BT_DERIVED:
460 break; /* Already done */
461
462 case BT_PROCEDURE:
463 case BT_UNKNOWN:
464 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
465 /* Not reached */
466 }
467
468 break;
469
470 case EXPR_OP:
471 switch (q->value.op.operator)
472 {
473 case INTRINSIC_NOT:
474 case INTRINSIC_UPLUS:
475 case INTRINSIC_UMINUS:
476 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
477 break;
478
479 default: /* Binary operators */
480 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
481 q->value.op.op2 = gfc_copy_expr (p->value.op.op2);
482 break;
483 }
484
485 break;
486
487 case EXPR_FUNCTION:
488 q->value.function.actual =
489 gfc_copy_actual_arglist (p->value.function.actual);
490 break;
491
492 case EXPR_STRUCTURE:
493 case EXPR_ARRAY:
494 q->value.constructor = gfc_copy_constructor (p->value.constructor);
495 break;
496
497 case EXPR_VARIABLE:
498 case EXPR_NULL:
499 break;
500 }
501
502 q->shape = gfc_copy_shape (p->shape, p->rank);
503
504 q->ref = copy_ref (p->ref);
505
506 return q;
507 }
508
509
510 /* Return the maximum kind of two expressions. In general, higher
511 kind numbers mean more precision for numeric types. */
512
513 int
514 gfc_kind_max (gfc_expr * e1, gfc_expr * e2)
515 {
516
517 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
518 }
519
520
521 /* Returns nonzero if the type is numeric, zero otherwise. */
522
523 static int
524 numeric_type (bt type)
525 {
526
527 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
528 }
529
530
531 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
532
533 int
534 gfc_numeric_ts (gfc_typespec * ts)
535 {
536
537 return numeric_type (ts->type);
538 }
539
540
541 /* Returns an expression node that is an integer constant. */
542
543 gfc_expr *
544 gfc_int_expr (int i)
545 {
546 gfc_expr *p;
547
548 p = gfc_get_expr ();
549
550 p->expr_type = EXPR_CONSTANT;
551 p->ts.type = BT_INTEGER;
552 p->ts.kind = gfc_default_integer_kind;
553
554 p->where = gfc_current_locus;
555 mpz_init_set_si (p->value.integer, i);
556
557 return p;
558 }
559
560
561 /* Returns an expression node that is a logical constant. */
562
563 gfc_expr *
564 gfc_logical_expr (int i, locus * where)
565 {
566 gfc_expr *p;
567
568 p = gfc_get_expr ();
569
570 p->expr_type = EXPR_CONSTANT;
571 p->ts.type = BT_LOGICAL;
572 p->ts.kind = gfc_default_logical_kind;
573
574 if (where == NULL)
575 where = &gfc_current_locus;
576 p->where = *where;
577 p->value.logical = i;
578
579 return p;
580 }
581
582
583 /* Return an expression node with an optional argument list attached.
584 A variable number of gfc_expr pointers are strung together in an
585 argument list with a NULL pointer terminating the list. */
586
587 gfc_expr *
588 gfc_build_conversion (gfc_expr * e)
589 {
590 gfc_expr *p;
591
592 p = gfc_get_expr ();
593 p->expr_type = EXPR_FUNCTION;
594 p->symtree = NULL;
595 p->value.function.actual = NULL;
596
597 p->value.function.actual = gfc_get_actual_arglist ();
598 p->value.function.actual->expr = e;
599
600 return p;
601 }
602
603
604 /* Given an expression node with some sort of numeric binary
605 expression, insert type conversions required to make the operands
606 have the same type.
607
608 The exception is that the operands of an exponential don't have to
609 have the same type. If possible, the base is promoted to the type
610 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
611 1.0**2 stays as it is. */
612
613 void
614 gfc_type_convert_binary (gfc_expr * e)
615 {
616 gfc_expr *op1, *op2;
617
618 op1 = e->value.op.op1;
619 op2 = e->value.op.op2;
620
621 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
622 {
623 gfc_clear_ts (&e->ts);
624 return;
625 }
626
627 /* Kind conversions of same type. */
628 if (op1->ts.type == op2->ts.type)
629 {
630
631 if (op1->ts.kind == op2->ts.kind)
632 {
633 /* No type conversions. */
634 e->ts = op1->ts;
635 goto done;
636 }
637
638 if (op1->ts.kind > op2->ts.kind)
639 gfc_convert_type (op2, &op1->ts, 2);
640 else
641 gfc_convert_type (op1, &op2->ts, 2);
642
643 e->ts = op1->ts;
644 goto done;
645 }
646
647 /* Integer combined with real or complex. */
648 if (op2->ts.type == BT_INTEGER)
649 {
650 e->ts = op1->ts;
651
652 /* Special case for ** operator. */
653 if (e->value.op.operator == INTRINSIC_POWER)
654 goto done;
655
656 gfc_convert_type (e->value.op.op2, &e->ts, 2);
657 goto done;
658 }
659
660 if (op1->ts.type == BT_INTEGER)
661 {
662 e->ts = op2->ts;
663 gfc_convert_type (e->value.op.op1, &e->ts, 2);
664 goto done;
665 }
666
667 /* Real combined with complex. */
668 e->ts.type = BT_COMPLEX;
669 if (op1->ts.kind > op2->ts.kind)
670 e->ts.kind = op1->ts.kind;
671 else
672 e->ts.kind = op2->ts.kind;
673 if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
674 gfc_convert_type (e->value.op.op1, &e->ts, 2);
675 if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
676 gfc_convert_type (e->value.op.op2, &e->ts, 2);
677
678 done:
679 return;
680 }
681
682
683 /* Function to determine if an expression is constant or not. This
684 function expects that the expression has already been simplified. */
685
686 int
687 gfc_is_constant_expr (gfc_expr * e)
688 {
689 gfc_constructor *c;
690 gfc_actual_arglist *arg;
691 int rv;
692
693 if (e == NULL)
694 return 1;
695
696 switch (e->expr_type)
697 {
698 case EXPR_OP:
699 rv = (gfc_is_constant_expr (e->value.op.op1)
700 && (e->value.op.op2 == NULL
701 || gfc_is_constant_expr (e->value.op.op2)));
702
703 break;
704
705 case EXPR_VARIABLE:
706 rv = 0;
707 break;
708
709 case EXPR_FUNCTION:
710 /* Call to intrinsic with at least one argument. */
711 rv = 0;
712 if (e->value.function.isym && e->value.function.actual)
713 {
714 for (arg = e->value.function.actual; arg; arg = arg->next)
715 {
716 if (!gfc_is_constant_expr (arg->expr))
717 break;
718 }
719 if (arg == NULL)
720 rv = 1;
721 }
722 break;
723
724 case EXPR_CONSTANT:
725 case EXPR_NULL:
726 rv = 1;
727 break;
728
729 case EXPR_SUBSTRING:
730 rv = (gfc_is_constant_expr (e->ref->u.ss.start)
731 && gfc_is_constant_expr (e->ref->u.ss.end));
732 break;
733
734 case EXPR_STRUCTURE:
735 rv = 0;
736 for (c = e->value.constructor; c; c = c->next)
737 if (!gfc_is_constant_expr (c->expr))
738 break;
739
740 if (c == NULL)
741 rv = 1;
742 break;
743
744 case EXPR_ARRAY:
745 rv = gfc_constant_ac (e);
746 break;
747
748 default:
749 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
750 }
751
752 return rv;
753 }
754
755
756 /* Try to collapse intrinsic expressions. */
757
758 static try
759 simplify_intrinsic_op (gfc_expr * p, int type)
760 {
761 gfc_expr *op1, *op2, *result;
762
763 if (p->value.op.operator == INTRINSIC_USER)
764 return SUCCESS;
765
766 op1 = p->value.op.op1;
767 op2 = p->value.op.op2;
768
769 if (gfc_simplify_expr (op1, type) == FAILURE)
770 return FAILURE;
771 if (gfc_simplify_expr (op2, type) == FAILURE)
772 return FAILURE;
773
774 if (!gfc_is_constant_expr (op1)
775 || (op2 != NULL && !gfc_is_constant_expr (op2)))
776 return SUCCESS;
777
778 /* Rip p apart */
779 p->value.op.op1 = NULL;
780 p->value.op.op2 = NULL;
781
782 switch (p->value.op.operator)
783 {
784 case INTRINSIC_UPLUS:
785 case INTRINSIC_PARENTHESES:
786 result = gfc_uplus (op1);
787 break;
788
789 case INTRINSIC_UMINUS:
790 result = gfc_uminus (op1);
791 break;
792
793 case INTRINSIC_PLUS:
794 result = gfc_add (op1, op2);
795 break;
796
797 case INTRINSIC_MINUS:
798 result = gfc_subtract (op1, op2);
799 break;
800
801 case INTRINSIC_TIMES:
802 result = gfc_multiply (op1, op2);
803 break;
804
805 case INTRINSIC_DIVIDE:
806 result = gfc_divide (op1, op2);
807 break;
808
809 case INTRINSIC_POWER:
810 result = gfc_power (op1, op2);
811 break;
812
813 case INTRINSIC_CONCAT:
814 result = gfc_concat (op1, op2);
815 break;
816
817 case INTRINSIC_EQ:
818 result = gfc_eq (op1, op2);
819 break;
820
821 case INTRINSIC_NE:
822 result = gfc_ne (op1, op2);
823 break;
824
825 case INTRINSIC_GT:
826 result = gfc_gt (op1, op2);
827 break;
828
829 case INTRINSIC_GE:
830 result = gfc_ge (op1, op2);
831 break;
832
833 case INTRINSIC_LT:
834 result = gfc_lt (op1, op2);
835 break;
836
837 case INTRINSIC_LE:
838 result = gfc_le (op1, op2);
839 break;
840
841 case INTRINSIC_NOT:
842 result = gfc_not (op1);
843 break;
844
845 case INTRINSIC_AND:
846 result = gfc_and (op1, op2);
847 break;
848
849 case INTRINSIC_OR:
850 result = gfc_or (op1, op2);
851 break;
852
853 case INTRINSIC_EQV:
854 result = gfc_eqv (op1, op2);
855 break;
856
857 case INTRINSIC_NEQV:
858 result = gfc_neqv (op1, op2);
859 break;
860
861 default:
862 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
863 }
864
865 if (result == NULL)
866 {
867 gfc_free_expr (op1);
868 gfc_free_expr (op2);
869 return FAILURE;
870 }
871
872 result->rank = p->rank;
873 result->where = p->where;
874 gfc_replace_expr (p, result);
875
876 return SUCCESS;
877 }
878
879
880 /* Subroutine to simplify constructor expressions. Mutually recursive
881 with gfc_simplify_expr(). */
882
883 static try
884 simplify_constructor (gfc_constructor * c, int type)
885 {
886
887 for (; c; c = c->next)
888 {
889 if (c->iterator
890 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
891 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
892 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
893 return FAILURE;
894
895 if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
896 return FAILURE;
897 }
898
899 return SUCCESS;
900 }
901
902
903 /* Pull a single array element out of an array constructor. */
904
905 static gfc_constructor *
906 find_array_element (gfc_constructor * cons, gfc_array_ref * ar)
907 {
908 unsigned long nelemen;
909 int i;
910 mpz_t delta;
911 mpz_t offset;
912
913 mpz_init_set_ui (offset, 0);
914 mpz_init (delta);
915 for (i = 0; i < ar->dimen; i++)
916 {
917 if (ar->start[i]->expr_type != EXPR_CONSTANT)
918 {
919 cons = NULL;
920 break;
921 }
922 mpz_sub (delta, ar->start[i]->value.integer,
923 ar->as->lower[i]->value.integer);
924 mpz_add (offset, offset, delta);
925 }
926
927 if (cons)
928 {
929 if (mpz_fits_ulong_p (offset))
930 {
931 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
932 {
933 if (cons->iterator)
934 {
935 cons = NULL;
936 break;
937 }
938 cons = cons->next;
939 }
940 }
941 else
942 cons = NULL;
943 }
944
945 mpz_clear (delta);
946 mpz_clear (offset);
947
948 return cons;
949 }
950
951
952 /* Find a component of a structure constructor. */
953
954 static gfc_constructor *
955 find_component_ref (gfc_constructor * cons, gfc_ref * ref)
956 {
957 gfc_component *comp;
958 gfc_component *pick;
959
960 comp = ref->u.c.sym->components;
961 pick = ref->u.c.component;
962 while (comp != pick)
963 {
964 comp = comp->next;
965 cons = cons->next;
966 }
967
968 return cons;
969 }
970
971
972 /* Replace an expression with the contents of a constructor, removing
973 the subobject reference in the process. */
974
975 static void
976 remove_subobject_ref (gfc_expr * p, gfc_constructor * cons)
977 {
978 gfc_expr *e;
979
980 e = cons->expr;
981 cons->expr = NULL;
982 e->ref = p->ref->next;
983 p->ref->next = NULL;
984 gfc_replace_expr (p, e);
985 }
986
987
988 /* Simplify a subobject reference of a constructor. This occurs when
989 parameter variable values are substituted. */
990
991 static try
992 simplify_const_ref (gfc_expr * p)
993 {
994 gfc_constructor *cons;
995
996 while (p->ref)
997 {
998 switch (p->ref->type)
999 {
1000 case REF_ARRAY:
1001 switch (p->ref->u.ar.type)
1002 {
1003 case AR_ELEMENT:
1004 cons = find_array_element (p->value.constructor, &p->ref->u.ar);
1005 if (!cons)
1006 return SUCCESS;
1007 remove_subobject_ref (p, cons);
1008 break;
1009
1010 case AR_FULL:
1011 if (p->ref->next != NULL)
1012 {
1013 /* TODO: Simplify array subobject references. */
1014 return SUCCESS;
1015 }
1016 gfc_free_ref_list (p->ref);
1017 p->ref = NULL;
1018 break;
1019
1020 default:
1021 /* TODO: Simplify array subsections. */
1022 return SUCCESS;
1023 }
1024
1025 break;
1026
1027 case REF_COMPONENT:
1028 cons = find_component_ref (p->value.constructor, p->ref);
1029 remove_subobject_ref (p, cons);
1030 break;
1031
1032 case REF_SUBSTRING:
1033 /* TODO: Constant substrings. */
1034 return SUCCESS;
1035 }
1036 }
1037
1038 return SUCCESS;
1039 }
1040
1041
1042 /* Simplify a chain of references. */
1043
1044 static try
1045 simplify_ref_chain (gfc_ref * ref, int type)
1046 {
1047 int n;
1048
1049 for (; ref; ref = ref->next)
1050 {
1051 switch (ref->type)
1052 {
1053 case REF_ARRAY:
1054 for (n = 0; n < ref->u.ar.dimen; n++)
1055 {
1056 if (gfc_simplify_expr (ref->u.ar.start[n], type)
1057 == FAILURE)
1058 return FAILURE;
1059 if (gfc_simplify_expr (ref->u.ar.end[n], type)
1060 == FAILURE)
1061 return FAILURE;
1062 if (gfc_simplify_expr (ref->u.ar.stride[n], type)
1063 == FAILURE)
1064 return FAILURE;
1065 }
1066 break;
1067
1068 case REF_SUBSTRING:
1069 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1070 return FAILURE;
1071 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1072 return FAILURE;
1073 break;
1074
1075 default:
1076 break;
1077 }
1078 }
1079 return SUCCESS;
1080 }
1081
1082
1083 /* Try to substitute the value of a parameter variable. */
1084 static try
1085 simplify_parameter_variable (gfc_expr * p, int type)
1086 {
1087 gfc_expr *e;
1088 try t;
1089
1090 e = gfc_copy_expr (p->symtree->n.sym->value);
1091 /* Do not copy subobject refs for constant. */
1092 if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
1093 e->ref = copy_ref (p->ref);
1094 t = gfc_simplify_expr (e, type);
1095
1096 /* Only use the simplification if it eliminated all subobject
1097 references. */
1098 if (t == SUCCESS && ! e->ref)
1099 gfc_replace_expr (p, e);
1100 else
1101 gfc_free_expr (e);
1102
1103 return t;
1104 }
1105
1106 /* Given an expression, simplify it by collapsing constant
1107 expressions. Most simplification takes place when the expression
1108 tree is being constructed. If an intrinsic function is simplified
1109 at some point, we get called again to collapse the result against
1110 other constants.
1111
1112 We work by recursively simplifying expression nodes, simplifying
1113 intrinsic functions where possible, which can lead to further
1114 constant collapsing. If an operator has constant operand(s), we
1115 rip the expression apart, and rebuild it, hoping that it becomes
1116 something simpler.
1117
1118 The expression type is defined for:
1119 0 Basic expression parsing
1120 1 Simplifying array constructors -- will substitute
1121 iterator values.
1122 Returns FAILURE on error, SUCCESS otherwise.
1123 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1124
1125 try
1126 gfc_simplify_expr (gfc_expr * p, int type)
1127 {
1128 gfc_actual_arglist *ap;
1129
1130 if (p == NULL)
1131 return SUCCESS;
1132
1133 switch (p->expr_type)
1134 {
1135 case EXPR_CONSTANT:
1136 case EXPR_NULL:
1137 break;
1138
1139 case EXPR_FUNCTION:
1140 for (ap = p->value.function.actual; ap; ap = ap->next)
1141 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1142 return FAILURE;
1143
1144 if (p->value.function.isym != NULL
1145 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1146 return FAILURE;
1147
1148 break;
1149
1150 case EXPR_SUBSTRING:
1151 if (simplify_ref_chain (p->ref, type) == FAILURE)
1152 return FAILURE;
1153
1154 if (gfc_is_constant_expr (p))
1155 {
1156 char *s;
1157 int start, end;
1158
1159 gfc_extract_int (p->ref->u.ss.start, &start);
1160 start--; /* Convert from one-based to zero-based. */
1161 gfc_extract_int (p->ref->u.ss.end, &end);
1162 s = gfc_getmem (end - start + 1);
1163 memcpy (s, p->value.character.string + start, end - start);
1164 s[end] = '\0'; /* TODO: C-style string for debugging. */
1165 gfc_free (p->value.character.string);
1166 p->value.character.string = s;
1167 p->value.character.length = end - start;
1168 p->ts.cl = gfc_get_charlen ();
1169 p->ts.cl->next = gfc_current_ns->cl_list;
1170 gfc_current_ns->cl_list = p->ts.cl;
1171 p->ts.cl->length = gfc_int_expr (p->value.character.length);
1172 gfc_free_ref_list (p->ref);
1173 p->ref = NULL;
1174 p->expr_type = EXPR_CONSTANT;
1175 }
1176 break;
1177
1178 case EXPR_OP:
1179 if (simplify_intrinsic_op (p, type) == FAILURE)
1180 return FAILURE;
1181 break;
1182
1183 case EXPR_VARIABLE:
1184 /* Only substitute array parameter variables if we are in an
1185 initialization expression, or we want a subsection. */
1186 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1187 && (gfc_init_expr || p->ref
1188 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1189 {
1190 if (simplify_parameter_variable (p, type) == FAILURE)
1191 return FAILURE;
1192 break;
1193 }
1194
1195 if (type == 1)
1196 {
1197 gfc_simplify_iterator_var (p);
1198 }
1199
1200 /* Simplify subcomponent references. */
1201 if (simplify_ref_chain (p->ref, type) == FAILURE)
1202 return FAILURE;
1203
1204 break;
1205
1206 case EXPR_STRUCTURE:
1207 case EXPR_ARRAY:
1208 if (simplify_ref_chain (p->ref, type) == FAILURE)
1209 return FAILURE;
1210
1211 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1212 return FAILURE;
1213
1214 if (p->expr_type == EXPR_ARRAY)
1215 gfc_expand_constructor (p);
1216
1217 if (simplify_const_ref (p) == FAILURE)
1218 return FAILURE;
1219
1220 break;
1221 }
1222
1223 return SUCCESS;
1224 }
1225
1226
1227 /* Returns the type of an expression with the exception that iterator
1228 variables are automatically integers no matter what else they may
1229 be declared as. */
1230
1231 static bt
1232 et0 (gfc_expr * e)
1233 {
1234
1235 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1236 return BT_INTEGER;
1237
1238 return e->ts.type;
1239 }
1240
1241
1242 /* Check an intrinsic arithmetic operation to see if it is consistent
1243 with some type of expression. */
1244
1245 static try check_init_expr (gfc_expr *);
1246
1247 static try
1248 check_intrinsic_op (gfc_expr * e, try (*check_function) (gfc_expr *))
1249 {
1250 gfc_expr *op1 = e->value.op.op1;
1251 gfc_expr *op2 = e->value.op.op2;
1252
1253 if ((*check_function) (op1) == FAILURE)
1254 return FAILURE;
1255
1256 switch (e->value.op.operator)
1257 {
1258 case INTRINSIC_UPLUS:
1259 case INTRINSIC_UMINUS:
1260 if (!numeric_type (et0 (op1)))
1261 goto not_numeric;
1262 break;
1263
1264 case INTRINSIC_EQ:
1265 case INTRINSIC_NE:
1266 case INTRINSIC_GT:
1267 case INTRINSIC_GE:
1268 case INTRINSIC_LT:
1269 case INTRINSIC_LE:
1270 if ((*check_function) (op2) == FAILURE)
1271 return FAILURE;
1272
1273 if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
1274 && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
1275 {
1276 gfc_error ("Numeric or CHARACTER operands are required in "
1277 "expression at %L", &e->where);
1278 return FAILURE;
1279 }
1280 break;
1281
1282 case INTRINSIC_PLUS:
1283 case INTRINSIC_MINUS:
1284 case INTRINSIC_TIMES:
1285 case INTRINSIC_DIVIDE:
1286 case INTRINSIC_POWER:
1287 if ((*check_function) (op2) == FAILURE)
1288 return FAILURE;
1289
1290 if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
1291 goto not_numeric;
1292
1293 if (e->value.op.operator == INTRINSIC_POWER
1294 && check_function == check_init_expr && et0 (op2) != BT_INTEGER)
1295 {
1296 gfc_error ("Exponent at %L must be INTEGER for an initialization "
1297 "expression", &op2->where);
1298 return FAILURE;
1299 }
1300
1301 break;
1302
1303 case INTRINSIC_CONCAT:
1304 if ((*check_function) (op2) == FAILURE)
1305 return FAILURE;
1306
1307 if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
1308 {
1309 gfc_error ("Concatenation operator in expression at %L "
1310 "must have two CHARACTER operands", &op1->where);
1311 return FAILURE;
1312 }
1313
1314 if (op1->ts.kind != op2->ts.kind)
1315 {
1316 gfc_error ("Concat operator at %L must concatenate strings of the "
1317 "same kind", &e->where);
1318 return FAILURE;
1319 }
1320
1321 break;
1322
1323 case INTRINSIC_NOT:
1324 if (et0 (op1) != BT_LOGICAL)
1325 {
1326 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1327 "operand", &op1->where);
1328 return FAILURE;
1329 }
1330
1331 break;
1332
1333 case INTRINSIC_AND:
1334 case INTRINSIC_OR:
1335 case INTRINSIC_EQV:
1336 case INTRINSIC_NEQV:
1337 if ((*check_function) (op2) == FAILURE)
1338 return FAILURE;
1339
1340 if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
1341 {
1342 gfc_error ("LOGICAL operands are required in expression at %L",
1343 &e->where);
1344 return FAILURE;
1345 }
1346
1347 break;
1348
1349 case INTRINSIC_PARENTHESES:
1350 break;
1351
1352 default:
1353 gfc_error ("Only intrinsic operators can be used in expression at %L",
1354 &e->where);
1355 return FAILURE;
1356 }
1357
1358 return SUCCESS;
1359
1360 not_numeric:
1361 gfc_error ("Numeric operands are required in expression at %L", &e->where);
1362
1363 return FAILURE;
1364 }
1365
1366
1367
1368 /* Certain inquiry functions are specifically allowed to have variable
1369 arguments, which is an exception to the normal requirement that an
1370 initialization function have initialization arguments. We head off
1371 this problem here. */
1372
1373 static try
1374 check_inquiry (gfc_expr * e, int not_restricted)
1375 {
1376 const char *name;
1377
1378 /* FIXME: This should be moved into the intrinsic definitions,
1379 to eliminate this ugly hack. */
1380 static const char * const inquiry_function[] = {
1381 "digits", "epsilon", "huge", "kind", "len", "maxexponent", "minexponent",
1382 "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1383 "lbound", "ubound", NULL
1384 };
1385
1386 int i;
1387
1388 /* An undeclared parameter will get us here (PR25018). */
1389 if (e->symtree == NULL)
1390 return FAILURE;
1391
1392 name = e->symtree->n.sym->name;
1393
1394 for (i = 0; inquiry_function[i]; i++)
1395 if (strcmp (inquiry_function[i], name) == 0)
1396 break;
1397
1398 if (inquiry_function[i] == NULL)
1399 return FAILURE;
1400
1401 e = e->value.function.actual->expr;
1402
1403 if (e == NULL || e->expr_type != EXPR_VARIABLE)
1404 return FAILURE;
1405
1406 /* At this point we have an inquiry function with a variable argument. The
1407 type of the variable might be undefined, but we need it now, because the
1408 arguments of these functions are allowed to be undefined. */
1409
1410 if (e->ts.type == BT_UNKNOWN)
1411 {
1412 if (e->symtree->n.sym->ts.type == BT_UNKNOWN
1413 && gfc_set_default_type (e->symtree->n.sym, 0, gfc_current_ns)
1414 == FAILURE)
1415 return FAILURE;
1416
1417 e->ts = e->symtree->n.sym->ts;
1418 }
1419
1420 /* Assumed character length will not reduce to a constant expression
1421 with LEN, as required by the standard. */
1422 if (i == 4 && not_restricted
1423 && e->symtree->n.sym->ts.type == BT_CHARACTER
1424 && e->symtree->n.sym->ts.cl->length == NULL)
1425 gfc_notify_std (GFC_STD_GNU, "assumed character length "
1426 "variable '%s' in constant expression at %L",
1427 e->symtree->n.sym->name, &e->where);
1428
1429 return SUCCESS;
1430 }
1431
1432
1433 /* Verify that an expression is an initialization expression. A side
1434 effect is that the expression tree is reduced to a single constant
1435 node if all goes well. This would normally happen when the
1436 expression is constructed but function references are assumed to be
1437 intrinsics in the context of initialization expressions. If
1438 FAILURE is returned an error message has been generated. */
1439
1440 static try
1441 check_init_expr (gfc_expr * e)
1442 {
1443 gfc_actual_arglist *ap;
1444 match m;
1445 try t;
1446
1447 if (e == NULL)
1448 return SUCCESS;
1449
1450 switch (e->expr_type)
1451 {
1452 case EXPR_OP:
1453 t = check_intrinsic_op (e, check_init_expr);
1454 if (t == SUCCESS)
1455 t = gfc_simplify_expr (e, 0);
1456
1457 break;
1458
1459 case EXPR_FUNCTION:
1460 t = SUCCESS;
1461
1462 if (check_inquiry (e, 1) != SUCCESS)
1463 {
1464 t = SUCCESS;
1465 for (ap = e->value.function.actual; ap; ap = ap->next)
1466 if (check_init_expr (ap->expr) == FAILURE)
1467 {
1468 t = FAILURE;
1469 break;
1470 }
1471 }
1472
1473 if (t == SUCCESS)
1474 {
1475 m = gfc_intrinsic_func_interface (e, 0);
1476
1477 if (m == MATCH_NO)
1478 gfc_error ("Function '%s' in initialization expression at %L "
1479 "must be an intrinsic function",
1480 e->symtree->n.sym->name, &e->where);
1481
1482 if (m != MATCH_YES)
1483 t = FAILURE;
1484 }
1485
1486 break;
1487
1488 case EXPR_VARIABLE:
1489 t = SUCCESS;
1490
1491 if (gfc_check_iter_variable (e) == SUCCESS)
1492 break;
1493
1494 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
1495 {
1496 t = simplify_parameter_variable (e, 0);
1497 break;
1498 }
1499
1500 gfc_error ("Parameter '%s' at %L has not been declared or is "
1501 "a variable, which does not reduce to a constant "
1502 "expression", e->symtree->n.sym->name, &e->where);
1503 t = FAILURE;
1504 break;
1505
1506 case EXPR_CONSTANT:
1507 case EXPR_NULL:
1508 t = SUCCESS;
1509 break;
1510
1511 case EXPR_SUBSTRING:
1512 t = check_init_expr (e->ref->u.ss.start);
1513 if (t == FAILURE)
1514 break;
1515
1516 t = check_init_expr (e->ref->u.ss.end);
1517 if (t == SUCCESS)
1518 t = gfc_simplify_expr (e, 0);
1519
1520 break;
1521
1522 case EXPR_STRUCTURE:
1523 t = gfc_check_constructor (e, check_init_expr);
1524 break;
1525
1526 case EXPR_ARRAY:
1527 t = gfc_check_constructor (e, check_init_expr);
1528 if (t == FAILURE)
1529 break;
1530
1531 t = gfc_expand_constructor (e);
1532 if (t == FAILURE)
1533 break;
1534
1535 t = gfc_check_constructor_type (e);
1536 break;
1537
1538 default:
1539 gfc_internal_error ("check_init_expr(): Unknown expression type");
1540 }
1541
1542 return t;
1543 }
1544
1545
1546 /* Match an initialization expression. We work by first matching an
1547 expression, then reducing it to a constant. */
1548
1549 match
1550 gfc_match_init_expr (gfc_expr ** result)
1551 {
1552 gfc_expr *expr;
1553 match m;
1554 try t;
1555
1556 m = gfc_match_expr (&expr);
1557 if (m != MATCH_YES)
1558 return m;
1559
1560 gfc_init_expr = 1;
1561 t = gfc_resolve_expr (expr);
1562 if (t == SUCCESS)
1563 t = check_init_expr (expr);
1564 gfc_init_expr = 0;
1565
1566 if (t == FAILURE)
1567 {
1568 gfc_free_expr (expr);
1569 return MATCH_ERROR;
1570 }
1571
1572 if (expr->expr_type == EXPR_ARRAY
1573 && (gfc_check_constructor_type (expr) == FAILURE
1574 || gfc_expand_constructor (expr) == FAILURE))
1575 {
1576 gfc_free_expr (expr);
1577 return MATCH_ERROR;
1578 }
1579
1580 /* Not all inquiry functions are simplified to constant expressions
1581 so it is necessary to call check_inquiry again. */
1582 if (!gfc_is_constant_expr (expr)
1583 && check_inquiry (expr, 1) == FAILURE)
1584 {
1585 gfc_error ("Initialization expression didn't reduce %C");
1586 return MATCH_ERROR;
1587 }
1588
1589 *result = expr;
1590
1591 return MATCH_YES;
1592 }
1593
1594
1595
1596 static try check_restricted (gfc_expr *);
1597
1598 /* Given an actual argument list, test to see that each argument is a
1599 restricted expression and optionally if the expression type is
1600 integer or character. */
1601
1602 static try
1603 restricted_args (gfc_actual_arglist * a)
1604 {
1605 for (; a; a = a->next)
1606 {
1607 if (check_restricted (a->expr) == FAILURE)
1608 return FAILURE;
1609 }
1610
1611 return SUCCESS;
1612 }
1613
1614
1615 /************* Restricted/specification expressions *************/
1616
1617
1618 /* Make sure a non-intrinsic function is a specification function. */
1619
1620 static try
1621 external_spec_function (gfc_expr * e)
1622 {
1623 gfc_symbol *f;
1624
1625 f = e->value.function.esym;
1626
1627 if (f->attr.proc == PROC_ST_FUNCTION)
1628 {
1629 gfc_error ("Specification function '%s' at %L cannot be a statement "
1630 "function", f->name, &e->where);
1631 return FAILURE;
1632 }
1633
1634 if (f->attr.proc == PROC_INTERNAL)
1635 {
1636 gfc_error ("Specification function '%s' at %L cannot be an internal "
1637 "function", f->name, &e->where);
1638 return FAILURE;
1639 }
1640
1641 if (!f->attr.pure && !f->attr.elemental)
1642 {
1643 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
1644 &e->where);
1645 return FAILURE;
1646 }
1647
1648 if (f->attr.recursive)
1649 {
1650 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1651 f->name, &e->where);
1652 return FAILURE;
1653 }
1654
1655 return restricted_args (e->value.function.actual);
1656 }
1657
1658
1659 /* Check to see that a function reference to an intrinsic is a
1660 restricted expression. */
1661
1662 static try
1663 restricted_intrinsic (gfc_expr * e)
1664 {
1665 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
1666 if (check_inquiry (e, 0) == SUCCESS)
1667 return SUCCESS;
1668
1669 return restricted_args (e->value.function.actual);
1670 }
1671
1672
1673 /* Verify that an expression is a restricted expression. Like its
1674 cousin check_init_expr(), an error message is generated if we
1675 return FAILURE. */
1676
1677 static try
1678 check_restricted (gfc_expr * e)
1679 {
1680 gfc_symbol *sym;
1681 try t;
1682
1683 if (e == NULL)
1684 return SUCCESS;
1685
1686 switch (e->expr_type)
1687 {
1688 case EXPR_OP:
1689 t = check_intrinsic_op (e, check_restricted);
1690 if (t == SUCCESS)
1691 t = gfc_simplify_expr (e, 0);
1692
1693 break;
1694
1695 case EXPR_FUNCTION:
1696 t = e->value.function.esym ?
1697 external_spec_function (e) : restricted_intrinsic (e);
1698
1699 break;
1700
1701 case EXPR_VARIABLE:
1702 sym = e->symtree->n.sym;
1703 t = FAILURE;
1704
1705 if (sym->attr.optional)
1706 {
1707 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1708 sym->name, &e->where);
1709 break;
1710 }
1711
1712 if (sym->attr.intent == INTENT_OUT)
1713 {
1714 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1715 sym->name, &e->where);
1716 break;
1717 }
1718
1719 /* gfc_is_formal_arg broadcasts that a formal argument list is being processed
1720 in resolve.c(resolve_formal_arglist). This is done so that host associated
1721 dummy array indices are accepted (PR23446). */
1722 if (sym->attr.in_common
1723 || sym->attr.use_assoc
1724 || sym->attr.dummy
1725 || sym->ns != gfc_current_ns
1726 || (sym->ns->proc_name != NULL
1727 && sym->ns->proc_name->attr.flavor == FL_MODULE)
1728 || gfc_is_formal_arg ())
1729 {
1730 t = SUCCESS;
1731 break;
1732 }
1733
1734 gfc_error ("Variable '%s' cannot appear in the expression at %L",
1735 sym->name, &e->where);
1736
1737 break;
1738
1739 case EXPR_NULL:
1740 case EXPR_CONSTANT:
1741 t = SUCCESS;
1742 break;
1743
1744 case EXPR_SUBSTRING:
1745 t = gfc_specification_expr (e->ref->u.ss.start);
1746 if (t == FAILURE)
1747 break;
1748
1749 t = gfc_specification_expr (e->ref->u.ss.end);
1750 if (t == SUCCESS)
1751 t = gfc_simplify_expr (e, 0);
1752
1753 break;
1754
1755 case EXPR_STRUCTURE:
1756 t = gfc_check_constructor (e, check_restricted);
1757 break;
1758
1759 case EXPR_ARRAY:
1760 t = gfc_check_constructor (e, check_restricted);
1761 break;
1762
1763 default:
1764 gfc_internal_error ("check_restricted(): Unknown expression type");
1765 }
1766
1767 return t;
1768 }
1769
1770
1771 /* Check to see that an expression is a specification expression. If
1772 we return FAILURE, an error has been generated. */
1773
1774 try
1775 gfc_specification_expr (gfc_expr * e)
1776 {
1777 if (e == NULL)
1778 return SUCCESS;
1779
1780 if (e->ts.type != BT_INTEGER)
1781 {
1782 gfc_error ("Expression at %L must be of INTEGER type", &e->where);
1783 return FAILURE;
1784 }
1785
1786 if (e->rank != 0)
1787 {
1788 gfc_error ("Expression at %L must be scalar", &e->where);
1789 return FAILURE;
1790 }
1791
1792 if (gfc_simplify_expr (e, 0) == FAILURE)
1793 return FAILURE;
1794
1795 return check_restricted (e);
1796 }
1797
1798
1799 /************** Expression conformance checks. *************/
1800
1801 /* Given two expressions, make sure that the arrays are conformable. */
1802
1803 try
1804 gfc_check_conformance (const char *optype_msgid,
1805 gfc_expr * op1, gfc_expr * op2)
1806 {
1807 int op1_flag, op2_flag, d;
1808 mpz_t op1_size, op2_size;
1809 try t;
1810
1811 if (op1->rank == 0 || op2->rank == 0)
1812 return SUCCESS;
1813
1814 if (op1->rank != op2->rank)
1815 {
1816 gfc_error ("Incompatible ranks in %s at %L", _(optype_msgid),
1817 &op1->where);
1818 return FAILURE;
1819 }
1820
1821 t = SUCCESS;
1822
1823 for (d = 0; d < op1->rank; d++)
1824 {
1825 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
1826 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
1827
1828 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
1829 {
1830 gfc_error ("different shape for %s at %L on dimension %d (%d/%d)",
1831 _(optype_msgid), &op1->where, d + 1,
1832 (int) mpz_get_si (op1_size),
1833 (int) mpz_get_si (op2_size));
1834
1835 t = FAILURE;
1836 }
1837
1838 if (op1_flag)
1839 mpz_clear (op1_size);
1840 if (op2_flag)
1841 mpz_clear (op2_size);
1842
1843 if (t == FAILURE)
1844 return FAILURE;
1845 }
1846
1847 return SUCCESS;
1848 }
1849
1850
1851 /* Given an assignable expression and an arbitrary expression, make
1852 sure that the assignment can take place. */
1853
1854 try
1855 gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform)
1856 {
1857 gfc_symbol *sym;
1858
1859 sym = lvalue->symtree->n.sym;
1860
1861 if (sym->attr.intent == INTENT_IN)
1862 {
1863 gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1864 sym->name, &lvalue->where);
1865 return FAILURE;
1866 }
1867
1868 /* 12.5.2.2, Note 12.26: The result variable is very similar to any other
1869 variable local to a function subprogram. Its existence begins when
1870 execution of the function is initiated and ends when execution of the
1871 function is terminated.....
1872 Therefore, the left hand side is no longer a varaiable, when it is:*/
1873 if (sym->attr.flavor == FL_PROCEDURE
1874 && sym->attr.proc != PROC_ST_FUNCTION
1875 && !sym->attr.external)
1876 {
1877 bool bad_proc;
1878 bad_proc = false;
1879
1880 /* (i) Use associated; */
1881 if (sym->attr.use_assoc)
1882 bad_proc = true;
1883
1884 /* (ii) The assignment is in the main program; or */
1885 if (gfc_current_ns->proc_name->attr.is_main_program)
1886 bad_proc = true;
1887
1888 /* (iii) A module or internal procedure.... */
1889 if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
1890 || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
1891 && gfc_current_ns->parent
1892 && (!(gfc_current_ns->parent->proc_name->attr.function
1893 || gfc_current_ns->parent->proc_name->attr.subroutine)
1894 || gfc_current_ns->parent->proc_name->attr.is_main_program))
1895 {
1896 /* .... that is not a function.... */
1897 if (!gfc_current_ns->proc_name->attr.function)
1898 bad_proc = true;
1899
1900 /* .... or is not an entry and has a different name. */
1901 if (!sym->attr.entry && sym->name != gfc_current_ns->proc_name->name)
1902 bad_proc = true;
1903 }
1904
1905 if (bad_proc)
1906 {
1907 gfc_error ("'%s' at %L is not a VALUE", sym->name, &lvalue->where);
1908 return FAILURE;
1909 }
1910 }
1911
1912 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
1913 {
1914 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
1915 lvalue->rank, rvalue->rank, &lvalue->where);
1916 return FAILURE;
1917 }
1918
1919 if (lvalue->ts.type == BT_UNKNOWN)
1920 {
1921 gfc_error ("Variable type is UNKNOWN in assignment at %L",
1922 &lvalue->where);
1923 return FAILURE;
1924 }
1925
1926 if (rvalue->expr_type == EXPR_NULL)
1927 {
1928 gfc_error ("NULL appears on right-hand side in assignment at %L",
1929 &rvalue->where);
1930 return FAILURE;
1931 }
1932
1933 if (sym->attr.cray_pointee
1934 && lvalue->ref != NULL
1935 && lvalue->ref->u.ar.type == AR_FULL
1936 && lvalue->ref->u.ar.as->cp_was_assumed)
1937 {
1938 gfc_error ("Vector assignment to assumed-size Cray Pointee at %L"
1939 " is illegal.", &lvalue->where);
1940 return FAILURE;
1941 }
1942
1943 /* This is possibly a typo: x = f() instead of x => f() */
1944 if (gfc_option.warn_surprising
1945 && rvalue->expr_type == EXPR_FUNCTION
1946 && rvalue->symtree->n.sym->attr.pointer)
1947 gfc_warning ("POINTER valued function appears on right-hand side of "
1948 "assignment at %L", &rvalue->where);
1949
1950 /* Check size of array assignments. */
1951 if (lvalue->rank != 0 && rvalue->rank != 0
1952 && gfc_check_conformance ("Array assignment", lvalue, rvalue) != SUCCESS)
1953 return FAILURE;
1954
1955 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
1956 return SUCCESS;
1957
1958 if (!conform)
1959 {
1960 /* Numeric can be converted to any other numeric. And Hollerith can be
1961 converted to any other type. */
1962 if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
1963 || rvalue->ts.type == BT_HOLLERITH)
1964 return SUCCESS;
1965
1966 if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
1967 return SUCCESS;
1968
1969 gfc_error ("Incompatible types in assignment at %L, %s to %s",
1970 &rvalue->where, gfc_typename (&rvalue->ts),
1971 gfc_typename (&lvalue->ts));
1972
1973 return FAILURE;
1974 }
1975
1976 return gfc_convert_type (rvalue, &lvalue->ts, 1);
1977 }
1978
1979
1980 /* Check that a pointer assignment is OK. We first check lvalue, and
1981 we only check rvalue if it's not an assignment to NULL() or a
1982 NULLIFY statement. */
1983
1984 try
1985 gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue)
1986 {
1987 symbol_attribute attr;
1988 int is_pure;
1989
1990 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
1991 {
1992 gfc_error ("Pointer assignment target is not a POINTER at %L",
1993 &lvalue->where);
1994 return FAILURE;
1995 }
1996
1997 if (lvalue->symtree->n.sym->attr.flavor == FL_PROCEDURE
1998 && lvalue->symtree->n.sym->attr.use_assoc)
1999 {
2000 gfc_error ("'%s' in the pointer assignment at %L cannot be an "
2001 "l-value since it is a procedure",
2002 lvalue->symtree->n.sym->name, &lvalue->where);
2003 return FAILURE;
2004 }
2005
2006 attr = gfc_variable_attr (lvalue, NULL);
2007 if (!attr.pointer)
2008 {
2009 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
2010 return FAILURE;
2011 }
2012
2013 is_pure = gfc_pure (NULL);
2014
2015 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym))
2016 {
2017 gfc_error ("Bad pointer object in PURE procedure at %L",
2018 &lvalue->where);
2019 return FAILURE;
2020 }
2021
2022 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
2023 kind, etc for lvalue and rvalue must match, and rvalue must be a
2024 pure variable if we're in a pure function. */
2025 if (rvalue->expr_type == EXPR_NULL && rvalue->ts.type == BT_UNKNOWN)
2026 return SUCCESS;
2027
2028 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
2029 {
2030 gfc_error ("Different types in pointer assignment at %L",
2031 &lvalue->where);
2032 return FAILURE;
2033 }
2034
2035 if (lvalue->ts.kind != rvalue->ts.kind)
2036 {
2037 gfc_error ("Different kind type parameters in pointer "
2038 "assignment at %L", &lvalue->where);
2039 return FAILURE;
2040 }
2041
2042 if (lvalue->rank != rvalue->rank)
2043 {
2044 gfc_error ("Different ranks in pointer assignment at %L",
2045 &lvalue->where);
2046 return FAILURE;
2047 }
2048
2049 /* Now punt if we are dealing with a NULLIFY(X) or X = NULL(X). */
2050 if (rvalue->expr_type == EXPR_NULL)
2051 return SUCCESS;
2052
2053 if (lvalue->ts.type == BT_CHARACTER
2054 && lvalue->ts.cl->length && rvalue->ts.cl->length
2055 && abs (gfc_dep_compare_expr (lvalue->ts.cl->length,
2056 rvalue->ts.cl->length)) == 1)
2057 {
2058 gfc_error ("Different character lengths in pointer "
2059 "assignment at %L", &lvalue->where);
2060 return FAILURE;
2061 }
2062
2063 attr = gfc_expr_attr (rvalue);
2064 if (!attr.target && !attr.pointer)
2065 {
2066 gfc_error ("Pointer assignment target is neither TARGET "
2067 "nor POINTER at %L", &rvalue->where);
2068 return FAILURE;
2069 }
2070
2071 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
2072 {
2073 gfc_error ("Bad target in pointer assignment in PURE "
2074 "procedure at %L", &rvalue->where);
2075 }
2076
2077 if (gfc_has_vector_index (rvalue))
2078 {
2079 gfc_error ("Pointer assignment with vector subscript "
2080 "on rhs at %L", &rvalue->where);
2081 return FAILURE;
2082 }
2083
2084 return SUCCESS;
2085 }
2086
2087
2088 /* Relative of gfc_check_assign() except that the lvalue is a single
2089 symbol. Used for initialization assignments. */
2090
2091 try
2092 gfc_check_assign_symbol (gfc_symbol * sym, gfc_expr * rvalue)
2093 {
2094 gfc_expr lvalue;
2095 try r;
2096
2097 memset (&lvalue, '\0', sizeof (gfc_expr));
2098
2099 lvalue.expr_type = EXPR_VARIABLE;
2100 lvalue.ts = sym->ts;
2101 if (sym->as)
2102 lvalue.rank = sym->as->rank;
2103 lvalue.symtree = (gfc_symtree *)gfc_getmem (sizeof (gfc_symtree));
2104 lvalue.symtree->n.sym = sym;
2105 lvalue.where = sym->declared_at;
2106
2107 if (sym->attr.pointer)
2108 r = gfc_check_pointer_assign (&lvalue, rvalue);
2109 else
2110 r = gfc_check_assign (&lvalue, rvalue, 1);
2111
2112 gfc_free (lvalue.symtree);
2113
2114 return r;
2115 }
2116
2117
2118 /* Get an expression for a default initializer. */
2119
2120 gfc_expr *
2121 gfc_default_initializer (gfc_typespec *ts)
2122 {
2123 gfc_constructor *tail;
2124 gfc_expr *init;
2125 gfc_component *c;
2126
2127 init = NULL;
2128
2129 /* See if we have a default initializer. */
2130 for (c = ts->derived->components; c; c = c->next)
2131 {
2132 if (c->initializer && init == NULL)
2133 init = gfc_get_expr ();
2134 }
2135
2136 if (init == NULL)
2137 return NULL;
2138
2139 /* Build the constructor. */
2140 init->expr_type = EXPR_STRUCTURE;
2141 init->ts = *ts;
2142 init->where = ts->derived->declared_at;
2143 tail = NULL;
2144 for (c = ts->derived->components; c; c = c->next)
2145 {
2146 if (tail == NULL)
2147 init->value.constructor = tail = gfc_get_constructor ();
2148 else
2149 {
2150 tail->next = gfc_get_constructor ();
2151 tail = tail->next;
2152 }
2153
2154 if (c->initializer)
2155 tail->expr = gfc_copy_expr (c->initializer);
2156 }
2157 return init;
2158 }
2159
2160
2161 /* Given a symbol, create an expression node with that symbol as a
2162 variable. If the symbol is array valued, setup a reference of the
2163 whole array. */
2164
2165 gfc_expr *
2166 gfc_get_variable_expr (gfc_symtree * var)
2167 {
2168 gfc_expr *e;
2169
2170 e = gfc_get_expr ();
2171 e->expr_type = EXPR_VARIABLE;
2172 e->symtree = var;
2173 e->ts = var->n.sym->ts;
2174
2175 if (var->n.sym->as != NULL)
2176 {
2177 e->rank = var->n.sym->as->rank;
2178 e->ref = gfc_get_ref ();
2179 e->ref->type = REF_ARRAY;
2180 e->ref->u.ar.type = AR_FULL;
2181 }
2182
2183 return e;
2184 }
2185
2186
2187 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */
2188
2189 void
2190 gfc_expr_set_symbols_referenced (gfc_expr * expr)
2191 {
2192 gfc_actual_arglist *arg;
2193 gfc_constructor *c;
2194 gfc_ref *ref;
2195 int i;
2196
2197 if (!expr) return;
2198
2199 switch (expr->expr_type)
2200 {
2201 case EXPR_OP:
2202 gfc_expr_set_symbols_referenced (expr->value.op.op1);
2203 gfc_expr_set_symbols_referenced (expr->value.op.op2);
2204 break;
2205
2206 case EXPR_FUNCTION:
2207 for (arg = expr->value.function.actual; arg; arg = arg->next)
2208 gfc_expr_set_symbols_referenced (arg->expr);
2209 break;
2210
2211 case EXPR_VARIABLE:
2212 gfc_set_sym_referenced (expr->symtree->n.sym);
2213 break;
2214
2215 case EXPR_CONSTANT:
2216 case EXPR_NULL:
2217 case EXPR_SUBSTRING:
2218 break;
2219
2220 case EXPR_STRUCTURE:
2221 case EXPR_ARRAY:
2222 for (c = expr->value.constructor; c; c = c->next)
2223 gfc_expr_set_symbols_referenced (c->expr);
2224 break;
2225
2226 default:
2227 gcc_unreachable ();
2228 break;
2229 }
2230
2231 for (ref = expr->ref; ref; ref = ref->next)
2232 switch (ref->type)
2233 {
2234 case REF_ARRAY:
2235 for (i = 0; i < ref->u.ar.dimen; i++)
2236 {
2237 gfc_expr_set_symbols_referenced (ref->u.ar.start[i]);
2238 gfc_expr_set_symbols_referenced (ref->u.ar.end[i]);
2239 gfc_expr_set_symbols_referenced (ref->u.ar.stride[i]);
2240 }
2241 break;
2242
2243 case REF_COMPONENT:
2244 break;
2245
2246 case REF_SUBSTRING:
2247 gfc_expr_set_symbols_referenced (ref->u.ss.start);
2248 gfc_expr_set_symbols_referenced (ref->u.ss.end);
2249 break;
2250
2251 default:
2252 gcc_unreachable ();
2253 break;
2254 }
2255 }