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