toplev.c (floor_log2, exact_log2): Don't define if __cplusplus.
[official-gcc.git] / gcc / fortran / expr.c
blob0e699c26de7af2c580ad5dc9afa4bd8fd6f4822b
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
6 This file is part of GCC.
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.
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.
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. */
23 #include "config.h"
24 #include "system.h"
25 #include "gfortran.h"
26 #include "arith.h"
27 #include "match.h"
29 /* Get a new expr node. */
31 gfc_expr *
32 gfc_get_expr (void)
34 gfc_expr *e;
36 e = gfc_getmem (sizeof (gfc_expr));
38 gfc_clear_ts (&e->ts);
39 e->shape = NULL;
40 e->ref = NULL;
41 e->symtree = NULL;
43 return e;
47 /* Free an argument list and everything below it. */
49 void
50 gfc_free_actual_arglist (gfc_actual_arglist * a1)
52 gfc_actual_arglist *a2;
54 while (a1)
56 a2 = a1->next;
57 gfc_free_expr (a1->expr);
58 gfc_free (a1);
59 a1 = a2;
64 /* Copy an arglist structure and all of the arguments. */
66 gfc_actual_arglist *
67 gfc_copy_actual_arglist (gfc_actual_arglist * p)
69 gfc_actual_arglist *head, *tail, *new;
71 head = tail = NULL;
73 for (; p; p = p->next)
75 new = gfc_get_actual_arglist ();
76 *new = *p;
78 new->expr = gfc_copy_expr (p->expr);
79 new->next = NULL;
81 if (head == NULL)
82 head = new;
83 else
84 tail->next = new;
86 tail = new;
89 return head;
93 /* Free a list of reference structures. */
95 void
96 gfc_free_ref_list (gfc_ref * p)
98 gfc_ref *q;
99 int i;
101 for (; p; p = q)
103 q = p->next;
105 switch (p->type)
107 case REF_ARRAY:
108 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
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]);
115 break;
117 case REF_SUBSTRING:
118 gfc_free_expr (p->u.ss.start);
119 gfc_free_expr (p->u.ss.end);
120 break;
122 case REF_COMPONENT:
123 break;
126 gfc_free (p);
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. */
136 static void
137 free_expr0 (gfc_expr * e)
139 int n;
141 switch (e->expr_type)
143 case EXPR_CONSTANT:
144 if (e->from_H)
146 gfc_free (e->value.character.string);
147 break;
150 switch (e->ts.type)
152 case BT_INTEGER:
153 mpz_clear (e->value.integer);
154 break;
156 case BT_REAL:
157 mpfr_clear (e->value.real);
158 break;
160 case BT_CHARACTER:
161 case BT_HOLLERITH:
162 gfc_free (e->value.character.string);
163 break;
165 case BT_COMPLEX:
166 mpfr_clear (e->value.complex.r);
167 mpfr_clear (e->value.complex.i);
168 break;
170 default:
171 break;
174 break;
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;
183 case EXPR_FUNCTION:
184 gfc_free_actual_arglist (e->value.function.actual);
185 break;
187 case EXPR_VARIABLE:
188 break;
190 case EXPR_ARRAY:
191 case EXPR_STRUCTURE:
192 gfc_free_constructor (e->value.constructor);
193 break;
195 case EXPR_SUBSTRING:
196 gfc_free (e->value.character.string);
197 break;
199 case EXPR_NULL:
200 break;
202 default:
203 gfc_internal_error ("free_expr0(): Bad expr type");
206 /* Free a shape array. */
207 if (e->shape != NULL)
209 for (n = 0; n < e->rank; n++)
210 mpz_clear (e->shape[n]);
212 gfc_free (e->shape);
215 gfc_free_ref_list (e->ref);
217 memset (e, '\0', sizeof (gfc_expr));
221 /* Free an expression node and everything beneath it. */
223 void
224 gfc_free_expr (gfc_expr * e)
227 if (e == NULL)
228 return;
230 free_expr0 (e);
231 gfc_free (e);
235 /* Graft the *src expression onto the *dest subexpression. */
237 void
238 gfc_replace_expr (gfc_expr * dest, gfc_expr * src)
241 free_expr0 (dest);
242 *dest = *src;
244 gfc_free (src);
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. */
253 const char *
254 gfc_extract_int (gfc_expr * expr, int *result)
257 if (expr->expr_type != EXPR_CONSTANT)
258 return _("Constant expression required at %C");
260 if (expr->ts.type != BT_INTEGER)
261 return _("Integer expression required at %C");
263 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
264 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
266 return _("Integer value too large in expression at %C");
269 *result = (int) mpz_get_si (expr->value.integer);
271 return NULL;
275 /* Recursively copy a list of reference structures. */
277 static gfc_ref *
278 copy_ref (gfc_ref * src)
280 gfc_array_ref *ar;
281 gfc_ref *dest;
283 if (src == NULL)
284 return NULL;
286 dest = gfc_get_ref ();
287 dest->type = src->type;
289 switch (src->type)
291 case REF_ARRAY:
292 ar = gfc_copy_array_ref (&src->u.ar);
293 dest->u.ar = *ar;
294 gfc_free (ar);
295 break;
297 case REF_COMPONENT:
298 dest->u.c = src->u.c;
299 break;
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;
308 dest->next = copy_ref (src->next);
310 return dest;
314 /* Detect whether an expression has any vector index array
315 references. */
318 gfc_has_vector_index (gfc_expr *e)
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;
331 /* Copy a shape array. */
333 mpz_t *
334 gfc_copy_shape (mpz_t * shape, int rank)
336 mpz_t *new_shape;
337 int n;
339 if (shape == NULL)
340 return NULL;
342 new_shape = gfc_get_shape (rank);
344 for (n = 0; n < rank; n++)
345 mpz_init_set (new_shape[n], shape[n]);
347 return new_shape;
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.
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}
360 If anything goes wrong -- N is not a constant, its value is out
361 of range -- or anything else, just returns NULL.
364 mpz_t *
365 gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim)
367 mpz_t *new_shape, *s;
368 int i, n;
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;
377 n = mpz_get_si (dim->value.integer);
378 n--; /* Convert to zero based index */
379 if (n < 0 || n >= rank)
380 return NULL;
382 s = new_shape = gfc_get_shape (rank-1);
384 for (i = 0; i < rank; i++)
386 if (i == n)
387 continue;
388 mpz_init_set (*s, shape[i]);
389 s++;
392 return new_shape;
395 /* Given an expression pointer, return a copy of the expression. This
396 subroutine is recursive. */
398 gfc_expr *
399 gfc_copy_expr (gfc_expr * p)
401 gfc_expr *q;
402 char *s;
404 if (p == NULL)
405 return NULL;
407 q = gfc_get_expr ();
408 *q = *p;
410 switch (q->expr_type)
412 case EXPR_SUBSTRING:
413 s = gfc_getmem (p->value.character.length + 1);
414 q->value.character.string = s;
416 memcpy (s, p->value.character.string, p->value.character.length + 1);
417 break;
419 case EXPR_CONSTANT:
420 if (p->from_H)
422 s = gfc_getmem (p->value.character.length + 1);
423 q->value.character.string = s;
425 memcpy (s, p->value.character.string,
426 p->value.character.length + 1);
427 break;
429 switch (q->ts.type)
431 case BT_INTEGER:
432 mpz_init_set (q->value.integer, p->value.integer);
433 break;
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;
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;
449 case BT_CHARACTER:
450 case BT_HOLLERITH:
451 s = gfc_getmem (p->value.character.length + 1);
452 q->value.character.string = s;
454 memcpy (s, p->value.character.string,
455 p->value.character.length + 1);
456 break;
458 case BT_LOGICAL:
459 case BT_DERIVED:
460 break; /* Already done */
462 case BT_PROCEDURE:
463 case BT_UNKNOWN:
464 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
465 /* Not reached */
468 break;
470 case EXPR_OP:
471 switch (q->value.op.operator)
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;
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;
485 break;
487 case EXPR_FUNCTION:
488 q->value.function.actual =
489 gfc_copy_actual_arglist (p->value.function.actual);
490 break;
492 case EXPR_STRUCTURE:
493 case EXPR_ARRAY:
494 q->value.constructor = gfc_copy_constructor (p->value.constructor);
495 break;
497 case EXPR_VARIABLE:
498 case EXPR_NULL:
499 break;
502 q->shape = gfc_copy_shape (p->shape, p->rank);
504 q->ref = copy_ref (p->ref);
506 return q;
510 /* Return the maximum kind of two expressions. In general, higher
511 kind numbers mean more precision for numeric types. */
514 gfc_kind_max (gfc_expr * e1, gfc_expr * e2)
517 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
521 /* Returns nonzero if the type is numeric, zero otherwise. */
523 static int
524 numeric_type (bt type)
527 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
531 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
534 gfc_numeric_ts (gfc_typespec * ts)
537 return numeric_type (ts->type);
541 /* Returns an expression node that is an integer constant. */
543 gfc_expr *
544 gfc_int_expr (int i)
546 gfc_expr *p;
548 p = gfc_get_expr ();
550 p->expr_type = EXPR_CONSTANT;
551 p->ts.type = BT_INTEGER;
552 p->ts.kind = gfc_default_integer_kind;
554 p->where = gfc_current_locus;
555 mpz_init_set_si (p->value.integer, i);
557 return p;
561 /* Returns an expression node that is a logical constant. */
563 gfc_expr *
564 gfc_logical_expr (int i, locus * where)
566 gfc_expr *p;
568 p = gfc_get_expr ();
570 p->expr_type = EXPR_CONSTANT;
571 p->ts.type = BT_LOGICAL;
572 p->ts.kind = gfc_default_logical_kind;
574 if (where == NULL)
575 where = &gfc_current_locus;
576 p->where = *where;
577 p->value.logical = i;
579 return p;
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. */
587 gfc_expr *
588 gfc_build_conversion (gfc_expr * e)
590 gfc_expr *p;
592 p = gfc_get_expr ();
593 p->expr_type = EXPR_FUNCTION;
594 p->symtree = NULL;
595 p->value.function.actual = NULL;
597 p->value.function.actual = gfc_get_actual_arglist ();
598 p->value.function.actual->expr = e;
600 return p;
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.
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. */
613 void
614 gfc_type_convert_binary (gfc_expr * e)
616 gfc_expr *op1, *op2;
618 op1 = e->value.op.op1;
619 op2 = e->value.op.op2;
621 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
623 gfc_clear_ts (&e->ts);
624 return;
627 /* Kind conversions of same type. */
628 if (op1->ts.type == op2->ts.type)
631 if (op1->ts.kind == op2->ts.kind)
633 /* No type conversions. */
634 e->ts = op1->ts;
635 goto done;
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);
643 e->ts = op1->ts;
644 goto done;
647 /* Integer combined with real or complex. */
648 if (op2->ts.type == BT_INTEGER)
650 e->ts = op1->ts;
652 /* Special case for ** operator. */
653 if (e->value.op.operator == INTRINSIC_POWER)
654 goto done;
656 gfc_convert_type (e->value.op.op2, &e->ts, 2);
657 goto done;
660 if (op1->ts.type == BT_INTEGER)
662 e->ts = op2->ts;
663 gfc_convert_type (e->value.op.op1, &e->ts, 2);
664 goto done;
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);
678 done:
679 return;
683 /* Function to determine if an expression is constant or not. This
684 function expects that the expression has already been simplified. */
687 gfc_is_constant_expr (gfc_expr * e)
689 gfc_constructor *c;
690 gfc_actual_arglist *arg;
691 int rv;
693 if (e == NULL)
694 return 1;
696 switch (e->expr_type)
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)));
703 break;
705 case EXPR_VARIABLE:
706 rv = 0;
707 break;
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)
714 for (arg = e->value.function.actual; arg; arg = arg->next)
716 if (!gfc_is_constant_expr (arg->expr))
717 break;
719 if (arg == NULL)
720 rv = 1;
722 break;
724 case EXPR_CONSTANT:
725 case EXPR_NULL:
726 rv = 1;
727 break;
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;
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;
740 if (c == NULL)
741 rv = 1;
742 break;
744 case EXPR_ARRAY:
745 rv = gfc_constant_ac (e);
746 break;
748 default:
749 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
752 return rv;
756 /* Try to collapse intrinsic expressions. */
758 static try
759 simplify_intrinsic_op (gfc_expr * p, int type)
761 gfc_expr *op1, *op2, *result;
763 if (p->value.op.operator == INTRINSIC_USER)
764 return SUCCESS;
766 op1 = p->value.op.op1;
767 op2 = p->value.op.op2;
769 if (gfc_simplify_expr (op1, type) == FAILURE)
770 return FAILURE;
771 if (gfc_simplify_expr (op2, type) == FAILURE)
772 return FAILURE;
774 if (!gfc_is_constant_expr (op1)
775 || (op2 != NULL && !gfc_is_constant_expr (op2)))
776 return SUCCESS;
778 /* Rip p apart */
779 p->value.op.op1 = NULL;
780 p->value.op.op2 = NULL;
782 switch (p->value.op.operator)
784 case INTRINSIC_UPLUS:
785 result = gfc_uplus (op1);
786 break;
788 case INTRINSIC_UMINUS:
789 result = gfc_uminus (op1);
790 break;
792 case INTRINSIC_PLUS:
793 result = gfc_add (op1, op2);
794 break;
796 case INTRINSIC_MINUS:
797 result = gfc_subtract (op1, op2);
798 break;
800 case INTRINSIC_TIMES:
801 result = gfc_multiply (op1, op2);
802 break;
804 case INTRINSIC_DIVIDE:
805 result = gfc_divide (op1, op2);
806 break;
808 case INTRINSIC_POWER:
809 result = gfc_power (op1, op2);
810 break;
812 case INTRINSIC_CONCAT:
813 result = gfc_concat (op1, op2);
814 break;
816 case INTRINSIC_EQ:
817 result = gfc_eq (op1, op2);
818 break;
820 case INTRINSIC_NE:
821 result = gfc_ne (op1, op2);
822 break;
824 case INTRINSIC_GT:
825 result = gfc_gt (op1, op2);
826 break;
828 case INTRINSIC_GE:
829 result = gfc_ge (op1, op2);
830 break;
832 case INTRINSIC_LT:
833 result = gfc_lt (op1, op2);
834 break;
836 case INTRINSIC_LE:
837 result = gfc_le (op1, op2);
838 break;
840 case INTRINSIC_NOT:
841 result = gfc_not (op1);
842 break;
844 case INTRINSIC_AND:
845 result = gfc_and (op1, op2);
846 break;
848 case INTRINSIC_OR:
849 result = gfc_or (op1, op2);
850 break;
852 case INTRINSIC_EQV:
853 result = gfc_eqv (op1, op2);
854 break;
856 case INTRINSIC_NEQV:
857 result = gfc_neqv (op1, op2);
858 break;
860 default:
861 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
864 if (result == NULL)
866 gfc_free_expr (op1);
867 gfc_free_expr (op2);
868 return FAILURE;
871 gfc_replace_expr (p, result);
873 return SUCCESS;
877 /* Subroutine to simplify constructor expressions. Mutually recursive
878 with gfc_simplify_expr(). */
880 static try
881 simplify_constructor (gfc_constructor * c, int type)
884 for (; c; c = c->next)
886 if (c->iterator
887 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
888 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
889 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
890 return FAILURE;
892 if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
893 return FAILURE;
896 return SUCCESS;
900 /* Pull a single array element out of an array constructor. */
902 static gfc_constructor *
903 find_array_element (gfc_constructor * cons, gfc_array_ref * ar)
905 unsigned long nelemen;
906 int i;
907 mpz_t delta;
908 mpz_t offset;
910 mpz_init_set_ui (offset, 0);
911 mpz_init (delta);
912 for (i = 0; i < ar->dimen; i++)
914 if (ar->start[i]->expr_type != EXPR_CONSTANT)
916 cons = NULL;
917 break;
919 mpz_sub (delta, ar->start[i]->value.integer,
920 ar->as->lower[i]->value.integer);
921 mpz_add (offset, offset, delta);
924 if (cons)
926 if (mpz_fits_ulong_p (offset))
928 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
930 if (cons->iterator)
932 cons = NULL;
933 break;
935 cons = cons->next;
938 else
939 cons = NULL;
942 mpz_clear (delta);
943 mpz_clear (offset);
945 return cons;
949 /* Find a component of a structure constructor. */
951 static gfc_constructor *
952 find_component_ref (gfc_constructor * cons, gfc_ref * ref)
954 gfc_component *comp;
955 gfc_component *pick;
957 comp = ref->u.c.sym->components;
958 pick = ref->u.c.component;
959 while (comp != pick)
961 comp = comp->next;
962 cons = cons->next;
965 return cons;
969 /* Replace an expression with the contents of a constructor, removing
970 the subobject reference in the process. */
972 static void
973 remove_subobject_ref (gfc_expr * p, gfc_constructor * cons)
975 gfc_expr *e;
977 e = cons->expr;
978 cons->expr = NULL;
979 e->ref = p->ref->next;
980 p->ref->next = NULL;
981 gfc_replace_expr (p, e);
985 /* Simplify a subobject reference of a constructor. This occurs when
986 parameter variable values are substituted. */
988 static try
989 simplify_const_ref (gfc_expr * p)
991 gfc_constructor *cons;
993 while (p->ref)
995 switch (p->ref->type)
997 case REF_ARRAY:
998 switch (p->ref->u.ar.type)
1000 case AR_ELEMENT:
1001 cons = find_array_element (p->value.constructor, &p->ref->u.ar);
1002 if (!cons)
1003 return SUCCESS;
1004 remove_subobject_ref (p, cons);
1005 break;
1007 case AR_FULL:
1008 if (p->ref->next != NULL)
1010 /* TODO: Simplify array subobject references. */
1011 return SUCCESS;
1013 gfc_free_ref_list (p->ref);
1014 p->ref = NULL;
1015 break;
1017 default:
1018 /* TODO: Simplify array subsections. */
1019 return SUCCESS;
1022 break;
1024 case REF_COMPONENT:
1025 cons = find_component_ref (p->value.constructor, p->ref);
1026 remove_subobject_ref (p, cons);
1027 break;
1029 case REF_SUBSTRING:
1030 /* TODO: Constant substrings. */
1031 return SUCCESS;
1035 return SUCCESS;
1039 /* Simplify a chain of references. */
1041 static try
1042 simplify_ref_chain (gfc_ref * ref, int type)
1044 int n;
1046 for (; ref; ref = ref->next)
1048 switch (ref->type)
1050 case REF_ARRAY:
1051 for (n = 0; n < ref->u.ar.dimen; n++)
1053 if (gfc_simplify_expr (ref->u.ar.start[n], type)
1054 == FAILURE)
1055 return FAILURE;
1056 if (gfc_simplify_expr (ref->u.ar.end[n], type)
1057 == FAILURE)
1058 return FAILURE;
1059 if (gfc_simplify_expr (ref->u.ar.stride[n], type)
1060 == FAILURE)
1061 return FAILURE;
1063 break;
1065 case REF_SUBSTRING:
1066 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1067 return FAILURE;
1068 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1069 return FAILURE;
1070 break;
1072 default:
1073 break;
1076 return SUCCESS;
1080 /* Try to substitute the value of a parameter variable. */
1081 static try
1082 simplify_parameter_variable (gfc_expr * p, int type)
1084 gfc_expr *e;
1085 try t;
1087 e = gfc_copy_expr (p->symtree->n.sym->value);
1088 /* Do not copy subobject refs for constant. */
1089 if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
1090 e->ref = copy_ref (p->ref);
1091 t = gfc_simplify_expr (e, type);
1093 /* Only use the simplification if it eliminated all subobject
1094 references. */
1095 if (t == SUCCESS && ! e->ref)
1096 gfc_replace_expr (p, e);
1097 else
1098 gfc_free_expr (e);
1100 return t;
1103 /* Given an expression, simplify it by collapsing constant
1104 expressions. Most simplification takes place when the expression
1105 tree is being constructed. If an intrinsic function is simplified
1106 at some point, we get called again to collapse the result against
1107 other constants.
1109 We work by recursively simplifying expression nodes, simplifying
1110 intrinsic functions where possible, which can lead to further
1111 constant collapsing. If an operator has constant operand(s), we
1112 rip the expression apart, and rebuild it, hoping that it becomes
1113 something simpler.
1115 The expression type is defined for:
1116 0 Basic expression parsing
1117 1 Simplifying array constructors -- will substitute
1118 iterator values.
1119 Returns FAILURE on error, SUCCESS otherwise.
1120 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1123 gfc_simplify_expr (gfc_expr * p, int type)
1125 gfc_actual_arglist *ap;
1127 if (p == NULL)
1128 return SUCCESS;
1130 switch (p->expr_type)
1132 case EXPR_CONSTANT:
1133 case EXPR_NULL:
1134 break;
1136 case EXPR_FUNCTION:
1137 for (ap = p->value.function.actual; ap; ap = ap->next)
1138 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1139 return FAILURE;
1141 if (p->value.function.isym != NULL
1142 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1143 return FAILURE;
1145 break;
1147 case EXPR_SUBSTRING:
1148 if (simplify_ref_chain (p->ref, type) == FAILURE)
1149 return FAILURE;
1151 if (gfc_is_constant_expr (p))
1153 char *s;
1154 int start, end;
1156 gfc_extract_int (p->ref->u.ss.start, &start);
1157 start--; /* Convert from one-based to zero-based. */
1158 gfc_extract_int (p->ref->u.ss.end, &end);
1159 s = gfc_getmem (end - start + 1);
1160 memcpy (s, p->value.character.string + start, end - start);
1161 s[end] = '\0'; /* TODO: C-style string for debugging. */
1162 gfc_free (p->value.character.string);
1163 p->value.character.string = s;
1164 p->value.character.length = end - start;
1165 p->ts.cl = gfc_get_charlen ();
1166 p->ts.cl->next = gfc_current_ns->cl_list;
1167 gfc_current_ns->cl_list = p->ts.cl;
1168 p->ts.cl->length = gfc_int_expr (p->value.character.length);
1169 gfc_free_ref_list (p->ref);
1170 p->ref = NULL;
1171 p->expr_type = EXPR_CONSTANT;
1173 break;
1175 case EXPR_OP:
1176 if (simplify_intrinsic_op (p, type) == FAILURE)
1177 return FAILURE;
1178 break;
1180 case EXPR_VARIABLE:
1181 /* Only substitute array parameter variables if we are in an
1182 initialization expression, or we want a subsection. */
1183 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1184 && (gfc_init_expr || p->ref
1185 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1187 if (simplify_parameter_variable (p, type) == FAILURE)
1188 return FAILURE;
1189 break;
1192 if (type == 1)
1194 gfc_simplify_iterator_var (p);
1197 /* Simplify subcomponent references. */
1198 if (simplify_ref_chain (p->ref, type) == FAILURE)
1199 return FAILURE;
1201 break;
1203 case EXPR_STRUCTURE:
1204 case EXPR_ARRAY:
1205 if (simplify_ref_chain (p->ref, type) == FAILURE)
1206 return FAILURE;
1208 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1209 return FAILURE;
1211 if (p->expr_type == EXPR_ARRAY)
1212 gfc_expand_constructor (p);
1214 if (simplify_const_ref (p) == FAILURE)
1215 return FAILURE;
1217 break;
1220 return SUCCESS;
1224 /* Returns the type of an expression with the exception that iterator
1225 variables are automatically integers no matter what else they may
1226 be declared as. */
1228 static bt
1229 et0 (gfc_expr * e)
1232 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1233 return BT_INTEGER;
1235 return e->ts.type;
1239 /* Check an intrinsic arithmetic operation to see if it is consistent
1240 with some type of expression. */
1242 static try check_init_expr (gfc_expr *);
1244 static try
1245 check_intrinsic_op (gfc_expr * e, try (*check_function) (gfc_expr *))
1247 gfc_expr *op1 = e->value.op.op1;
1248 gfc_expr *op2 = e->value.op.op2;
1250 if ((*check_function) (op1) == FAILURE)
1251 return FAILURE;
1253 switch (e->value.op.operator)
1255 case INTRINSIC_UPLUS:
1256 case INTRINSIC_UMINUS:
1257 if (!numeric_type (et0 (op1)))
1258 goto not_numeric;
1259 break;
1261 case INTRINSIC_EQ:
1262 case INTRINSIC_NE:
1263 case INTRINSIC_GT:
1264 case INTRINSIC_GE:
1265 case INTRINSIC_LT:
1266 case INTRINSIC_LE:
1267 if ((*check_function) (op2) == FAILURE)
1268 return FAILURE;
1270 if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
1271 && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
1273 gfc_error ("Numeric or CHARACTER operands are required in "
1274 "expression at %L", &e->where);
1275 return FAILURE;
1277 break;
1279 case INTRINSIC_PLUS:
1280 case INTRINSIC_MINUS:
1281 case INTRINSIC_TIMES:
1282 case INTRINSIC_DIVIDE:
1283 case INTRINSIC_POWER:
1284 if ((*check_function) (op2) == FAILURE)
1285 return FAILURE;
1287 if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
1288 goto not_numeric;
1290 if (e->value.op.operator == INTRINSIC_POWER
1291 && check_function == check_init_expr && et0 (op2) != BT_INTEGER)
1293 gfc_error ("Exponent at %L must be INTEGER for an initialization "
1294 "expression", &op2->where);
1295 return FAILURE;
1298 break;
1300 case INTRINSIC_CONCAT:
1301 if ((*check_function) (op2) == FAILURE)
1302 return FAILURE;
1304 if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
1306 gfc_error ("Concatenation operator in expression at %L "
1307 "must have two CHARACTER operands", &op1->where);
1308 return FAILURE;
1311 if (op1->ts.kind != op2->ts.kind)
1313 gfc_error ("Concat operator at %L must concatenate strings of the "
1314 "same kind", &e->where);
1315 return FAILURE;
1318 break;
1320 case INTRINSIC_NOT:
1321 if (et0 (op1) != BT_LOGICAL)
1323 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1324 "operand", &op1->where);
1325 return FAILURE;
1328 break;
1330 case INTRINSIC_AND:
1331 case INTRINSIC_OR:
1332 case INTRINSIC_EQV:
1333 case INTRINSIC_NEQV:
1334 if ((*check_function) (op2) == FAILURE)
1335 return FAILURE;
1337 if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
1339 gfc_error ("LOGICAL operands are required in expression at %L",
1340 &e->where);
1341 return FAILURE;
1344 break;
1346 default:
1347 gfc_error ("Only intrinsic operators can be used in expression at %L",
1348 &e->where);
1349 return FAILURE;
1352 return SUCCESS;
1354 not_numeric:
1355 gfc_error ("Numeric operands are required in expression at %L", &e->where);
1357 return FAILURE;
1362 /* Certain inquiry functions are specifically allowed to have variable
1363 arguments, which is an exception to the normal requirement that an
1364 initialization function have initialization arguments. We head off
1365 this problem here. */
1367 static try
1368 check_inquiry (gfc_expr * e, int not_restricted)
1370 const char *name;
1372 /* FIXME: This should be moved into the intrinsic definitions,
1373 to eliminate this ugly hack. */
1374 static const char * const inquiry_function[] = {
1375 "digits", "epsilon", "huge", "kind", "len", "maxexponent", "minexponent",
1376 "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1377 "lbound", "ubound", NULL
1380 int i;
1382 /* An undeclared parameter will get us here (PR25018). */
1383 if (e->symtree == NULL)
1384 return FAILURE;
1386 name = e->symtree->n.sym->name;
1388 for (i = 0; inquiry_function[i]; i++)
1389 if (strcmp (inquiry_function[i], name) == 0)
1390 break;
1392 if (inquiry_function[i] == NULL)
1393 return FAILURE;
1395 e = e->value.function.actual->expr;
1397 if (e == NULL || e->expr_type != EXPR_VARIABLE)
1398 return FAILURE;
1400 /* At this point we have an inquiry function with a variable argument. The
1401 type of the variable might be undefined, but we need it now, because the
1402 arguments of these functions are allowed to be undefined. */
1404 if (e->ts.type == BT_UNKNOWN)
1406 if (e->symtree->n.sym->ts.type == BT_UNKNOWN
1407 && gfc_set_default_type (e->symtree->n.sym, 0, gfc_current_ns)
1408 == FAILURE)
1409 return FAILURE;
1411 e->ts = e->symtree->n.sym->ts;
1414 /* Assumed character length will not reduce to a constant expression
1415 with LEN, as required by the standard. */
1416 if (i == 4 && not_restricted
1417 && e->symtree->n.sym->ts.type == BT_CHARACTER
1418 && e->symtree->n.sym->ts.cl->length == NULL)
1419 gfc_notify_std (GFC_STD_GNU, "assumed character length "
1420 "variable '%s' in constant expression at %L",
1421 e->symtree->n.sym->name, &e->where);
1423 return SUCCESS;
1427 /* Verify that an expression is an initialization expression. A side
1428 effect is that the expression tree is reduced to a single constant
1429 node if all goes well. This would normally happen when the
1430 expression is constructed but function references are assumed to be
1431 intrinsics in the context of initialization expressions. If
1432 FAILURE is returned an error message has been generated. */
1434 static try
1435 check_init_expr (gfc_expr * e)
1437 gfc_actual_arglist *ap;
1438 match m;
1439 try t;
1441 if (e == NULL)
1442 return SUCCESS;
1444 switch (e->expr_type)
1446 case EXPR_OP:
1447 t = check_intrinsic_op (e, check_init_expr);
1448 if (t == SUCCESS)
1449 t = gfc_simplify_expr (e, 0);
1451 break;
1453 case EXPR_FUNCTION:
1454 t = SUCCESS;
1456 if (check_inquiry (e, 1) != SUCCESS)
1458 t = SUCCESS;
1459 for (ap = e->value.function.actual; ap; ap = ap->next)
1460 if (check_init_expr (ap->expr) == FAILURE)
1462 t = FAILURE;
1463 break;
1467 if (t == SUCCESS)
1469 m = gfc_intrinsic_func_interface (e, 0);
1471 if (m == MATCH_NO)
1472 gfc_error ("Function '%s' in initialization expression at %L "
1473 "must be an intrinsic function",
1474 e->symtree->n.sym->name, &e->where);
1476 if (m != MATCH_YES)
1477 t = FAILURE;
1480 break;
1482 case EXPR_VARIABLE:
1483 t = SUCCESS;
1485 if (gfc_check_iter_variable (e) == SUCCESS)
1486 break;
1488 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
1490 t = simplify_parameter_variable (e, 0);
1491 break;
1494 gfc_error ("Parameter '%s' at %L has not been declared or is "
1495 "a variable, which does not reduce to a constant "
1496 "expression", e->symtree->n.sym->name, &e->where);
1497 t = FAILURE;
1498 break;
1500 case EXPR_CONSTANT:
1501 case EXPR_NULL:
1502 t = SUCCESS;
1503 break;
1505 case EXPR_SUBSTRING:
1506 t = check_init_expr (e->ref->u.ss.start);
1507 if (t == FAILURE)
1508 break;
1510 t = check_init_expr (e->ref->u.ss.end);
1511 if (t == SUCCESS)
1512 t = gfc_simplify_expr (e, 0);
1514 break;
1516 case EXPR_STRUCTURE:
1517 t = gfc_check_constructor (e, check_init_expr);
1518 break;
1520 case EXPR_ARRAY:
1521 t = gfc_check_constructor (e, check_init_expr);
1522 if (t == FAILURE)
1523 break;
1525 t = gfc_expand_constructor (e);
1526 if (t == FAILURE)
1527 break;
1529 t = gfc_check_constructor_type (e);
1530 break;
1532 default:
1533 gfc_internal_error ("check_init_expr(): Unknown expression type");
1536 return t;
1540 /* Match an initialization expression. We work by first matching an
1541 expression, then reducing it to a constant. */
1543 match
1544 gfc_match_init_expr (gfc_expr ** result)
1546 gfc_expr *expr;
1547 match m;
1548 try t;
1550 m = gfc_match_expr (&expr);
1551 if (m != MATCH_YES)
1552 return m;
1554 gfc_init_expr = 1;
1555 t = gfc_resolve_expr (expr);
1556 if (t == SUCCESS)
1557 t = check_init_expr (expr);
1558 gfc_init_expr = 0;
1560 if (t == FAILURE)
1562 gfc_free_expr (expr);
1563 return MATCH_ERROR;
1566 if (expr->expr_type == EXPR_ARRAY
1567 && (gfc_check_constructor_type (expr) == FAILURE
1568 || gfc_expand_constructor (expr) == FAILURE))
1570 gfc_free_expr (expr);
1571 return MATCH_ERROR;
1574 /* Not all inquiry functions are simplified to constant expressions
1575 so it is necessary to call check_inquiry again. */
1576 if (!gfc_is_constant_expr (expr)
1577 && check_inquiry (expr, 1) == FAILURE)
1579 gfc_error ("Initialization expression didn't reduce %C");
1580 return MATCH_ERROR;
1583 *result = expr;
1585 return MATCH_YES;
1590 static try check_restricted (gfc_expr *);
1592 /* Given an actual argument list, test to see that each argument is a
1593 restricted expression and optionally if the expression type is
1594 integer or character. */
1596 static try
1597 restricted_args (gfc_actual_arglist * a)
1599 for (; a; a = a->next)
1601 if (check_restricted (a->expr) == FAILURE)
1602 return FAILURE;
1605 return SUCCESS;
1609 /************* Restricted/specification expressions *************/
1612 /* Make sure a non-intrinsic function is a specification function. */
1614 static try
1615 external_spec_function (gfc_expr * e)
1617 gfc_symbol *f;
1619 f = e->value.function.esym;
1621 if (f->attr.proc == PROC_ST_FUNCTION)
1623 gfc_error ("Specification function '%s' at %L cannot be a statement "
1624 "function", f->name, &e->where);
1625 return FAILURE;
1628 if (f->attr.proc == PROC_INTERNAL)
1630 gfc_error ("Specification function '%s' at %L cannot be an internal "
1631 "function", f->name, &e->where);
1632 return FAILURE;
1635 if (!f->attr.pure)
1637 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
1638 &e->where);
1639 return FAILURE;
1642 if (f->attr.recursive)
1644 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1645 f->name, &e->where);
1646 return FAILURE;
1649 return restricted_args (e->value.function.actual);
1653 /* Check to see that a function reference to an intrinsic is a
1654 restricted expression. */
1656 static try
1657 restricted_intrinsic (gfc_expr * e)
1659 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
1660 if (check_inquiry (e, 0) == SUCCESS)
1661 return SUCCESS;
1663 return restricted_args (e->value.function.actual);
1667 /* Verify that an expression is a restricted expression. Like its
1668 cousin check_init_expr(), an error message is generated if we
1669 return FAILURE. */
1671 static try
1672 check_restricted (gfc_expr * e)
1674 gfc_symbol *sym;
1675 try t;
1677 if (e == NULL)
1678 return SUCCESS;
1680 switch (e->expr_type)
1682 case EXPR_OP:
1683 t = check_intrinsic_op (e, check_restricted);
1684 if (t == SUCCESS)
1685 t = gfc_simplify_expr (e, 0);
1687 break;
1689 case EXPR_FUNCTION:
1690 t = e->value.function.esym ?
1691 external_spec_function (e) : restricted_intrinsic (e);
1693 break;
1695 case EXPR_VARIABLE:
1696 sym = e->symtree->n.sym;
1697 t = FAILURE;
1699 if (sym->attr.optional)
1701 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1702 sym->name, &e->where);
1703 break;
1706 if (sym->attr.intent == INTENT_OUT)
1708 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1709 sym->name, &e->where);
1710 break;
1713 /* gfc_is_formal_arg broadcasts that a formal argument list is being processed
1714 in resolve.c(resolve_formal_arglist). This is done so that host associated
1715 dummy array indices are accepted (PR23446). */
1716 if (sym->attr.in_common
1717 || sym->attr.use_assoc
1718 || sym->attr.dummy
1719 || sym->ns != gfc_current_ns
1720 || (sym->ns->proc_name != NULL
1721 && sym->ns->proc_name->attr.flavor == FL_MODULE)
1722 || gfc_is_formal_arg ())
1724 t = SUCCESS;
1725 break;
1728 gfc_error ("Variable '%s' cannot appear in the expression at %L",
1729 sym->name, &e->where);
1731 break;
1733 case EXPR_NULL:
1734 case EXPR_CONSTANT:
1735 t = SUCCESS;
1736 break;
1738 case EXPR_SUBSTRING:
1739 t = gfc_specification_expr (e->ref->u.ss.start);
1740 if (t == FAILURE)
1741 break;
1743 t = gfc_specification_expr (e->ref->u.ss.end);
1744 if (t == SUCCESS)
1745 t = gfc_simplify_expr (e, 0);
1747 break;
1749 case EXPR_STRUCTURE:
1750 t = gfc_check_constructor (e, check_restricted);
1751 break;
1753 case EXPR_ARRAY:
1754 t = gfc_check_constructor (e, check_restricted);
1755 break;
1757 default:
1758 gfc_internal_error ("check_restricted(): Unknown expression type");
1761 return t;
1765 /* Check to see that an expression is a specification expression. If
1766 we return FAILURE, an error has been generated. */
1769 gfc_specification_expr (gfc_expr * e)
1771 if (e == NULL)
1772 return SUCCESS;
1774 if (e->ts.type != BT_INTEGER)
1776 gfc_error ("Expression at %L must be of INTEGER type", &e->where);
1777 return FAILURE;
1780 if (e->rank != 0)
1782 gfc_error ("Expression at %L must be scalar", &e->where);
1783 return FAILURE;
1786 if (gfc_simplify_expr (e, 0) == FAILURE)
1787 return FAILURE;
1789 return check_restricted (e);
1793 /************** Expression conformance checks. *************/
1795 /* Given two expressions, make sure that the arrays are conformable. */
1798 gfc_check_conformance (const char *optype_msgid,
1799 gfc_expr * op1, gfc_expr * op2)
1801 int op1_flag, op2_flag, d;
1802 mpz_t op1_size, op2_size;
1803 try t;
1805 if (op1->rank == 0 || op2->rank == 0)
1806 return SUCCESS;
1808 if (op1->rank != op2->rank)
1810 gfc_error ("Incompatible ranks in %s at %L", _(optype_msgid),
1811 &op1->where);
1812 return FAILURE;
1815 t = SUCCESS;
1817 for (d = 0; d < op1->rank; d++)
1819 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
1820 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
1822 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
1824 gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
1825 _(optype_msgid), &op1->where, d + 1,
1826 (int) mpz_get_si (op1_size),
1827 (int) mpz_get_si (op2_size));
1829 t = FAILURE;
1832 if (op1_flag)
1833 mpz_clear (op1_size);
1834 if (op2_flag)
1835 mpz_clear (op2_size);
1837 if (t == FAILURE)
1838 return FAILURE;
1841 return SUCCESS;
1845 /* Given an assignable expression and an arbitrary expression, make
1846 sure that the assignment can take place. */
1849 gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform)
1851 gfc_symbol *sym;
1853 sym = lvalue->symtree->n.sym;
1855 if (sym->attr.intent == INTENT_IN)
1857 gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1858 sym->name, &lvalue->where);
1859 return FAILURE;
1862 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.use_assoc)
1864 gfc_error ("'%s' in the assignment at %L cannot be an l-value "
1865 "since it is a procedure", sym->name, &lvalue->where);
1866 return FAILURE;
1870 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
1872 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
1873 lvalue->rank, rvalue->rank, &lvalue->where);
1874 return FAILURE;
1877 if (lvalue->ts.type == BT_UNKNOWN)
1879 gfc_error ("Variable type is UNKNOWN in assignment at %L",
1880 &lvalue->where);
1881 return FAILURE;
1884 if (rvalue->expr_type == EXPR_NULL)
1886 gfc_error ("NULL appears on right-hand side in assignment at %L",
1887 &rvalue->where);
1888 return FAILURE;
1891 if (sym->attr.cray_pointee
1892 && lvalue->ref != NULL
1893 && lvalue->ref->u.ar.type != AR_ELEMENT
1894 && lvalue->ref->u.ar.as->cp_was_assumed)
1896 gfc_error ("Vector assignment to assumed-size Cray Pointee at %L"
1897 " is illegal.", &lvalue->where);
1898 return FAILURE;
1901 /* This is possibly a typo: x = f() instead of x => f() */
1902 if (gfc_option.warn_surprising
1903 && rvalue->expr_type == EXPR_FUNCTION
1904 && rvalue->symtree->n.sym->attr.pointer)
1905 gfc_warning ("POINTER valued function appears on right-hand side of "
1906 "assignment at %L", &rvalue->where);
1908 /* Check size of array assignments. */
1909 if (lvalue->rank != 0 && rvalue->rank != 0
1910 && gfc_check_conformance ("Array assignment", lvalue, rvalue) != SUCCESS)
1911 return FAILURE;
1913 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
1914 return SUCCESS;
1916 if (!conform)
1918 /* Numeric can be converted to any other numeric. And Hollerith can be
1919 converted to any other type. */
1920 if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
1921 || rvalue->ts.type == BT_HOLLERITH)
1922 return SUCCESS;
1924 if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
1925 return SUCCESS;
1927 gfc_error ("Incompatible types in assignment at %L, %s to %s",
1928 &rvalue->where, gfc_typename (&rvalue->ts),
1929 gfc_typename (&lvalue->ts));
1931 return FAILURE;
1934 return gfc_convert_type (rvalue, &lvalue->ts, 1);
1938 /* Check that a pointer assignment is OK. We first check lvalue, and
1939 we only check rvalue if it's not an assignment to NULL() or a
1940 NULLIFY statement. */
1943 gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue)
1945 symbol_attribute attr;
1946 int is_pure;
1948 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
1950 gfc_error ("Pointer assignment target is not a POINTER at %L",
1951 &lvalue->where);
1952 return FAILURE;
1955 if (lvalue->symtree->n.sym->attr.flavor == FL_PROCEDURE
1956 && lvalue->symtree->n.sym->attr.use_assoc)
1958 gfc_error ("'%s' in the pointer assignment at %L cannot be an "
1959 "l-value since it is a procedure",
1960 lvalue->symtree->n.sym->name, &lvalue->where);
1961 return FAILURE;
1964 attr = gfc_variable_attr (lvalue, NULL);
1965 if (!attr.pointer)
1967 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
1968 return FAILURE;
1971 is_pure = gfc_pure (NULL);
1973 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym))
1975 gfc_error ("Bad pointer object in PURE procedure at %L",
1976 &lvalue->where);
1977 return FAILURE;
1980 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
1981 kind, etc for lvalue and rvalue must match, and rvalue must be a
1982 pure variable if we're in a pure function. */
1983 if (rvalue->expr_type == EXPR_NULL)
1984 return SUCCESS;
1986 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
1988 gfc_error ("Different types in pointer assignment at %L",
1989 &lvalue->where);
1990 return FAILURE;
1993 if (lvalue->ts.kind != rvalue->ts.kind)
1995 gfc_error ("Different kind type parameters in pointer "
1996 "assignment at %L", &lvalue->where);
1997 return FAILURE;
2000 if (lvalue->ts.type == BT_CHARACTER
2001 && lvalue->ts.cl->length && rvalue->ts.cl->length
2002 && abs (gfc_dep_compare_expr (lvalue->ts.cl->length,
2003 rvalue->ts.cl->length)) == 1)
2005 gfc_error ("Different character lengths in pointer "
2006 "assignment at %L", &lvalue->where);
2007 return FAILURE;
2010 attr = gfc_expr_attr (rvalue);
2011 if (!attr.target && !attr.pointer)
2013 gfc_error ("Pointer assignment target is neither TARGET "
2014 "nor POINTER at %L", &rvalue->where);
2015 return FAILURE;
2018 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
2020 gfc_error ("Bad target in pointer assignment in PURE "
2021 "procedure at %L", &rvalue->where);
2024 if (lvalue->rank != rvalue->rank)
2026 gfc_error ("Unequal ranks %d and %d in pointer assignment at %L",
2027 lvalue->rank, rvalue->rank, &rvalue->where);
2028 return FAILURE;
2031 if (gfc_has_vector_index (rvalue))
2033 gfc_error ("Pointer assignment with vector subscript "
2034 "on rhs at %L", &rvalue->where);
2035 return FAILURE;
2038 return SUCCESS;
2042 /* Relative of gfc_check_assign() except that the lvalue is a single
2043 symbol. Used for initialization assignments. */
2046 gfc_check_assign_symbol (gfc_symbol * sym, gfc_expr * rvalue)
2048 gfc_expr lvalue;
2049 try r;
2051 memset (&lvalue, '\0', sizeof (gfc_expr));
2053 lvalue.expr_type = EXPR_VARIABLE;
2054 lvalue.ts = sym->ts;
2055 if (sym->as)
2056 lvalue.rank = sym->as->rank;
2057 lvalue.symtree = (gfc_symtree *)gfc_getmem (sizeof (gfc_symtree));
2058 lvalue.symtree->n.sym = sym;
2059 lvalue.where = sym->declared_at;
2061 if (sym->attr.pointer)
2062 r = gfc_check_pointer_assign (&lvalue, rvalue);
2063 else
2064 r = gfc_check_assign (&lvalue, rvalue, 1);
2066 gfc_free (lvalue.symtree);
2068 return r;
2072 /* Get an expression for a default initializer. */
2074 gfc_expr *
2075 gfc_default_initializer (gfc_typespec *ts)
2077 gfc_constructor *tail;
2078 gfc_expr *init;
2079 gfc_component *c;
2081 init = NULL;
2083 /* See if we have a default initializer. */
2084 for (c = ts->derived->components; c; c = c->next)
2086 if (c->initializer && init == NULL)
2087 init = gfc_get_expr ();
2090 if (init == NULL)
2091 return NULL;
2093 /* Build the constructor. */
2094 init->expr_type = EXPR_STRUCTURE;
2095 init->ts = *ts;
2096 init->where = ts->derived->declared_at;
2097 tail = NULL;
2098 for (c = ts->derived->components; c; c = c->next)
2100 if (tail == NULL)
2101 init->value.constructor = tail = gfc_get_constructor ();
2102 else
2104 tail->next = gfc_get_constructor ();
2105 tail = tail->next;
2108 if (c->initializer)
2109 tail->expr = gfc_copy_expr (c->initializer);
2111 return init;
2115 /* Given a symbol, create an expression node with that symbol as a
2116 variable. If the symbol is array valued, setup a reference of the
2117 whole array. */
2119 gfc_expr *
2120 gfc_get_variable_expr (gfc_symtree * var)
2122 gfc_expr *e;
2124 e = gfc_get_expr ();
2125 e->expr_type = EXPR_VARIABLE;
2126 e->symtree = var;
2127 e->ts = var->n.sym->ts;
2129 if (var->n.sym->as != NULL)
2131 e->rank = var->n.sym->as->rank;
2132 e->ref = gfc_get_ref ();
2133 e->ref->type = REF_ARRAY;
2134 e->ref->u.ar.type = AR_FULL;
2137 return e;
2141 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */
2143 void
2144 gfc_expr_set_symbols_referenced (gfc_expr * expr)
2146 gfc_actual_arglist *arg;
2147 gfc_constructor *c;
2148 gfc_ref *ref;
2149 int i;
2151 if (!expr) return;
2153 switch (expr->expr_type)
2155 case EXPR_OP:
2156 gfc_expr_set_symbols_referenced (expr->value.op.op1);
2157 gfc_expr_set_symbols_referenced (expr->value.op.op2);
2158 break;
2160 case EXPR_FUNCTION:
2161 for (arg = expr->value.function.actual; arg; arg = arg->next)
2162 gfc_expr_set_symbols_referenced (arg->expr);
2163 break;
2165 case EXPR_VARIABLE:
2166 gfc_set_sym_referenced (expr->symtree->n.sym);
2167 break;
2169 case EXPR_CONSTANT:
2170 case EXPR_NULL:
2171 case EXPR_SUBSTRING:
2172 break;
2174 case EXPR_STRUCTURE:
2175 case EXPR_ARRAY:
2176 for (c = expr->value.constructor; c; c = c->next)
2177 gfc_expr_set_symbols_referenced (c->expr);
2178 break;
2180 default:
2181 gcc_unreachable ();
2182 break;
2185 for (ref = expr->ref; ref; ref = ref->next)
2186 switch (ref->type)
2188 case REF_ARRAY:
2189 for (i = 0; i < ref->u.ar.dimen; i++)
2191 gfc_expr_set_symbols_referenced (ref->u.ar.start[i]);
2192 gfc_expr_set_symbols_referenced (ref->u.ar.end[i]);
2193 gfc_expr_set_symbols_referenced (ref->u.ar.stride[i]);
2195 break;
2197 case REF_COMPONENT:
2198 break;
2200 case REF_SUBSTRING:
2201 gfc_expr_set_symbols_referenced (ref->u.ss.start);
2202 gfc_expr_set_symbols_referenced (ref->u.ss.end);
2203 break;
2205 default:
2206 gcc_unreachable ();
2207 break;