1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 Free Software 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 3, or (at your option) any later
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
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
27 #include "target-memory.h" /* for gfc_convert_boz */
29 /* Get a new expr node. */
37 gfc_clear_ts (&e->ts);
41 e->con_by_offset = NULL;
46 /* Free an argument list and everything below it. */
49 gfc_free_actual_arglist (gfc_actual_arglist *a1)
51 gfc_actual_arglist *a2;
56 gfc_free_expr (a1->expr);
63 /* Copy an arglist structure and all of the arguments. */
66 gfc_copy_actual_arglist (gfc_actual_arglist *p)
68 gfc_actual_arglist *head, *tail, *new_arg;
72 for (; p; p = p->next)
74 new_arg = gfc_get_actual_arglist ();
77 new_arg->expr = gfc_copy_expr (p->expr);
92 /* Free a list of reference structures. */
95 gfc_free_ref_list (gfc_ref *p)
107 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
109 gfc_free_expr (p->u.ar.start[i]);
110 gfc_free_expr (p->u.ar.end[i]);
111 gfc_free_expr (p->u.ar.stride[i]);
117 gfc_free_expr (p->u.ss.start);
118 gfc_free_expr (p->u.ss.end);
130 /* Workhorse function for gfc_free_expr() that frees everything
131 beneath an expression node, but not the node itself. This is
132 useful when we want to simplify a node and replace it with
133 something else or the expression node belongs to another structure. */
136 free_expr0 (gfc_expr *e)
140 switch (e->expr_type)
143 /* Free any parts of the value that need freeing. */
147 mpz_clear (e->value.integer);
151 mpfr_clear (e->value.real);
155 gfc_free (e->value.character.string);
159 mpfr_clear (e->value.complex.r);
160 mpfr_clear (e->value.complex.i);
167 /* Free the representation. */
168 if (e->representation.string)
169 gfc_free (e->representation.string);
174 if (e->value.op.op1 != NULL)
175 gfc_free_expr (e->value.op.op1);
176 if (e->value.op.op2 != NULL)
177 gfc_free_expr (e->value.op.op2);
181 gfc_free_actual_arglist (e->value.function.actual);
185 gfc_free_actual_arglist (e->value.compcall.actual);
193 gfc_free_constructor (e->value.constructor);
197 gfc_free (e->value.character.string);
204 gfc_internal_error ("free_expr0(): Bad expr type");
207 /* Free a shape array. */
208 if (e->shape != NULL)
210 for (n = 0; n < e->rank; n++)
211 mpz_clear (e->shape[n]);
216 gfc_free_ref_list (e->ref);
218 memset (e, '\0', sizeof (gfc_expr));
222 /* Free an expression node and everything beneath it. */
225 gfc_free_expr (gfc_expr *e)
229 if (e->con_by_offset)
230 splay_tree_delete (e->con_by_offset);
236 /* Graft the *src expression onto the *dest subexpression. */
239 gfc_replace_expr (gfc_expr *dest, gfc_expr *src)
247 /* Try to extract an integer constant from the passed expression node.
248 Returns an error message or NULL if the result is set. It is
249 tempting to generate an error and return SUCCESS or FAILURE, but
250 failure is OK for some callers. */
253 gfc_extract_int (gfc_expr *expr, int *result)
255 if (expr->expr_type != EXPR_CONSTANT)
256 return _("Constant expression required at %C");
258 if (expr->ts.type != BT_INTEGER)
259 return _("Integer expression required at %C");
261 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
262 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
264 return _("Integer value too large in expression at %C");
267 *result = (int) mpz_get_si (expr->value.integer);
273 /* Recursively copy a list of reference structures. */
276 gfc_copy_ref (gfc_ref *src)
284 dest = gfc_get_ref ();
285 dest->type = src->type;
290 ar = gfc_copy_array_ref (&src->u.ar);
296 dest->u.c = src->u.c;
300 dest->u.ss = src->u.ss;
301 dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
302 dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
306 dest->next = gfc_copy_ref (src->next);
312 /* Detect whether an expression has any vector index array references. */
315 gfc_has_vector_index (gfc_expr *e)
319 for (ref = e->ref; ref; ref = ref->next)
320 if (ref->type == REF_ARRAY)
321 for (i = 0; i < ref->u.ar.dimen; i++)
322 if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR)
328 /* Copy a shape array. */
331 gfc_copy_shape (mpz_t *shape, int rank)
339 new_shape = gfc_get_shape (rank);
341 for (n = 0; n < rank; n++)
342 mpz_init_set (new_shape[n], shape[n]);
348 /* Copy a shape array excluding dimension N, where N is an integer
349 constant expression. Dimensions are numbered in fortran style --
352 So, if the original shape array contains R elements
353 { s1 ... sN-1 sN sN+1 ... sR-1 sR}
354 the result contains R-1 elements:
355 { s1 ... sN-1 sN+1 ... sR-1}
357 If anything goes wrong -- N is not a constant, its value is out
358 of range -- or anything else, just returns NULL. */
361 gfc_copy_shape_excluding (mpz_t *shape, int rank, gfc_expr *dim)
363 mpz_t *new_shape, *s;
369 || dim->expr_type != EXPR_CONSTANT
370 || dim->ts.type != BT_INTEGER)
373 n = mpz_get_si (dim->value.integer);
374 n--; /* Convert to zero based index. */
375 if (n < 0 || n >= rank)
378 s = new_shape = gfc_get_shape (rank - 1);
380 for (i = 0; i < rank; i++)
384 mpz_init_set (*s, shape[i]);
392 /* Given an expression pointer, return a copy of the expression. This
393 subroutine is recursive. */
396 gfc_copy_expr (gfc_expr *p)
408 switch (q->expr_type)
411 s = gfc_get_wide_string (p->value.character.length + 1);
412 q->value.character.string = s;
413 memcpy (s, p->value.character.string,
414 (p->value.character.length + 1) * sizeof (gfc_char_t));
418 /* Copy target representation, if it exists. */
419 if (p->representation.string)
421 c = XCNEWVEC (char, p->representation.length + 1);
422 q->representation.string = c;
423 memcpy (c, p->representation.string, (p->representation.length + 1));
426 /* Copy the values of any pointer components of p->value. */
430 mpz_init_set (q->value.integer, p->value.integer);
434 gfc_set_model_kind (q->ts.kind);
435 mpfr_init (q->value.real);
436 mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
440 gfc_set_model_kind (q->ts.kind);
441 mpfr_init (q->value.complex.r);
442 mpfr_init (q->value.complex.i);
443 mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
444 mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
448 if (p->representation.string)
449 q->value.character.string
450 = gfc_char_to_widechar (q->representation.string);
453 s = gfc_get_wide_string (p->value.character.length + 1);
454 q->value.character.string = s;
456 /* This is the case for the C_NULL_CHAR named constant. */
457 if (p->value.character.length == 0
458 && (p->ts.is_c_interop || p->ts.is_iso_c))
461 /* Need to set the length to 1 to make sure the NUL
462 terminator is copied. */
463 q->value.character.length = 1;
466 memcpy (s, p->value.character.string,
467 (p->value.character.length + 1) * sizeof (gfc_char_t));
474 break; /* Already done. */
478 /* Should never be reached. */
480 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
487 switch (q->value.op.op)
490 case INTRINSIC_PARENTHESES:
491 case INTRINSIC_UPLUS:
492 case INTRINSIC_UMINUS:
493 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
496 default: /* Binary operators. */
497 q->value.op.op1 = gfc_copy_expr (p->value.op.op1);
498 q->value.op.op2 = gfc_copy_expr (p->value.op.op2);
505 q->value.function.actual =
506 gfc_copy_actual_arglist (p->value.function.actual);
510 q->value.compcall.actual =
511 gfc_copy_actual_arglist (p->value.compcall.actual);
512 q->value.compcall.tbp = p->value.compcall.tbp;
517 q->value.constructor = gfc_copy_constructor (p->value.constructor);
525 q->shape = gfc_copy_shape (p->shape, p->rank);
527 q->ref = gfc_copy_ref (p->ref);
533 /* Return the maximum kind of two expressions. In general, higher
534 kind numbers mean more precision for numeric types. */
537 gfc_kind_max (gfc_expr *e1, gfc_expr *e2)
539 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
543 /* Returns nonzero if the type is numeric, zero otherwise. */
546 numeric_type (bt type)
548 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
552 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
555 gfc_numeric_ts (gfc_typespec *ts)
557 return numeric_type (ts->type);
561 /* Returns an expression node that is an integer constant. */
570 p->expr_type = EXPR_CONSTANT;
571 p->ts.type = BT_INTEGER;
572 p->ts.kind = gfc_default_integer_kind;
574 p->where = gfc_current_locus;
575 mpz_init_set_si (p->value.integer, i);
581 /* Returns an expression node that is a logical constant. */
584 gfc_logical_expr (int i, locus *where)
590 p->expr_type = EXPR_CONSTANT;
591 p->ts.type = BT_LOGICAL;
592 p->ts.kind = gfc_default_logical_kind;
595 where = &gfc_current_locus;
597 p->value.logical = i;
603 /* Return an expression node with an optional argument list attached.
604 A variable number of gfc_expr pointers are strung together in an
605 argument list with a NULL pointer terminating the list. */
608 gfc_build_conversion (gfc_expr *e)
613 p->expr_type = EXPR_FUNCTION;
615 p->value.function.actual = NULL;
617 p->value.function.actual = gfc_get_actual_arglist ();
618 p->value.function.actual->expr = e;
624 /* Given an expression node with some sort of numeric binary
625 expression, insert type conversions required to make the operands
628 The exception is that the operands of an exponential don't have to
629 have the same type. If possible, the base is promoted to the type
630 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
631 1.0**2 stays as it is. */
634 gfc_type_convert_binary (gfc_expr *e)
638 op1 = e->value.op.op1;
639 op2 = e->value.op.op2;
641 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
643 gfc_clear_ts (&e->ts);
647 /* Kind conversions of same type. */
648 if (op1->ts.type == op2->ts.type)
650 if (op1->ts.kind == op2->ts.kind)
652 /* No type conversions. */
657 if (op1->ts.kind > op2->ts.kind)
658 gfc_convert_type (op2, &op1->ts, 2);
660 gfc_convert_type (op1, &op2->ts, 2);
666 /* Integer combined with real or complex. */
667 if (op2->ts.type == BT_INTEGER)
671 /* Special case for ** operator. */
672 if (e->value.op.op == INTRINSIC_POWER)
675 gfc_convert_type (e->value.op.op2, &e->ts, 2);
679 if (op1->ts.type == BT_INTEGER)
682 gfc_convert_type (e->value.op.op1, &e->ts, 2);
686 /* Real combined with complex. */
687 e->ts.type = BT_COMPLEX;
688 if (op1->ts.kind > op2->ts.kind)
689 e->ts.kind = op1->ts.kind;
691 e->ts.kind = op2->ts.kind;
692 if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
693 gfc_convert_type (e->value.op.op1, &e->ts, 2);
694 if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
695 gfc_convert_type (e->value.op.op2, &e->ts, 2);
703 check_specification_function (gfc_expr *e)
710 sym = e->symtree->n.sym;
712 /* F95, 7.1.6.2; F2003, 7.1.7 */
714 && sym->attr.function
716 && !sym->attr.intrinsic
717 && !sym->attr.recursive
718 && sym->attr.proc != PROC_INTERNAL
719 && sym->attr.proc != PROC_ST_FUNCTION
720 && sym->attr.proc != PROC_UNKNOWN
721 && sym->formal == NULL)
727 /* Function to determine if an expression is constant or not. This
728 function expects that the expression has already been simplified. */
731 gfc_is_constant_expr (gfc_expr *e)
734 gfc_actual_arglist *arg;
740 switch (e->expr_type)
743 rv = (gfc_is_constant_expr (e->value.op.op1)
744 && (e->value.op.op2 == NULL
745 || gfc_is_constant_expr (e->value.op.op2)));
753 /* Specification functions are constant. */
754 if (check_specification_function (e) == MATCH_YES)
760 /* Call to intrinsic with at least one argument. */
762 if (e->value.function.isym && e->value.function.actual)
764 for (arg = e->value.function.actual; arg; arg = arg->next)
766 if (!gfc_is_constant_expr (arg->expr))
780 rv = e->ref == NULL || (gfc_is_constant_expr (e->ref->u.ss.start)
781 && gfc_is_constant_expr (e->ref->u.ss.end));
786 for (c = e->value.constructor; c; c = c->next)
787 if (!gfc_is_constant_expr (c->expr))
795 rv = gfc_constant_ac (e);
799 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
806 /* Is true if an array reference is followed by a component or substring
809 is_subref_array (gfc_expr * e)
814 if (e->expr_type != EXPR_VARIABLE)
817 if (e->symtree->n.sym->attr.subref_array_pointer)
821 for (ref = e->ref; ref; ref = ref->next)
823 if (ref->type == REF_ARRAY
824 && ref->u.ar.type != AR_ELEMENT)
828 && ref->type != REF_ARRAY)
835 /* Try to collapse intrinsic expressions. */
838 simplify_intrinsic_op (gfc_expr *p, int type)
841 gfc_expr *op1, *op2, *result;
843 if (p->value.op.op == INTRINSIC_USER)
846 op1 = p->value.op.op1;
847 op2 = p->value.op.op2;
850 if (gfc_simplify_expr (op1, type) == FAILURE)
852 if (gfc_simplify_expr (op2, type) == FAILURE)
855 if (!gfc_is_constant_expr (op1)
856 || (op2 != NULL && !gfc_is_constant_expr (op2)))
860 p->value.op.op1 = NULL;
861 p->value.op.op2 = NULL;
865 case INTRINSIC_PARENTHESES:
866 result = gfc_parentheses (op1);
869 case INTRINSIC_UPLUS:
870 result = gfc_uplus (op1);
873 case INTRINSIC_UMINUS:
874 result = gfc_uminus (op1);
878 result = gfc_add (op1, op2);
881 case INTRINSIC_MINUS:
882 result = gfc_subtract (op1, op2);
885 case INTRINSIC_TIMES:
886 result = gfc_multiply (op1, op2);
889 case INTRINSIC_DIVIDE:
890 result = gfc_divide (op1, op2);
893 case INTRINSIC_POWER:
894 result = gfc_power (op1, op2);
897 case INTRINSIC_CONCAT:
898 result = gfc_concat (op1, op2);
902 case INTRINSIC_EQ_OS:
903 result = gfc_eq (op1, op2, op);
907 case INTRINSIC_NE_OS:
908 result = gfc_ne (op1, op2, op);
912 case INTRINSIC_GT_OS:
913 result = gfc_gt (op1, op2, op);
917 case INTRINSIC_GE_OS:
918 result = gfc_ge (op1, op2, op);
922 case INTRINSIC_LT_OS:
923 result = gfc_lt (op1, op2, op);
927 case INTRINSIC_LE_OS:
928 result = gfc_le (op1, op2, op);
932 result = gfc_not (op1);
936 result = gfc_and (op1, op2);
940 result = gfc_or (op1, op2);
944 result = gfc_eqv (op1, op2);
948 result = gfc_neqv (op1, op2);
952 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
962 result->rank = p->rank;
963 result->where = p->where;
964 gfc_replace_expr (p, result);
970 /* Subroutine to simplify constructor expressions. Mutually recursive
971 with gfc_simplify_expr(). */
974 simplify_constructor (gfc_constructor *c, int type)
978 for (; c; c = c->next)
981 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
982 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
983 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
988 /* Try and simplify a copy. Replace the original if successful
989 but keep going through the constructor at all costs. Not
990 doing so can make a dog's dinner of complicated things. */
991 p = gfc_copy_expr (c->expr);
993 if (gfc_simplify_expr (p, type) == FAILURE)
999 gfc_replace_expr (c->expr, p);
1007 /* Pull a single array element out of an array constructor. */
1010 find_array_element (gfc_constructor *cons, gfc_array_ref *ar,
1011 gfc_constructor **rval)
1013 unsigned long nelemen;
1025 mpz_init_set_ui (offset, 0);
1028 mpz_init_set_ui (span, 1);
1029 for (i = 0; i < ar->dimen; i++)
1031 if (gfc_reduce_init_expr (ar->as->lower[i]) == FAILURE
1032 || gfc_reduce_init_expr (ar->as->upper[i]) == FAILURE)
1039 e = gfc_copy_expr (ar->start[i]);
1040 if (e->expr_type != EXPR_CONSTANT)
1046 gcc_assert (ar->as->upper[i]->expr_type == EXPR_CONSTANT
1047 && ar->as->lower[i]->expr_type == EXPR_CONSTANT);
1049 /* Check the bounds. */
1050 if ((ar->as->upper[i]
1051 && mpz_cmp (e->value.integer,
1052 ar->as->upper[i]->value.integer) > 0)
1053 || (mpz_cmp (e->value.integer,
1054 ar->as->lower[i]->value.integer) < 0))
1056 gfc_error ("Index in dimension %d is out of bounds "
1057 "at %L", i + 1, &ar->c_where[i]);
1063 mpz_sub (delta, e->value.integer, ar->as->lower[i]->value.integer);
1064 mpz_mul (delta, delta, span);
1065 mpz_add (offset, offset, delta);
1067 mpz_set_ui (tmp, 1);
1068 mpz_add (tmp, tmp, ar->as->upper[i]->value.integer);
1069 mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer);
1070 mpz_mul (span, span, tmp);
1073 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
1098 /* Find a component of a structure constructor. */
1100 static gfc_constructor *
1101 find_component_ref (gfc_constructor *cons, gfc_ref *ref)
1103 gfc_component *comp;
1104 gfc_component *pick;
1106 comp = ref->u.c.sym->components;
1107 pick = ref->u.c.component;
1108 while (comp != pick)
1118 /* Replace an expression with the contents of a constructor, removing
1119 the subobject reference in the process. */
1122 remove_subobject_ref (gfc_expr *p, gfc_constructor *cons)
1128 e->ref = p->ref->next;
1129 p->ref->next = NULL;
1130 gfc_replace_expr (p, e);
1134 /* Pull an array section out of an array constructor. */
1137 find_array_section (gfc_expr *expr, gfc_ref *ref)
1143 long unsigned one = 1;
1145 mpz_t start[GFC_MAX_DIMENSIONS];
1146 mpz_t end[GFC_MAX_DIMENSIONS];
1147 mpz_t stride[GFC_MAX_DIMENSIONS];
1148 mpz_t delta[GFC_MAX_DIMENSIONS];
1149 mpz_t ctr[GFC_MAX_DIMENSIONS];
1155 gfc_constructor *cons;
1156 gfc_constructor *base;
1162 gfc_constructor *vecsub[GFC_MAX_DIMENSIONS], *c;
1167 base = expr->value.constructor;
1168 expr->value.constructor = NULL;
1170 rank = ref->u.ar.as->rank;
1172 if (expr->shape == NULL)
1173 expr->shape = gfc_get_shape (rank);
1175 mpz_init_set_ui (delta_mpz, one);
1176 mpz_init_set_ui (nelts, one);
1179 /* Do the initialization now, so that we can cleanup without
1180 keeping track of where we were. */
1181 for (d = 0; d < rank; d++)
1183 mpz_init (delta[d]);
1184 mpz_init (start[d]);
1187 mpz_init (stride[d]);
1191 /* Build the counters to clock through the array reference. */
1193 for (d = 0; d < rank; d++)
1195 /* Make this stretch of code easier on the eye! */
1196 begin = ref->u.ar.start[d];
1197 finish = ref->u.ar.end[d];
1198 step = ref->u.ar.stride[d];
1199 lower = ref->u.ar.as->lower[d];
1200 upper = ref->u.ar.as->upper[d];
1202 if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */
1206 if (begin->expr_type != EXPR_ARRAY || !gfc_is_constant_expr (begin))
1212 gcc_assert (begin->rank == 1);
1213 /* Zero-sized arrays have no shape and no elements, stop early. */
1216 mpz_init_set_ui (nelts, 0);
1220 vecsub[d] = begin->value.constructor;
1221 mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1222 mpz_mul (nelts, nelts, begin->shape[0]);
1223 mpz_set (expr->shape[shape_i++], begin->shape[0]);
1226 for (c = vecsub[d]; c; c = c->next)
1228 if (mpz_cmp (c->expr->value.integer, upper->value.integer) > 0
1229 || mpz_cmp (c->expr->value.integer,
1230 lower->value.integer) < 0)
1232 gfc_error ("index in dimension %d is out of bounds "
1233 "at %L", d + 1, &ref->u.ar.c_where[d]);
1241 if ((begin && begin->expr_type != EXPR_CONSTANT)
1242 || (finish && finish->expr_type != EXPR_CONSTANT)
1243 || (step && step->expr_type != EXPR_CONSTANT))
1249 /* Obtain the stride. */
1251 mpz_set (stride[d], step->value.integer);
1253 mpz_set_ui (stride[d], one);
1255 if (mpz_cmp_ui (stride[d], 0) == 0)
1256 mpz_set_ui (stride[d], one);
1258 /* Obtain the start value for the index. */
1260 mpz_set (start[d], begin->value.integer);
1262 mpz_set (start[d], lower->value.integer);
1264 mpz_set (ctr[d], start[d]);
1266 /* Obtain the end value for the index. */
1268 mpz_set (end[d], finish->value.integer);
1270 mpz_set (end[d], upper->value.integer);
1272 /* Separate 'if' because elements sometimes arrive with
1274 if (ref->u.ar.dimen_type[d] == DIMEN_ELEMENT)
1275 mpz_set (end [d], begin->value.integer);
1277 /* Check the bounds. */
1278 if (mpz_cmp (ctr[d], upper->value.integer) > 0
1279 || mpz_cmp (end[d], upper->value.integer) > 0
1280 || mpz_cmp (ctr[d], lower->value.integer) < 0
1281 || mpz_cmp (end[d], lower->value.integer) < 0)
1283 gfc_error ("index in dimension %d is out of bounds "
1284 "at %L", d + 1, &ref->u.ar.c_where[d]);
1289 /* Calculate the number of elements and the shape. */
1290 mpz_set (tmp_mpz, stride[d]);
1291 mpz_add (tmp_mpz, end[d], tmp_mpz);
1292 mpz_sub (tmp_mpz, tmp_mpz, ctr[d]);
1293 mpz_div (tmp_mpz, tmp_mpz, stride[d]);
1294 mpz_mul (nelts, nelts, tmp_mpz);
1296 /* An element reference reduces the rank of the expression; don't
1297 add anything to the shape array. */
1298 if (ref->u.ar.dimen_type[d] != DIMEN_ELEMENT)
1299 mpz_set (expr->shape[shape_i++], tmp_mpz);
1302 /* Calculate the 'stride' (=delta) for conversion of the
1303 counter values into the index along the constructor. */
1304 mpz_set (delta[d], delta_mpz);
1305 mpz_sub (tmp_mpz, upper->value.integer, lower->value.integer);
1306 mpz_add_ui (tmp_mpz, tmp_mpz, one);
1307 mpz_mul (delta_mpz, delta_mpz, tmp_mpz);
1314 /* Now clock through the array reference, calculating the index in
1315 the source constructor and transferring the elements to the new
1317 for (idx = 0; idx < (int) mpz_get_si (nelts); idx++)
1319 if (ref->u.ar.offset)
1320 mpz_set (ptr, ref->u.ar.offset->value.integer);
1322 mpz_init_set_ui (ptr, 0);
1325 for (d = 0; d < rank; d++)
1327 mpz_set (tmp_mpz, ctr[d]);
1328 mpz_sub (tmp_mpz, tmp_mpz, ref->u.ar.as->lower[d]->value.integer);
1329 mpz_mul (tmp_mpz, tmp_mpz, delta[d]);
1330 mpz_add (ptr, ptr, tmp_mpz);
1332 if (!incr_ctr) continue;
1334 if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */
1336 gcc_assert(vecsub[d]);
1338 if (!vecsub[d]->next)
1339 vecsub[d] = ref->u.ar.start[d]->value.constructor;
1342 vecsub[d] = vecsub[d]->next;
1345 mpz_set (ctr[d], vecsub[d]->expr->value.integer);
1349 mpz_add (ctr[d], ctr[d], stride[d]);
1351 if (mpz_cmp_ui (stride[d], 0) > 0
1352 ? mpz_cmp (ctr[d], end[d]) > 0
1353 : mpz_cmp (ctr[d], end[d]) < 0)
1354 mpz_set (ctr[d], start[d]);
1360 /* There must be a better way of dealing with negative strides
1361 than resetting the index and the constructor pointer! */
1362 if (mpz_cmp (ptr, index) < 0)
1364 mpz_set_ui (index, 0);
1368 while (cons && cons->next && mpz_cmp (ptr, index) > 0)
1370 mpz_add_ui (index, index, one);
1374 gfc_append_constructor (expr, gfc_copy_expr (cons->expr));
1382 mpz_clear (delta_mpz);
1383 mpz_clear (tmp_mpz);
1385 for (d = 0; d < rank; d++)
1387 mpz_clear (delta[d]);
1388 mpz_clear (start[d]);
1391 mpz_clear (stride[d]);
1393 gfc_free_constructor (base);
1397 /* Pull a substring out of an expression. */
1400 find_substring_ref (gfc_expr *p, gfc_expr **newp)
1407 if (p->ref->u.ss.start->expr_type != EXPR_CONSTANT
1408 || p->ref->u.ss.end->expr_type != EXPR_CONSTANT)
1411 *newp = gfc_copy_expr (p);
1412 gfc_free ((*newp)->value.character.string);
1414 end = (int) mpz_get_ui (p->ref->u.ss.end->value.integer);
1415 start = (int) mpz_get_ui (p->ref->u.ss.start->value.integer);
1416 length = end - start + 1;
1418 chr = (*newp)->value.character.string = gfc_get_wide_string (length + 1);
1419 (*newp)->value.character.length = length;
1420 memcpy (chr, &p->value.character.string[start - 1],
1421 length * sizeof (gfc_char_t));
1428 /* Simplify a subobject reference of a constructor. This occurs when
1429 parameter variable values are substituted. */
1432 simplify_const_ref (gfc_expr *p)
1434 gfc_constructor *cons;
1439 switch (p->ref->type)
1442 switch (p->ref->u.ar.type)
1445 if (find_array_element (p->value.constructor, &p->ref->u.ar,
1452 remove_subobject_ref (p, cons);
1456 if (find_array_section (p, p->ref) == FAILURE)
1458 p->ref->u.ar.type = AR_FULL;
1463 if (p->ref->next != NULL
1464 && (p->ts.type == BT_CHARACTER || p->ts.type == BT_DERIVED))
1466 cons = p->value.constructor;
1467 for (; cons; cons = cons->next)
1469 cons->expr->ref = gfc_copy_ref (p->ref->next);
1470 if (simplify_const_ref (cons->expr) == FAILURE)
1474 /* If this is a CHARACTER array and we possibly took a
1475 substring out of it, update the type-spec's character
1476 length according to the first element (as all should have
1477 the same length). */
1478 if (p->ts.type == BT_CHARACTER)
1482 gcc_assert (p->ref->next);
1483 gcc_assert (!p->ref->next->next);
1484 gcc_assert (p->ref->next->type == REF_SUBSTRING);
1486 if (p->value.constructor)
1488 const gfc_expr* first = p->value.constructor->expr;
1489 gcc_assert (first->expr_type == EXPR_CONSTANT);
1490 gcc_assert (first->ts.type == BT_CHARACTER);
1491 string_len = first->value.character.length;
1498 p->ts.cl = gfc_get_charlen ();
1499 p->ts.cl->next = NULL;
1500 p->ts.cl->length = NULL;
1502 gfc_free_expr (p->ts.cl->length);
1503 p->ts.cl->length = gfc_int_expr (string_len);
1506 gfc_free_ref_list (p->ref);
1517 cons = find_component_ref (p->value.constructor, p->ref);
1518 remove_subobject_ref (p, cons);
1522 if (find_substring_ref (p, &newp) == FAILURE)
1525 gfc_replace_expr (p, newp);
1526 gfc_free_ref_list (p->ref);
1536 /* Simplify a chain of references. */
1539 simplify_ref_chain (gfc_ref *ref, int type)
1543 for (; ref; ref = ref->next)
1548 for (n = 0; n < ref->u.ar.dimen; n++)
1550 if (gfc_simplify_expr (ref->u.ar.start[n], type) == FAILURE)
1552 if (gfc_simplify_expr (ref->u.ar.end[n], type) == FAILURE)
1554 if (gfc_simplify_expr (ref->u.ar.stride[n], type) == FAILURE)
1560 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1562 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1574 /* Try to substitute the value of a parameter variable. */
1577 simplify_parameter_variable (gfc_expr *p, int type)
1582 e = gfc_copy_expr (p->symtree->n.sym->value);
1588 /* Do not copy subobject refs for constant. */
1589 if (e->expr_type != EXPR_CONSTANT && p->ref != NULL)
1590 e->ref = gfc_copy_ref (p->ref);
1591 t = gfc_simplify_expr (e, type);
1593 /* Only use the simplification if it eliminated all subobject references. */
1594 if (t == SUCCESS && !e->ref)
1595 gfc_replace_expr (p, e);
1602 /* Given an expression, simplify it by collapsing constant
1603 expressions. Most simplification takes place when the expression
1604 tree is being constructed. If an intrinsic function is simplified
1605 at some point, we get called again to collapse the result against
1608 We work by recursively simplifying expression nodes, simplifying
1609 intrinsic functions where possible, which can lead to further
1610 constant collapsing. If an operator has constant operand(s), we
1611 rip the expression apart, and rebuild it, hoping that it becomes
1614 The expression type is defined for:
1615 0 Basic expression parsing
1616 1 Simplifying array constructors -- will substitute
1618 Returns FAILURE on error, SUCCESS otherwise.
1619 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1622 gfc_simplify_expr (gfc_expr *p, int type)
1624 gfc_actual_arglist *ap;
1629 switch (p->expr_type)
1636 for (ap = p->value.function.actual; ap; ap = ap->next)
1637 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1640 if (p->value.function.isym != NULL
1641 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1646 case EXPR_SUBSTRING:
1647 if (simplify_ref_chain (p->ref, type) == FAILURE)
1650 if (gfc_is_constant_expr (p))
1655 if (p->ref && p->ref->u.ss.start)
1657 gfc_extract_int (p->ref->u.ss.start, &start);
1658 start--; /* Convert from one-based to zero-based. */
1663 if (p->ref && p->ref->u.ss.end)
1664 gfc_extract_int (p->ref->u.ss.end, &end);
1666 end = p->value.character.length;
1668 s = gfc_get_wide_string (end - start + 2);
1669 memcpy (s, p->value.character.string + start,
1670 (end - start) * sizeof (gfc_char_t));
1671 s[end - start + 1] = '\0'; /* TODO: C-style string. */
1672 gfc_free (p->value.character.string);
1673 p->value.character.string = s;
1674 p->value.character.length = end - start;
1675 p->ts.cl = gfc_get_charlen ();
1676 p->ts.cl->next = gfc_current_ns->cl_list;
1677 gfc_current_ns->cl_list = p->ts.cl;
1678 p->ts.cl->length = gfc_int_expr (p->value.character.length);
1679 gfc_free_ref_list (p->ref);
1681 p->expr_type = EXPR_CONSTANT;
1686 if (simplify_intrinsic_op (p, type) == FAILURE)
1691 /* Only substitute array parameter variables if we are in an
1692 initialization expression, or we want a subsection. */
1693 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1694 && (gfc_init_expr || p->ref
1695 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1697 if (simplify_parameter_variable (p, type) == FAILURE)
1704 gfc_simplify_iterator_var (p);
1707 /* Simplify subcomponent references. */
1708 if (simplify_ref_chain (p->ref, type) == FAILURE)
1713 case EXPR_STRUCTURE:
1715 if (simplify_ref_chain (p->ref, type) == FAILURE)
1718 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1721 if (p->expr_type == EXPR_ARRAY && p->ref && p->ref->type == REF_ARRAY
1722 && p->ref->u.ar.type == AR_FULL)
1723 gfc_expand_constructor (p);
1725 if (simplify_const_ref (p) == FAILURE)
1739 /* Returns the type of an expression with the exception that iterator
1740 variables are automatically integers no matter what else they may
1746 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1753 /* Check an intrinsic arithmetic operation to see if it is consistent
1754 with some type of expression. */
1756 static gfc_try check_init_expr (gfc_expr *);
1759 /* Scalarize an expression for an elemental intrinsic call. */
1762 scalarize_intrinsic_call (gfc_expr *e)
1764 gfc_actual_arglist *a, *b;
1765 gfc_constructor *args[5], *ctor, *new_ctor;
1766 gfc_expr *expr, *old;
1767 int n, i, rank[5], array_arg;
1769 /* Find which, if any, arguments are arrays. Assume that the old
1770 expression carries the type information and that the first arg
1771 that is an array expression carries all the shape information.*/
1773 a = e->value.function.actual;
1774 for (; a; a = a->next)
1777 if (a->expr->expr_type != EXPR_ARRAY)
1780 expr = gfc_copy_expr (a->expr);
1787 old = gfc_copy_expr (e);
1789 gfc_free_constructor (expr->value.constructor);
1790 expr->value.constructor = NULL;
1793 expr->where = old->where;
1794 expr->expr_type = EXPR_ARRAY;
1796 /* Copy the array argument constructors into an array, with nulls
1799 a = old->value.function.actual;
1800 for (; a; a = a->next)
1802 /* Check that this is OK for an initialization expression. */
1803 if (a->expr && check_init_expr (a->expr) == FAILURE)
1807 if (a->expr && a->expr->rank && a->expr->expr_type == EXPR_VARIABLE)
1809 rank[n] = a->expr->rank;
1810 ctor = a->expr->symtree->n.sym->value->value.constructor;
1811 args[n] = gfc_copy_constructor (ctor);
1813 else if (a->expr && a->expr->expr_type == EXPR_ARRAY)
1816 rank[n] = a->expr->rank;
1819 args[n] = gfc_copy_constructor (a->expr->value.constructor);
1827 /* Using the array argument as the master, step through the array
1828 calling the function for each element and advancing the array
1829 constructors together. */
1830 ctor = args[array_arg - 1];
1832 for (; ctor; ctor = ctor->next)
1834 if (expr->value.constructor == NULL)
1835 expr->value.constructor
1836 = new_ctor = gfc_get_constructor ();
1839 new_ctor->next = gfc_get_constructor ();
1840 new_ctor = new_ctor->next;
1842 new_ctor->expr = gfc_copy_expr (old);
1843 gfc_free_actual_arglist (new_ctor->expr->value.function.actual);
1845 b = old->value.function.actual;
1846 for (i = 0; i < n; i++)
1849 new_ctor->expr->value.function.actual
1850 = a = gfc_get_actual_arglist ();
1853 a->next = gfc_get_actual_arglist ();
1857 a->expr = gfc_copy_expr (args[i]->expr);
1859 a->expr = gfc_copy_expr (b->expr);
1864 /* Simplify the function calls. If the simplification fails, the
1865 error will be flagged up down-stream or the library will deal
1867 gfc_simplify_expr (new_ctor->expr, 0);
1869 for (i = 0; i < n; i++)
1871 args[i] = args[i]->next;
1873 for (i = 1; i < n; i++)
1874 if (rank[i] && ((args[i] != NULL && args[array_arg - 1] == NULL)
1875 || (args[i] == NULL && args[array_arg - 1] != NULL)))
1881 gfc_free_expr (old);
1885 gfc_error_now ("elemental function arguments at %C are not compliant");
1888 gfc_free_expr (expr);
1889 gfc_free_expr (old);
1895 check_intrinsic_op (gfc_expr *e, gfc_try (*check_function) (gfc_expr *))
1897 gfc_expr *op1 = e->value.op.op1;
1898 gfc_expr *op2 = e->value.op.op2;
1900 if ((*check_function) (op1) == FAILURE)
1903 switch (e->value.op.op)
1905 case INTRINSIC_UPLUS:
1906 case INTRINSIC_UMINUS:
1907 if (!numeric_type (et0 (op1)))
1912 case INTRINSIC_EQ_OS:
1914 case INTRINSIC_NE_OS:
1916 case INTRINSIC_GT_OS:
1918 case INTRINSIC_GE_OS:
1920 case INTRINSIC_LT_OS:
1922 case INTRINSIC_LE_OS:
1923 if ((*check_function) (op2) == FAILURE)
1926 if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER)
1927 && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2))))
1929 gfc_error ("Numeric or CHARACTER operands are required in "
1930 "expression at %L", &e->where);
1935 case INTRINSIC_PLUS:
1936 case INTRINSIC_MINUS:
1937 case INTRINSIC_TIMES:
1938 case INTRINSIC_DIVIDE:
1939 case INTRINSIC_POWER:
1940 if ((*check_function) (op2) == FAILURE)
1943 if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2)))
1948 case INTRINSIC_CONCAT:
1949 if ((*check_function) (op2) == FAILURE)
1952 if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER)
1954 gfc_error ("Concatenation operator in expression at %L "
1955 "must have two CHARACTER operands", &op1->where);
1959 if (op1->ts.kind != op2->ts.kind)
1961 gfc_error ("Concat operator at %L must concatenate strings of the "
1962 "same kind", &e->where);
1969 if (et0 (op1) != BT_LOGICAL)
1971 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1972 "operand", &op1->where);
1981 case INTRINSIC_NEQV:
1982 if ((*check_function) (op2) == FAILURE)
1985 if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL)
1987 gfc_error ("LOGICAL operands are required in expression at %L",
1994 case INTRINSIC_PARENTHESES:
1998 gfc_error ("Only intrinsic operators can be used in expression at %L",
2006 gfc_error ("Numeric operands are required in expression at %L", &e->where);
2013 check_init_expr_arguments (gfc_expr *e)
2015 gfc_actual_arglist *ap;
2017 for (ap = e->value.function.actual; ap; ap = ap->next)
2018 if (check_init_expr (ap->expr) == FAILURE)
2024 static gfc_try check_restricted (gfc_expr *);
2026 /* F95, 7.1.6.1, Initialization expressions, (7)
2027 F2003, 7.1.7 Initialization expression, (8) */
2030 check_inquiry (gfc_expr *e, int not_restricted)
2033 const char *const *functions;
2035 static const char *const inquiry_func_f95[] = {
2036 "lbound", "shape", "size", "ubound",
2037 "bit_size", "len", "kind",
2038 "digits", "epsilon", "huge", "maxexponent", "minexponent",
2039 "precision", "radix", "range", "tiny",
2043 static const char *const inquiry_func_f2003[] = {
2044 "lbound", "shape", "size", "ubound",
2045 "bit_size", "len", "kind",
2046 "digits", "epsilon", "huge", "maxexponent", "minexponent",
2047 "precision", "radix", "range", "tiny",
2052 gfc_actual_arglist *ap;
2054 if (!e->value.function.isym
2055 || !e->value.function.isym->inquiry)
2058 /* An undeclared parameter will get us here (PR25018). */
2059 if (e->symtree == NULL)
2062 name = e->symtree->n.sym->name;
2064 functions = (gfc_option.warn_std & GFC_STD_F2003)
2065 ? inquiry_func_f2003 : inquiry_func_f95;
2067 for (i = 0; functions[i]; i++)
2068 if (strcmp (functions[i], name) == 0)
2071 if (functions[i] == NULL)
2074 /* At this point we have an inquiry function with a variable argument. The
2075 type of the variable might be undefined, but we need it now, because the
2076 arguments of these functions are not allowed to be undefined. */
2078 for (ap = e->value.function.actual; ap; ap = ap->next)
2083 if (ap->expr->ts.type == BT_UNKNOWN)
2085 if (ap->expr->symtree->n.sym->ts.type == BT_UNKNOWN
2086 && gfc_set_default_type (ap->expr->symtree->n.sym, 0, gfc_current_ns)
2090 ap->expr->ts = ap->expr->symtree->n.sym->ts;
2093 /* Assumed character length will not reduce to a constant expression
2094 with LEN, as required by the standard. */
2095 if (i == 5 && not_restricted
2096 && ap->expr->symtree->n.sym->ts.type == BT_CHARACTER
2097 && ap->expr->symtree->n.sym->ts.cl->length == NULL)
2099 gfc_error ("Assumed character length variable '%s' in constant "
2100 "expression at %L", e->symtree->n.sym->name, &e->where);
2103 else if (not_restricted && check_init_expr (ap->expr) == FAILURE)
2106 if (not_restricted == 0
2107 && ap->expr->expr_type != EXPR_VARIABLE
2108 && check_restricted (ap->expr) == FAILURE)
2116 /* F95, 7.1.6.1, Initialization expressions, (5)
2117 F2003, 7.1.7 Initialization expression, (5) */
2120 check_transformational (gfc_expr *e)
2122 static const char * const trans_func_f95[] = {
2123 "repeat", "reshape", "selected_int_kind",
2124 "selected_real_kind", "transfer", "trim", NULL
2130 if (!e->value.function.isym
2131 || !e->value.function.isym->transformational)
2134 name = e->symtree->n.sym->name;
2136 /* NULL() is dealt with below. */
2137 if (strcmp ("null", name) == 0)
2140 for (i = 0; trans_func_f95[i]; i++)
2141 if (strcmp (trans_func_f95[i], name) == 0)
2144 /* FIXME, F2003: implement translation of initialization
2145 expressions before enabling this check. For F95, error
2146 out if the transformational function is not in the list. */
2148 if (trans_func_f95[i] == NULL
2149 && gfc_notify_std (GFC_STD_F2003,
2150 "transformational intrinsic '%s' at %L is not permitted "
2151 "in an initialization expression", name, &e->where) == FAILURE)
2154 if (trans_func_f95[i] == NULL)
2156 gfc_error("transformational intrinsic '%s' at %L is not permitted "
2157 "in an initialization expression", name, &e->where);
2162 return check_init_expr_arguments (e);
2166 /* F95, 7.1.6.1, Initialization expressions, (6)
2167 F2003, 7.1.7 Initialization expression, (6) */
2170 check_null (gfc_expr *e)
2172 if (strcmp ("null", e->symtree->n.sym->name) != 0)
2175 return check_init_expr_arguments (e);
2180 check_elemental (gfc_expr *e)
2182 if (!e->value.function.isym
2183 || !e->value.function.isym->elemental)
2186 if (e->ts.type != BT_INTEGER
2187 && e->ts.type != BT_CHARACTER
2188 && gfc_notify_std (GFC_STD_F2003, "Extension: Evaluation of "
2189 "nonstandard initialization expression at %L",
2190 &e->where) == FAILURE)
2193 return check_init_expr_arguments (e);
2198 check_conversion (gfc_expr *e)
2200 if (!e->value.function.isym
2201 || !e->value.function.isym->conversion)
2204 return check_init_expr_arguments (e);
2208 /* Verify that an expression is an initialization expression. A side
2209 effect is that the expression tree is reduced to a single constant
2210 node if all goes well. This would normally happen when the
2211 expression is constructed but function references are assumed to be
2212 intrinsics in the context of initialization expressions. If
2213 FAILURE is returned an error message has been generated. */
2216 check_init_expr (gfc_expr *e)
2224 switch (e->expr_type)
2227 t = check_intrinsic_op (e, check_init_expr);
2229 t = gfc_simplify_expr (e, 0);
2236 if ((m = check_specification_function (e)) != MATCH_YES)
2238 gfc_intrinsic_sym* isym;
2241 sym = e->symtree->n.sym;
2242 if (!gfc_is_intrinsic (sym, 0, e->where)
2243 || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES)
2245 gfc_error ("Function '%s' in initialization expression at %L "
2246 "must be an intrinsic or a specification function",
2247 e->symtree->n.sym->name, &e->where);
2251 if ((m = check_conversion (e)) == MATCH_NO
2252 && (m = check_inquiry (e, 1)) == MATCH_NO
2253 && (m = check_null (e)) == MATCH_NO
2254 && (m = check_transformational (e)) == MATCH_NO
2255 && (m = check_elemental (e)) == MATCH_NO)
2257 gfc_error ("Intrinsic function '%s' at %L is not permitted "
2258 "in an initialization expression",
2259 e->symtree->n.sym->name, &e->where);
2263 /* Try to scalarize an elemental intrinsic function that has an
2265 isym = gfc_find_function (e->symtree->n.sym->name);
2266 if (isym && isym->elemental
2267 && (t = scalarize_intrinsic_call (e)) == SUCCESS)
2272 t = gfc_simplify_expr (e, 0);
2279 if (gfc_check_iter_variable (e) == SUCCESS)
2282 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
2284 /* A PARAMETER shall not be used to define itself, i.e.
2285 REAL, PARAMETER :: x = transfer(0, x)
2287 if (!e->symtree->n.sym->value)
2289 gfc_error("PARAMETER '%s' is used at %L before its definition "
2290 "is complete", e->symtree->n.sym->name, &e->where);
2294 t = simplify_parameter_variable (e, 0);
2299 if (gfc_in_match_data ())
2304 if (e->symtree->n.sym->as)
2306 switch (e->symtree->n.sym->as->type)
2308 case AS_ASSUMED_SIZE:
2309 gfc_error ("Assumed size array '%s' at %L is not permitted "
2310 "in an initialization expression",
2311 e->symtree->n.sym->name, &e->where);
2314 case AS_ASSUMED_SHAPE:
2315 gfc_error ("Assumed shape array '%s' at %L is not permitted "
2316 "in an initialization expression",
2317 e->symtree->n.sym->name, &e->where);
2321 gfc_error ("Deferred array '%s' at %L is not permitted "
2322 "in an initialization expression",
2323 e->symtree->n.sym->name, &e->where);
2327 gfc_error ("Array '%s' at %L is a variable, which does "
2328 "not reduce to a constant expression",
2329 e->symtree->n.sym->name, &e->where);
2337 gfc_error ("Parameter '%s' at %L has not been declared or is "
2338 "a variable, which does not reduce to a constant "
2339 "expression", e->symtree->n.sym->name, &e->where);
2348 case EXPR_SUBSTRING:
2349 t = check_init_expr (e->ref->u.ss.start);
2353 t = check_init_expr (e->ref->u.ss.end);
2355 t = gfc_simplify_expr (e, 0);
2359 case EXPR_STRUCTURE:
2363 t = gfc_check_constructor (e, check_init_expr);
2367 t = gfc_check_constructor (e, check_init_expr);
2371 t = gfc_expand_constructor (e);
2375 t = gfc_check_constructor_type (e);
2379 gfc_internal_error ("check_init_expr(): Unknown expression type");
2385 /* Reduces a general expression to an initialization expression (a constant).
2386 This used to be part of gfc_match_init_expr.
2387 Note that this function doesn't free the given expression on FAILURE. */
2390 gfc_reduce_init_expr (gfc_expr *expr)
2395 t = gfc_resolve_expr (expr);
2397 t = check_init_expr (expr);
2403 if (expr->expr_type == EXPR_ARRAY
2404 && (gfc_check_constructor_type (expr) == FAILURE
2405 || gfc_expand_constructor (expr) == FAILURE))
2408 /* Not all inquiry functions are simplified to constant expressions
2409 so it is necessary to call check_inquiry again. */
2410 if (!gfc_is_constant_expr (expr) && check_inquiry (expr, 1) != MATCH_YES
2411 && !gfc_in_match_data ())
2413 gfc_error ("Initialization expression didn't reduce %C");
2421 /* Match an initialization expression. We work by first matching an
2422 expression, then reducing it to a constant. The reducing it to
2423 constant part requires a global variable to flag the prohibition
2424 of a non-integer exponent in -std=f95 mode. */
2426 bool init_flag = false;
2429 gfc_match_init_expr (gfc_expr **result)
2439 m = gfc_match_expr (&expr);
2446 t = gfc_reduce_init_expr (expr);
2449 gfc_free_expr (expr);
2461 /* Given an actual argument list, test to see that each argument is a
2462 restricted expression and optionally if the expression type is
2463 integer or character. */
2466 restricted_args (gfc_actual_arglist *a)
2468 for (; a; a = a->next)
2470 if (check_restricted (a->expr) == FAILURE)
2478 /************* Restricted/specification expressions *************/
2481 /* Make sure a non-intrinsic function is a specification function. */
2484 external_spec_function (gfc_expr *e)
2488 f = e->value.function.esym;
2490 if (f->attr.proc == PROC_ST_FUNCTION)
2492 gfc_error ("Specification function '%s' at %L cannot be a statement "
2493 "function", f->name, &e->where);
2497 if (f->attr.proc == PROC_INTERNAL)
2499 gfc_error ("Specification function '%s' at %L cannot be an internal "
2500 "function", f->name, &e->where);
2504 if (!f->attr.pure && !f->attr.elemental)
2506 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
2511 if (f->attr.recursive)
2513 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
2514 f->name, &e->where);
2518 return restricted_args (e->value.function.actual);
2522 /* Check to see that a function reference to an intrinsic is a
2523 restricted expression. */
2526 restricted_intrinsic (gfc_expr *e)
2528 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
2529 if (check_inquiry (e, 0) == MATCH_YES)
2532 return restricted_args (e->value.function.actual);
2536 /* Check the expressions of an actual arglist. Used by check_restricted. */
2539 check_arglist (gfc_actual_arglist* arg, gfc_try (*checker) (gfc_expr*))
2541 for (; arg; arg = arg->next)
2542 if (checker (arg->expr) == FAILURE)
2549 /* Check the subscription expressions of a reference chain with a checking
2550 function; used by check_restricted. */
2553 check_references (gfc_ref* ref, gfc_try (*checker) (gfc_expr*))
2563 for (dim = 0; dim != ref->u.ar.dimen; ++dim)
2565 if (checker (ref->u.ar.start[dim]) == FAILURE)
2567 if (checker (ref->u.ar.end[dim]) == FAILURE)
2569 if (checker (ref->u.ar.stride[dim]) == FAILURE)
2575 /* Nothing needed, just proceed to next reference. */
2579 if (checker (ref->u.ss.start) == FAILURE)
2581 if (checker (ref->u.ss.end) == FAILURE)
2590 return check_references (ref->next, checker);
2594 /* Verify that an expression is a restricted expression. Like its
2595 cousin check_init_expr(), an error message is generated if we
2599 check_restricted (gfc_expr *e)
2607 switch (e->expr_type)
2610 t = check_intrinsic_op (e, check_restricted);
2612 t = gfc_simplify_expr (e, 0);
2617 if (e->value.function.esym)
2619 t = check_arglist (e->value.function.actual, &check_restricted);
2621 t = external_spec_function (e);
2625 if (e->value.function.isym && e->value.function.isym->inquiry)
2628 t = check_arglist (e->value.function.actual, &check_restricted);
2631 t = restricted_intrinsic (e);
2636 sym = e->symtree->n.sym;
2639 /* If a dummy argument appears in a context that is valid for a
2640 restricted expression in an elemental procedure, it will have
2641 already been simplified away once we get here. Therefore we
2642 don't need to jump through hoops to distinguish valid from
2644 if (sym->attr.dummy && sym->ns == gfc_current_ns
2645 && sym->ns->proc_name && sym->ns->proc_name->attr.elemental)
2647 gfc_error ("Dummy argument '%s' not allowed in expression at %L",
2648 sym->name, &e->where);
2652 if (sym->attr.optional)
2654 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
2655 sym->name, &e->where);
2659 if (sym->attr.intent == INTENT_OUT)
2661 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
2662 sym->name, &e->where);
2666 /* Check reference chain if any. */
2667 if (check_references (e->ref, &check_restricted) == FAILURE)
2670 /* gfc_is_formal_arg broadcasts that a formal argument list is being
2671 processed in resolve.c(resolve_formal_arglist). This is done so
2672 that host associated dummy array indices are accepted (PR23446).
2673 This mechanism also does the same for the specification expressions
2674 of array-valued functions. */
2676 || sym->attr.in_common
2677 || sym->attr.use_assoc
2679 || sym->attr.implied_index
2680 || sym->attr.flavor == FL_PARAMETER
2681 || (sym->ns && sym->ns == gfc_current_ns->parent)
2682 || (sym->ns && gfc_current_ns->parent
2683 && sym->ns == gfc_current_ns->parent->parent)
2684 || (sym->ns->proc_name != NULL
2685 && sym->ns->proc_name->attr.flavor == FL_MODULE)
2686 || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
2692 gfc_error ("Variable '%s' cannot appear in the expression at %L",
2693 sym->name, &e->where);
2694 /* Prevent a repetition of the error. */
2703 case EXPR_SUBSTRING:
2704 t = gfc_specification_expr (e->ref->u.ss.start);
2708 t = gfc_specification_expr (e->ref->u.ss.end);
2710 t = gfc_simplify_expr (e, 0);
2714 case EXPR_STRUCTURE:
2715 t = gfc_check_constructor (e, check_restricted);
2719 t = gfc_check_constructor (e, check_restricted);
2723 gfc_internal_error ("check_restricted(): Unknown expression type");
2730 /* Check to see that an expression is a specification expression. If
2731 we return FAILURE, an error has been generated. */
2734 gfc_specification_expr (gfc_expr *e)
2740 if (e->ts.type != BT_INTEGER)
2742 gfc_error ("Expression at %L must be of INTEGER type, found %s",
2743 &e->where, gfc_basic_typename (e->ts.type));
2747 if (e->expr_type == EXPR_FUNCTION
2748 && !e->value.function.isym
2749 && !e->value.function.esym
2750 && !gfc_pure (e->symtree->n.sym))
2752 gfc_error ("Function '%s' at %L must be PURE",
2753 e->symtree->n.sym->name, &e->where);
2754 /* Prevent repeat error messages. */
2755 e->symtree->n.sym->attr.pure = 1;
2761 gfc_error ("Expression at %L must be scalar", &e->where);
2765 if (gfc_simplify_expr (e, 0) == FAILURE)
2768 return check_restricted (e);
2772 /************** Expression conformance checks. *************/
2774 /* Given two expressions, make sure that the arrays are conformable. */
2777 gfc_check_conformance (const char *optype_msgid, gfc_expr *op1, gfc_expr *op2)
2779 int op1_flag, op2_flag, d;
2780 mpz_t op1_size, op2_size;
2783 if (op1->rank == 0 || op2->rank == 0)
2786 if (op1->rank != op2->rank)
2788 gfc_error ("Incompatible ranks in %s (%d and %d) at %L", _(optype_msgid),
2789 op1->rank, op2->rank, &op1->where);
2795 for (d = 0; d < op1->rank; d++)
2797 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
2798 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
2800 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
2802 gfc_error ("Different shape for %s at %L on dimension %d "
2803 "(%d and %d)", _(optype_msgid), &op1->where, d + 1,
2804 (int) mpz_get_si (op1_size),
2805 (int) mpz_get_si (op2_size));
2811 mpz_clear (op1_size);
2813 mpz_clear (op2_size);
2823 /* Given an assignable expression and an arbitrary expression, make
2824 sure that the assignment can take place. */
2827 gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
2833 sym = lvalue->symtree->n.sym;
2835 /* Check INTENT(IN), unless the object itself is the component or
2836 sub-component of a pointer. */
2837 has_pointer = sym->attr.pointer;
2839 for (ref = lvalue->ref; ref; ref = ref->next)
2840 if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
2846 if (!has_pointer && sym->attr.intent == INTENT_IN)
2848 gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L",
2849 sym->name, &lvalue->where);
2853 /* 12.5.2.2, Note 12.26: The result variable is very similar to any other
2854 variable local to a function subprogram. Its existence begins when
2855 execution of the function is initiated and ends when execution of the
2856 function is terminated...
2857 Therefore, the left hand side is no longer a variable, when it is: */
2858 if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_ST_FUNCTION
2859 && !sym->attr.external)
2864 /* (i) Use associated; */
2865 if (sym->attr.use_assoc)
2868 /* (ii) The assignment is in the main program; or */
2869 if (gfc_current_ns->proc_name->attr.is_main_program)
2872 /* (iii) A module or internal procedure... */
2873 if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL
2874 || gfc_current_ns->proc_name->attr.proc == PROC_MODULE)
2875 && gfc_current_ns->parent
2876 && (!(gfc_current_ns->parent->proc_name->attr.function
2877 || gfc_current_ns->parent->proc_name->attr.subroutine)
2878 || gfc_current_ns->parent->proc_name->attr.is_main_program))
2880 /* ... that is not a function... */
2881 if (!gfc_current_ns->proc_name->attr.function)
2884 /* ... or is not an entry and has a different name. */
2885 if (!sym->attr.entry && sym->name != gfc_current_ns->proc_name->name)
2889 /* (iv) Host associated and not the function symbol or the
2890 parent result. This picks up sibling references, which
2891 cannot be entries. */
2892 if (!sym->attr.entry
2893 && sym->ns == gfc_current_ns->parent
2894 && sym != gfc_current_ns->proc_name
2895 && sym != gfc_current_ns->parent->proc_name->result)
2900 gfc_error ("'%s' at %L is not a VALUE", sym->name, &lvalue->where);
2905 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
2907 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
2908 lvalue->rank, rvalue->rank, &lvalue->where);
2912 if (lvalue->ts.type == BT_UNKNOWN)
2914 gfc_error ("Variable type is UNKNOWN in assignment at %L",
2919 if (rvalue->expr_type == EXPR_NULL)
2921 if (has_pointer && (ref == NULL || ref->next == NULL)
2922 && lvalue->symtree->n.sym->attr.data)
2926 gfc_error ("NULL appears on right-hand side in assignment at %L",
2932 if (sym->attr.cray_pointee
2933 && lvalue->ref != NULL
2934 && lvalue->ref->u.ar.type == AR_FULL
2935 && lvalue->ref->u.ar.as->cp_was_assumed)
2937 gfc_error ("Vector assignment to assumed-size Cray Pointee at %L "
2938 "is illegal", &lvalue->where);
2942 /* This is possibly a typo: x = f() instead of x => f(). */
2943 if (gfc_option.warn_surprising
2944 && rvalue->expr_type == EXPR_FUNCTION
2945 && rvalue->symtree->n.sym->attr.pointer)
2946 gfc_warning ("POINTER valued function appears on right-hand side of "
2947 "assignment at %L", &rvalue->where);
2949 /* Check size of array assignments. */
2950 if (lvalue->rank != 0 && rvalue->rank != 0
2951 && gfc_check_conformance ("array assignment", lvalue, rvalue) != SUCCESS)
2954 if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER
2955 && lvalue->symtree->n.sym->attr.data
2956 && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L used to "
2957 "initialize non-integer variable '%s'",
2958 &rvalue->where, lvalue->symtree->n.sym->name)
2961 else if (rvalue->is_boz && !lvalue->symtree->n.sym->attr.data
2962 && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L outside "
2963 "a DATA statement and outside INT/REAL/DBLE/CMPLX",
2964 &rvalue->where) == FAILURE)
2967 /* Handle the case of a BOZ literal on the RHS. */
2968 if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER)
2971 if (gfc_option.warn_surprising)
2972 gfc_warning ("BOZ literal at %L is bitwise transferred "
2973 "non-integer symbol '%s'", &rvalue->where,
2974 lvalue->symtree->n.sym->name);
2975 if (!gfc_convert_boz (rvalue, &lvalue->ts))
2977 if ((rc = gfc_range_check (rvalue)) != ARITH_OK)
2979 if (rc == ARITH_UNDERFLOW)
2980 gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L"
2981 ". This check can be disabled with the option "
2982 "-fno-range-check", &rvalue->where);
2983 else if (rc == ARITH_OVERFLOW)
2984 gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L"
2985 ". This check can be disabled with the option "
2986 "-fno-range-check", &rvalue->where);
2987 else if (rc == ARITH_NAN)
2988 gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L"
2989 ". This check can be disabled with the option "
2990 "-fno-range-check", &rvalue->where);
2995 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
2998 /* Only DATA Statements come here. */
3001 /* Numeric can be converted to any other numeric. And Hollerith can be
3002 converted to any other type. */
3003 if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
3004 || rvalue->ts.type == BT_HOLLERITH)
3007 if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
3010 gfc_error ("Incompatible types in DATA statement at %L; attempted "
3011 "conversion of %s to %s", &lvalue->where,
3012 gfc_typename (&rvalue->ts), gfc_typename (&lvalue->ts));
3017 /* Assignment is the only case where character variables of different
3018 kind values can be converted into one another. */
3019 if (lvalue->ts.type == BT_CHARACTER && rvalue->ts.type == BT_CHARACTER)
3021 if (lvalue->ts.kind != rvalue->ts.kind)
3022 gfc_convert_chartype (rvalue, &lvalue->ts);
3027 return gfc_convert_type (rvalue, &lvalue->ts, 1);
3031 /* Check that a pointer assignment is OK. We first check lvalue, and
3032 we only check rvalue if it's not an assignment to NULL() or a
3033 NULLIFY statement. */
3036 gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue)
3038 symbol_attribute attr;
3041 int pointer, check_intent_in;
3043 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN
3044 && !lvalue->symtree->n.sym->attr.proc_pointer)
3046 gfc_error ("Pointer assignment target is not a POINTER at %L",
3051 if (lvalue->symtree->n.sym->attr.flavor == FL_PROCEDURE
3052 && lvalue->symtree->n.sym->attr.use_assoc
3053 && !lvalue->symtree->n.sym->attr.proc_pointer)
3055 gfc_error ("'%s' in the pointer assignment at %L cannot be an "
3056 "l-value since it is a procedure",
3057 lvalue->symtree->n.sym->name, &lvalue->where);
3062 /* Check INTENT(IN), unless the object itself is the component or
3063 sub-component of a pointer. */
3064 check_intent_in = 1;
3065 pointer = lvalue->symtree->n.sym->attr.pointer
3066 | lvalue->symtree->n.sym->attr.proc_pointer;
3068 for (ref = lvalue->ref; ref; ref = ref->next)
3071 check_intent_in = 0;
3073 if (ref->type == REF_COMPONENT)
3074 pointer = ref->u.c.component->attr.pointer;
3076 if (ref->type == REF_ARRAY && ref->next == NULL)
3078 if (ref->u.ar.type == AR_FULL)
3081 if (ref->u.ar.type != AR_SECTION)
3083 gfc_error ("Expected bounds specification for '%s' at %L",
3084 lvalue->symtree->n.sym->name, &lvalue->where);
3088 if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Bounds "
3089 "specification for '%s' in pointer assignment "
3090 "at %L", lvalue->symtree->n.sym->name,
3091 &lvalue->where) == FAILURE)
3094 gfc_error ("Pointer bounds remapping at %L is not yet implemented "
3095 "in gfortran", &lvalue->where);
3096 /* TODO: See PR 29785. Add checks that all lbounds are specified and
3097 either never or always the upper-bound; strides shall not be
3103 if (check_intent_in && lvalue->symtree->n.sym->attr.intent == INTENT_IN)
3105 gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L",
3106 lvalue->symtree->n.sym->name, &lvalue->where);
3112 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
3116 is_pure = gfc_pure (NULL);
3118 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym)
3119 && lvalue->symtree->n.sym->value != rvalue)
3121 gfc_error ("Bad pointer object in PURE procedure at %L", &lvalue->where);
3125 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
3126 kind, etc for lvalue and rvalue must match, and rvalue must be a
3127 pure variable if we're in a pure function. */
3128 if (rvalue->expr_type == EXPR_NULL && rvalue->ts.type == BT_UNKNOWN)
3131 /* Checks on rvalue for procedure pointer assignments. */
3132 if (lvalue->symtree->n.sym->attr.proc_pointer)
3134 attr = gfc_expr_attr (rvalue);
3135 if (!((rvalue->expr_type == EXPR_NULL)
3136 || (rvalue->expr_type == EXPR_FUNCTION && attr.proc_pointer)
3137 || (rvalue->expr_type == EXPR_VARIABLE
3138 && attr.flavor == FL_PROCEDURE)))
3140 gfc_error ("Invalid procedure pointer assignment at %L",
3146 gfc_error ("Abstract interface '%s' is invalid "
3147 "in procedure pointer assignment at %L",
3148 rvalue->symtree->name, &rvalue->where);
3151 if (rvalue->expr_type == EXPR_VARIABLE
3152 && !gfc_compare_interfaces (lvalue->symtree->n.sym,
3153 rvalue->symtree->n.sym, 0))
3155 gfc_error ("Interfaces don't match "
3156 "in procedure pointer assignment at %L", &rvalue->where);
3162 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
3164 gfc_error ("Different types in pointer assignment at %L; attempted "
3165 "assignment of %s to %s", &lvalue->where,
3166 gfc_typename (&rvalue->ts), gfc_typename (&lvalue->ts));
3170 if (lvalue->ts.kind != rvalue->ts.kind)
3172 gfc_error ("Different kind type parameters in pointer "
3173 "assignment at %L", &lvalue->where);
3177 if (lvalue->rank != rvalue->rank)
3179 gfc_error ("Different ranks in pointer assignment at %L",
3184 /* Now punt if we are dealing with a NULLIFY(X) or X = NULL(X). */
3185 if (rvalue->expr_type == EXPR_NULL)
3188 if (lvalue->ts.type == BT_CHARACTER)
3190 gfc_try t = gfc_check_same_strlen (lvalue, rvalue, "pointer assignment");
3195 if (rvalue->expr_type == EXPR_VARIABLE && is_subref_array (rvalue))
3196 lvalue->symtree->n.sym->attr.subref_array_pointer = 1;
3198 attr = gfc_expr_attr (rvalue);
3199 if (!attr.target && !attr.pointer)
3201 gfc_error ("Pointer assignment target is neither TARGET "
3202 "nor POINTER at %L", &rvalue->where);
3206 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
3208 gfc_error ("Bad target in pointer assignment in PURE "
3209 "procedure at %L", &rvalue->where);
3212 if (gfc_has_vector_index (rvalue))
3214 gfc_error ("Pointer assignment with vector subscript "
3215 "on rhs at %L", &rvalue->where);
3219 if (attr.is_protected && attr.use_assoc
3220 && !(attr.pointer || attr.proc_pointer))
3222 gfc_error ("Pointer assignment target has PROTECTED "
3223 "attribute at %L", &rvalue->where);
3231 /* Relative of gfc_check_assign() except that the lvalue is a single
3232 symbol. Used for initialization assignments. */
3235 gfc_check_assign_symbol (gfc_symbol *sym, gfc_expr *rvalue)
3240 memset (&lvalue, '\0', sizeof (gfc_expr));
3242 lvalue.expr_type = EXPR_VARIABLE;
3243 lvalue.ts = sym->ts;
3245 lvalue.rank = sym->as->rank;
3246 lvalue.symtree = (gfc_symtree *) gfc_getmem (sizeof (gfc_symtree));
3247 lvalue.symtree->n.sym = sym;
3248 lvalue.where = sym->declared_at;
3250 if (sym->attr.pointer || sym->attr.proc_pointer)
3251 r = gfc_check_pointer_assign (&lvalue, rvalue);
3253 r = gfc_check_assign (&lvalue, rvalue, 1);
3255 gfc_free (lvalue.symtree);
3261 /* Get an expression for a default initializer. */
3264 gfc_default_initializer (gfc_typespec *ts)
3266 gfc_constructor *tail;
3270 /* See if we have a default initializer. */
3271 for (c = ts->derived->components; c; c = c->next)
3272 if (c->initializer || c->attr.allocatable)
3278 /* Build the constructor. */
3279 init = gfc_get_expr ();
3280 init->expr_type = EXPR_STRUCTURE;
3282 init->where = ts->derived->declared_at;
3285 for (c = ts->derived->components; c; c = c->next)
3288 init->value.constructor = tail = gfc_get_constructor ();
3291 tail->next = gfc_get_constructor ();
3296 tail->expr = gfc_copy_expr (c->initializer);
3298 if (c->attr.allocatable)
3300 tail->expr = gfc_get_expr ();
3301 tail->expr->expr_type = EXPR_NULL;
3302 tail->expr->ts = c->ts;
3309 /* Given a symbol, create an expression node with that symbol as a
3310 variable. If the symbol is array valued, setup a reference of the
3314 gfc_get_variable_expr (gfc_symtree *var)
3318 e = gfc_get_expr ();
3319 e->expr_type = EXPR_VARIABLE;
3321 e->ts = var->n.sym->ts;
3323 if (var->n.sym->as != NULL)
3325 e->rank = var->n.sym->as->rank;
3326 e->ref = gfc_get_ref ();
3327 e->ref->type = REF_ARRAY;
3328 e->ref->u.ar.type = AR_FULL;
3335 /* General expression traversal function. */
3338 gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym,
3339 bool (*func)(gfc_expr *, gfc_symbol *, int*),
3344 gfc_actual_arglist *args;
3351 if ((*func) (expr, sym, &f))
3354 if (expr->ts.type == BT_CHARACTER
3356 && expr->ts.cl->length
3357 && expr->ts.cl->length->expr_type != EXPR_CONSTANT
3358 && gfc_traverse_expr (expr->ts.cl->length, sym, func, f))
3361 switch (expr->expr_type)
3364 for (args = expr->value.function.actual; args; args = args->next)
3366 if (gfc_traverse_expr (args->expr, sym, func, f))
3374 case EXPR_SUBSTRING:
3377 case EXPR_STRUCTURE:
3379 for (c = expr->value.constructor; c; c = c->next)
3381 if (gfc_traverse_expr (c->expr, sym, func, f))
3385 if (gfc_traverse_expr (c->iterator->var, sym, func, f))
3387 if (gfc_traverse_expr (c->iterator->start, sym, func, f))
3389 if (gfc_traverse_expr (c->iterator->end, sym, func, f))
3391 if (gfc_traverse_expr (c->iterator->step, sym, func, f))
3398 if (gfc_traverse_expr (expr->value.op.op1, sym, func, f))
3400 if (gfc_traverse_expr (expr->value.op.op2, sym, func, f))
3416 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
3418 if (gfc_traverse_expr (ar.start[i], sym, func, f))
3420 if (gfc_traverse_expr (ar.end[i], sym, func, f))
3422 if (gfc_traverse_expr (ar.stride[i], sym, func, f))
3428 if (gfc_traverse_expr (ref->u.ss.start, sym, func, f))
3430 if (gfc_traverse_expr (ref->u.ss.end, sym, func, f))
3435 if (ref->u.c.component->ts.type == BT_CHARACTER
3436 && ref->u.c.component->ts.cl
3437 && ref->u.c.component->ts.cl->length
3438 && ref->u.c.component->ts.cl->length->expr_type
3440 && gfc_traverse_expr (ref->u.c.component->ts.cl->length,
3444 if (ref->u.c.component->as)
3445 for (i = 0; i < ref->u.c.component->as->rank; i++)
3447 if (gfc_traverse_expr (ref->u.c.component->as->lower[i],
3450 if (gfc_traverse_expr (ref->u.c.component->as->upper[i],
3464 /* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */
3467 expr_set_symbols_referenced (gfc_expr *expr,
3468 gfc_symbol *sym ATTRIBUTE_UNUSED,
3469 int *f ATTRIBUTE_UNUSED)
3471 if (expr->expr_type != EXPR_VARIABLE)
3473 gfc_set_sym_referenced (expr->symtree->n.sym);
3478 gfc_expr_set_symbols_referenced (gfc_expr *expr)
3480 gfc_traverse_expr (expr, NULL, expr_set_symbols_referenced, 0);
3484 /* Walk an expression tree and check each variable encountered for being typed.
3485 If strict is not set, a top-level variable is tolerated untyped in -std=gnu
3486 mode as is a basic arithmetic expression using those; this is for things in
3489 INTEGER :: arr(n), n
3490 INTEGER :: arr(n + 1), n
3492 The namespace is needed for IMPLICIT typing. */
3494 static gfc_namespace* check_typed_ns;
3497 expr_check_typed_help (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED,
3498 int* f ATTRIBUTE_UNUSED)
3502 if (e->expr_type != EXPR_VARIABLE)
3505 gcc_assert (e->symtree);
3506 t = gfc_check_symbol_typed (e->symtree->n.sym, check_typed_ns,
3509 return (t == FAILURE);
3513 gfc_expr_check_typed (gfc_expr* e, gfc_namespace* ns, bool strict)
3517 /* If this is a top-level variable or EXPR_OP, do the check with strict given
3521 if (e->expr_type == EXPR_VARIABLE && !e->ref)
3522 return gfc_check_symbol_typed (e->symtree->n.sym, ns, strict, e->where);
3524 if (e->expr_type == EXPR_OP)
3526 gfc_try t = SUCCESS;
3528 gcc_assert (e->value.op.op1);
3529 t = gfc_expr_check_typed (e->value.op.op1, ns, strict);
3531 if (t == SUCCESS && e->value.op.op2)
3532 t = gfc_expr_check_typed (e->value.op.op2, ns, strict);
3538 /* Otherwise, walk the expression and do it strictly. */
3539 check_typed_ns = ns;
3540 error_found = gfc_traverse_expr (e, NULL, &expr_check_typed_help, 0);
3542 return error_found ? FAILURE : SUCCESS;
3545 /* Walk an expression tree and replace all symbols with a corresponding symbol
3546 in the formal_ns of "sym". Needed for copying interfaces in PROCEDURE
3547 statements. The boolean return value is required by gfc_traverse_expr. */
3550 replace_symbol (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED)
3552 if ((expr->expr_type == EXPR_VARIABLE
3553 || (expr->expr_type == EXPR_FUNCTION
3554 && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
3555 && expr->symtree->n.sym->ns == sym->ts.interface->formal_ns)
3558 gfc_namespace *ns = sym->formal_ns;
3559 /* Don't use gfc_get_symtree as we prefer to fail badly if we don't find
3560 the symtree rather than create a new one (and probably fail later). */
3561 stree = gfc_find_symtree (ns ? ns->sym_root : gfc_current_ns->sym_root,
3562 expr->symtree->n.sym->name);
3564 stree->n.sym->attr = expr->symtree->n.sym->attr;
3565 expr->symtree = stree;
3571 gfc_expr_replace_symbols (gfc_expr *expr, gfc_symbol *dest)
3573 gfc_traverse_expr (expr, dest, &replace_symbol, 0);