1 /* Routines for manipulation of expression nodes.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation,
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
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 COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
32 /* Get a new expr node. */
39 e = gfc_getmem (sizeof (gfc_expr));
41 gfc_clear_ts (&e->ts);
53 /* Free an argument list and everything below it. */
56 gfc_free_actual_arglist (gfc_actual_arglist * a1)
58 gfc_actual_arglist *a2;
63 gfc_free_expr (a1->expr);
70 /* Copy an arglist structure and all of the arguments. */
73 gfc_copy_actual_arglist (gfc_actual_arglist * p)
75 gfc_actual_arglist *head, *tail, *new;
79 for (; p; p = p->next)
81 new = gfc_get_actual_arglist ();
84 new->expr = gfc_copy_expr (p->expr);
99 /* Free a list of reference structures. */
102 gfc_free_ref_list (gfc_ref * p)
114 for (i = 0; i < GFC_MAX_DIMENSIONS; i++)
116 gfc_free_expr (p->u.ar.start[i]);
117 gfc_free_expr (p->u.ar.end[i]);
118 gfc_free_expr (p->u.ar.stride[i]);
124 gfc_free_expr (p->u.ss.start);
125 gfc_free_expr (p->u.ss.end);
137 /* Workhorse function for gfc_free_expr() that frees everything
138 beneath an expression node, but not the node itself. This is
139 useful when we want to simplify a node and replace it with
140 something else or the expression node belongs to another structure. */
143 free_expr0 (gfc_expr * e)
147 switch (e->expr_type)
153 mpz_clear (e->value.integer);
157 mpfr_clear (e->value.real);
161 gfc_free (e->value.character.string);
165 mpfr_clear (e->value.complex.r);
166 mpfr_clear (e->value.complex.i);
177 gfc_free_expr (e->op1);
179 gfc_free_expr (e->op2);
183 gfc_free_actual_arglist (e->value.function.actual);
191 gfc_free_constructor (e->value.constructor);
195 gfc_free (e->value.character.string);
202 gfc_internal_error ("free_expr0(): Bad expr type");
205 /* Free a shape array. */
206 if (e->shape != NULL)
208 for (n = 0; n < e->rank; n++)
209 mpz_clear (e->shape[n]);
214 gfc_free_ref_list (e->ref);
216 memset (e, '\0', sizeof (gfc_expr));
220 /* Free an expression node and everything beneath it. */
223 gfc_free_expr (gfc_expr * e)
234 /* Graft the *src expression onto the *dest subexpression. */
237 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)
256 if (expr->expr_type != EXPR_CONSTANT)
257 return "Constant expression required at %C";
259 if (expr->ts.type != BT_INTEGER)
260 return "Integer expression required at %C";
262 if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0)
263 || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0))
265 return "Integer value too large in expression at %C";
268 *result = (int) mpz_get_si (expr->value.integer);
274 /* Recursively copy a list of reference structures. */
277 copy_ref (gfc_ref * src)
285 dest = gfc_get_ref ();
286 dest->type = src->type;
291 ar = gfc_copy_array_ref (&src->u.ar);
297 dest->u.c = src->u.c;
301 dest->u.ss = src->u.ss;
302 dest->u.ss.start = gfc_copy_expr (src->u.ss.start);
303 dest->u.ss.end = gfc_copy_expr (src->u.ss.end);
307 dest->next = copy_ref (src->next);
313 /* Copy a shape array. */
316 gfc_copy_shape (mpz_t * shape, int rank)
324 new_shape = gfc_get_shape (rank);
326 for (n = 0; n < rank; n++)
327 mpz_init_set (new_shape[n], shape[n]);
333 /* Copy a shape array excluding dimension N, where N is an integer
334 constant expression. Dimensions are numbered in fortran style --
337 So, if the original shape array contains R elements
338 { s1 ... sN-1 sN sN+1 ... sR-1 sR}
339 the result contains R-1 elements:
340 { s1 ... sN-1 sN+1 ... sR-1}
342 If anything goes wrong -- N is not a constant, its value is out
343 of range -- or anything else, just returns NULL.
347 gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim)
349 mpz_t *new_shape, *s;
355 || dim->expr_type != EXPR_CONSTANT
356 || dim->ts.type != BT_INTEGER)
359 n = mpz_get_si (dim->value.integer);
360 n--; /* Convert to zero based index */
361 if (n < 0 && n >= rank)
364 s = new_shape = gfc_get_shape (rank-1);
366 for (i = 0; i < rank; i++)
370 mpz_init_set (*s, shape[i]);
377 /* Given an expression pointer, return a copy of the expression. This
378 subroutine is recursive. */
381 gfc_copy_expr (gfc_expr * p)
392 switch (q->expr_type)
395 s = gfc_getmem (p->value.character.length + 1);
396 q->value.character.string = s;
398 memcpy (s, p->value.character.string, p->value.character.length + 1);
400 q->op1 = gfc_copy_expr (p->op1);
401 q->op2 = gfc_copy_expr (p->op2);
408 mpz_init_set (q->value.integer, p->value.integer);
412 gfc_set_model_kind (q->ts.kind);
413 mpfr_init (q->value.real);
414 mpfr_set (q->value.real, p->value.real, GFC_RND_MODE);
418 gfc_set_model_kind (q->ts.kind);
419 mpfr_init (q->value.complex.r);
420 mpfr_init (q->value.complex.i);
421 mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE);
422 mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE);
426 s = gfc_getmem (p->value.character.length + 1);
427 q->value.character.string = s;
429 memcpy (s, p->value.character.string,
430 p->value.character.length + 1);
435 break; /* Already done */
439 gfc_internal_error ("gfc_copy_expr(): Bad expr node");
449 case INTRINSIC_UPLUS:
450 case INTRINSIC_UMINUS:
451 q->op1 = gfc_copy_expr (p->op1);
454 default: /* Binary operators */
455 q->op1 = gfc_copy_expr (p->op1);
456 q->op2 = gfc_copy_expr (p->op2);
463 q->value.function.actual =
464 gfc_copy_actual_arglist (p->value.function.actual);
469 q->value.constructor = gfc_copy_constructor (p->value.constructor);
477 q->shape = gfc_copy_shape (p->shape, p->rank);
479 q->ref = copy_ref (p->ref);
485 /* Return the maximum kind of two expressions. In general, higher
486 kind numbers mean more precision for numeric types. */
489 gfc_kind_max (gfc_expr * e1, gfc_expr * e2)
492 return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind;
496 /* Returns nonzero if the type is numeric, zero otherwise. */
499 numeric_type (bt type)
502 return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER;
506 /* Returns nonzero if the typespec is a numeric type, zero otherwise. */
509 gfc_numeric_ts (gfc_typespec * ts)
512 return numeric_type (ts->type);
516 /* Returns an expression node that is an integer constant. */
525 p->expr_type = EXPR_CONSTANT;
526 p->ts.type = BT_INTEGER;
527 p->ts.kind = gfc_default_integer_kind ();
529 p->where = gfc_current_locus;
530 mpz_init_set_si (p->value.integer, i);
536 /* Returns an expression node that is a logical constant. */
539 gfc_logical_expr (int i, locus * where)
545 p->expr_type = EXPR_CONSTANT;
546 p->ts.type = BT_LOGICAL;
547 p->ts.kind = gfc_default_logical_kind ();
550 where = &gfc_current_locus;
552 p->value.logical = i;
558 /* Return an expression node with an optional argument list attached.
559 A variable number of gfc_expr pointers are strung together in an
560 argument list with a NULL pointer terminating the list. */
563 gfc_build_conversion (gfc_expr * e)
568 p->expr_type = EXPR_FUNCTION;
570 p->value.function.actual = NULL;
572 p->value.function.actual = gfc_get_actual_arglist ();
573 p->value.function.actual->expr = e;
579 /* Given an expression node with some sort of numeric binary
580 expression, insert type conversions required to make the operands
583 The exception is that the operands of an exponential don't have to
584 have the same type. If possible, the base is promoted to the type
585 of the exponent. For example, 1**2.3 becomes 1.0**2.3, but
586 1.0**2 stays as it is. */
589 gfc_type_convert_binary (gfc_expr * e)
596 if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN)
598 gfc_clear_ts (&e->ts);
602 /* Kind conversions of same type. */
603 if (op1->ts.type == op2->ts.type)
606 if (op1->ts.kind == op2->ts.kind)
608 /* No type conversions. */
613 if (op1->ts.kind > op2->ts.kind)
614 gfc_convert_type (op2, &op1->ts, 2);
616 gfc_convert_type (op1, &op2->ts, 2);
622 /* Integer combined with real or complex. */
623 if (op2->ts.type == BT_INTEGER)
627 /* Special cose for ** operator. */
628 if (e->operator == INTRINSIC_POWER)
631 gfc_convert_type (e->op2, &e->ts, 2);
635 if (op1->ts.type == BT_INTEGER)
638 gfc_convert_type (e->op1, &e->ts, 2);
642 /* Real combined with complex. */
643 e->ts.type = BT_COMPLEX;
644 if (op1->ts.kind > op2->ts.kind)
645 e->ts.kind = op1->ts.kind;
647 e->ts.kind = op2->ts.kind;
648 if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind)
649 gfc_convert_type (e->op1, &e->ts, 2);
650 if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind)
651 gfc_convert_type (e->op2, &e->ts, 2);
658 /* Function to determine if an expression is constant or not. This
659 function expects that the expression has already been simplified. */
662 gfc_is_constant_expr (gfc_expr * e)
665 gfc_actual_arglist *arg;
671 switch (e->expr_type)
674 rv = (gfc_is_constant_expr (e->op1)
676 || gfc_is_constant_expr (e->op2)));
685 /* Call to intrinsic with at least one argument. */
687 if (e->value.function.isym && e->value.function.actual)
689 for (arg = e->value.function.actual; arg; arg = arg->next)
691 if (!gfc_is_constant_expr (arg->expr))
705 rv = gfc_is_constant_expr (e->op1) && gfc_is_constant_expr (e->op2);
710 for (c = e->value.constructor; c; c = c->next)
711 if (!gfc_is_constant_expr (c->expr))
719 rv = gfc_constant_ac (e);
723 gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type");
730 /* Try to collapse intrinsic expressions. */
733 simplify_intrinsic_op (gfc_expr * p, int type)
735 gfc_expr *op1, *op2, *result;
737 if (p->operator == INTRINSIC_USER)
743 if (gfc_simplify_expr (op1, type) == FAILURE)
745 if (gfc_simplify_expr (op2, type) == FAILURE)
748 if (!gfc_is_constant_expr (op1)
749 || (op2 != NULL && !gfc_is_constant_expr (op2)))
758 case INTRINSIC_UPLUS:
759 result = gfc_uplus (op1);
762 case INTRINSIC_UMINUS:
763 result = gfc_uminus (op1);
767 result = gfc_add (op1, op2);
770 case INTRINSIC_MINUS:
771 result = gfc_subtract (op1, op2);
774 case INTRINSIC_TIMES:
775 result = gfc_multiply (op1, op2);
778 case INTRINSIC_DIVIDE:
779 result = gfc_divide (op1, op2);
782 case INTRINSIC_POWER:
783 result = gfc_power (op1, op2);
786 case INTRINSIC_CONCAT:
787 result = gfc_concat (op1, op2);
791 result = gfc_eq (op1, op2);
795 result = gfc_ne (op1, op2);
799 result = gfc_gt (op1, op2);
803 result = gfc_ge (op1, op2);
807 result = gfc_lt (op1, op2);
811 result = gfc_le (op1, op2);
815 result = gfc_not (op1);
819 result = gfc_and (op1, op2);
823 result = gfc_or (op1, op2);
827 result = gfc_eqv (op1, op2);
831 result = gfc_neqv (op1, op2);
835 gfc_internal_error ("simplify_intrinsic_op(): Bad operator");
845 gfc_replace_expr (p, result);
851 /* Subroutine to simplify constructor expressions. Mutually recursive
852 with gfc_simplify_expr(). */
855 simplify_constructor (gfc_constructor * c, int type)
858 for (; c; c = c->next)
861 && (gfc_simplify_expr (c->iterator->start, type) == FAILURE
862 || gfc_simplify_expr (c->iterator->end, type) == FAILURE
863 || gfc_simplify_expr (c->iterator->step, type) == FAILURE))
866 if (c->expr && gfc_simplify_expr (c->expr, type) == FAILURE)
874 /* Pull a single array element out of an array constructor. */
876 static gfc_constructor *
877 find_array_element (gfc_constructor * cons, gfc_array_ref * ar)
879 unsigned long nelemen;
884 mpz_init_set_ui (offset, 0);
886 for (i = 0; i < ar->dimen; i++)
888 if (ar->start[i]->expr_type != EXPR_CONSTANT)
893 mpz_sub (delta, ar->start[i]->value.integer,
894 ar->as->lower[i]->value.integer);
895 mpz_add (offset, offset, delta);
900 if (mpz_fits_ulong_p (offset))
902 for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--)
923 /* Find a component of a structure constructor. */
925 static gfc_constructor *
926 find_component_ref (gfc_constructor * cons, gfc_ref * ref)
931 comp = ref->u.c.sym->components;
932 pick = ref->u.c.component;
943 /* Replace an expression with the contents of a constructor, removing
944 the subobject reference in the process. */
947 remove_subobject_ref (gfc_expr * p, gfc_constructor * cons)
953 e->ref = p->ref->next;
955 gfc_replace_expr (p, e);
959 /* Simplify a subobject reference of a constructor. This occurs when
960 parameter variable values are substituted. */
963 simplify_const_ref (gfc_expr * p)
965 gfc_constructor *cons;
969 switch (p->ref->type)
972 switch (p->ref->u.ar.type)
975 cons = find_array_element (p->value.constructor, &p->ref->u.ar);
978 remove_subobject_ref (p, cons);
982 if (p->ref->next != NULL)
984 /* TODO: Simplify array subobject references. */
987 gfc_free_ref_list (p->ref);
992 /* TODO: Simplify array subsections. */
999 cons = find_component_ref (p->value.constructor, p->ref);
1000 remove_subobject_ref (p, cons);
1004 /* TODO: Constant substrings. */
1013 /* Simplify a chain of references. */
1016 simplify_ref_chain (gfc_ref * ref, int type)
1020 for (; ref; ref = ref->next)
1025 for (n = 0; n < ref->u.ar.dimen; n++)
1027 if (gfc_simplify_expr (ref->u.ar.start[n], type)
1030 if (gfc_simplify_expr (ref->u.ar.end[n], type)
1033 if (gfc_simplify_expr (ref->u.ar.stride[n], type)
1040 if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE)
1042 if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE)
1054 /* Try to substitute the value of a parameter variable. */
1056 simplify_parameter_variable (gfc_expr * p, int type)
1061 e = gfc_copy_expr (p->symtree->n.sym->value);
1063 e->ref = copy_ref (p->ref);
1064 t = gfc_simplify_expr (e, type);
1066 /* Only use the simplification if it eliminated all subobject
1068 if (t == SUCCESS && ! e->ref)
1069 gfc_replace_expr (p, e);
1076 /* Given an expression, simplify it by collapsing constant
1077 expressions. Most simplification takes place when the expression
1078 tree is being constructed. If an intrinsic function is simplified
1079 at some point, we get called again to collapse the result against
1082 We work by recursively simplifying expression nodes, simplifying
1083 intrinsic functions where possible, which can lead to further
1084 constant collapsing. If an operator has constant operand(s), we
1085 rip the expression apart, and rebuild it, hoping that it becomes
1088 The expression type is defined for:
1089 0 Basic expression parsing
1090 1 Simplifying array constructors -- will substitute
1092 Returns FAILURE on error, SUCCESS otherwise.
1093 NOTE: Will return SUCCESS even if the expression can not be simplified. */
1096 gfc_simplify_expr (gfc_expr * p, int type)
1098 gfc_actual_arglist *ap;
1103 switch (p->expr_type)
1110 for (ap = p->value.function.actual; ap; ap = ap->next)
1111 if (gfc_simplify_expr (ap->expr, type) == FAILURE)
1114 if (p->value.function.isym != NULL
1115 && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR)
1120 case EXPR_SUBSTRING:
1121 if (gfc_simplify_expr (p->op1, type) == FAILURE
1122 || gfc_simplify_expr (p->op2, type) == FAILURE)
1125 /* TODO: evaluate constant substrings. */
1130 if (simplify_intrinsic_op (p, type) == FAILURE)
1135 /* Only substitute array parameter variables if we are in an
1136 initialization expression, or we want a subsection. */
1137 if (p->symtree->n.sym->attr.flavor == FL_PARAMETER
1138 && (gfc_init_expr || p->ref
1139 || p->symtree->n.sym->value->expr_type != EXPR_ARRAY))
1141 if (simplify_parameter_variable (p, type) == FAILURE)
1148 gfc_simplify_iterator_var (p);
1151 /* Simplify subcomponent references. */
1152 if (simplify_ref_chain (p->ref, type) == FAILURE)
1157 case EXPR_STRUCTURE:
1159 if (simplify_ref_chain (p->ref, type) == FAILURE)
1162 if (simplify_constructor (p->value.constructor, type) == FAILURE)
1165 if (p->expr_type == EXPR_ARRAY)
1166 gfc_expand_constructor (p);
1168 if (simplify_const_ref (p) == FAILURE)
1178 /* Returns the type of an expression with the exception that iterator
1179 variables are automatically integers no matter what else they may
1186 if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS)
1193 /* Check an intrinsic arithmetic operation to see if it is consistent
1194 with some type of expression. */
1196 static try check_init_expr (gfc_expr *);
1199 check_intrinsic_op (gfc_expr * e, try (*check_function) (gfc_expr *))
1202 if ((*check_function) (e->op1) == FAILURE)
1205 switch (e->operator)
1207 case INTRINSIC_UPLUS:
1208 case INTRINSIC_UMINUS:
1209 if (!numeric_type (et0 (e->op1)))
1219 if ((*check_function) (e->op2) == FAILURE)
1222 if (!(et0 (e->op1) == BT_CHARACTER && et0 (e->op2) == BT_CHARACTER)
1223 && !(numeric_type (et0 (e->op1)) && numeric_type (et0 (e->op2))))
1225 gfc_error ("Numeric or CHARACTER operands are required in "
1226 "expression at %L", &e->where);
1231 case INTRINSIC_PLUS:
1232 case INTRINSIC_MINUS:
1233 case INTRINSIC_TIMES:
1234 case INTRINSIC_DIVIDE:
1235 case INTRINSIC_POWER:
1236 if ((*check_function) (e->op2) == FAILURE)
1239 if (!numeric_type (et0 (e->op1)) || !numeric_type (et0 (e->op2)))
1242 if (e->operator == INTRINSIC_POWER
1243 && check_function == check_init_expr && et0 (e->op2) != BT_INTEGER)
1245 gfc_error ("Exponent at %L must be INTEGER for an initialization "
1246 "expression", &e->op2->where);
1252 case INTRINSIC_CONCAT:
1253 if ((*check_function) (e->op2) == FAILURE)
1256 if (et0 (e->op1) != BT_CHARACTER || et0 (e->op2) != BT_CHARACTER)
1258 gfc_error ("Concatenation operator in expression at %L "
1259 "must have two CHARACTER operands", &e->op1->where);
1263 if (e->op1->ts.kind != e->op2->ts.kind)
1265 gfc_error ("Concat operator at %L must concatenate strings of the "
1266 "same kind", &e->where);
1273 if (et0 (e->op1) != BT_LOGICAL)
1275 gfc_error (".NOT. operator in expression at %L must have a LOGICAL "
1276 "operand", &e->op1->where);
1285 case INTRINSIC_NEQV:
1286 if ((*check_function) (e->op2) == FAILURE)
1289 if (et0 (e->op1) != BT_LOGICAL || et0 (e->op2) != BT_LOGICAL)
1291 gfc_error ("LOGICAL operands are required in expression at %L",
1299 gfc_error ("Only intrinsic operators can be used in expression at %L",
1307 gfc_error ("Numeric operands are required in expression at %L", &e->where);
1314 /* Certain inquiry functions are specifically allowed to have variable
1315 arguments, which is an exception to the normal requirement that an
1316 initialization function have initialization arguments. We head off
1317 this problem here. */
1320 check_inquiry (gfc_expr * e)
1324 /* FIXME: This should be moved into the intrinsic definitions,
1325 to eliminate this ugly hack. */
1326 static const char * const inquiry_function[] = {
1327 "digits", "epsilon", "huge", "kind", "maxexponent", "minexponent",
1328 "precision", "radix", "range", "tiny", "bit_size", "size", "shape",
1329 "lbound", "ubound", NULL
1334 name = e->symtree->n.sym->name;
1336 for (i = 0; inquiry_function[i]; i++)
1337 if (strcmp (inquiry_function[i], name) == 0)
1340 if (inquiry_function[i] == NULL)
1343 e = e->value.function.actual->expr;
1345 if (e == NULL || e->expr_type != EXPR_VARIABLE)
1348 /* At this point we have a numeric inquiry function with a variable
1349 argument. The type of the variable might be undefined, but we
1350 need it now, because the arguments of these functions are allowed
1353 if (e->ts.type == BT_UNKNOWN)
1355 if (e->symtree->n.sym->ts.type == BT_UNKNOWN
1356 && gfc_set_default_type (e->symtree->n.sym, 0, gfc_current_ns)
1360 e->ts = e->symtree->n.sym->ts;
1367 /* Verify that an expression is an initialization expression. A side
1368 effect is that the expression tree is reduced to a single constant
1369 node if all goes well. This would normally happen when the
1370 expression is constructed but function references are assumed to be
1371 intrinsics in the context of initialization expressions. If
1372 FAILURE is returned an error message has been generated. */
1375 check_init_expr (gfc_expr * e)
1377 gfc_actual_arglist *ap;
1384 switch (e->expr_type)
1387 t = check_intrinsic_op (e, check_init_expr);
1389 t = gfc_simplify_expr (e, 0);
1396 if (check_inquiry (e) != SUCCESS)
1399 for (ap = e->value.function.actual; ap; ap = ap->next)
1400 if (check_init_expr (ap->expr) == FAILURE)
1409 m = gfc_intrinsic_func_interface (e, 0);
1412 gfc_error ("Function '%s' in initialization expression at %L "
1413 "must be an intrinsic function",
1414 e->symtree->n.sym->name, &e->where);
1425 if (gfc_check_iter_variable (e) == SUCCESS)
1428 if (e->symtree->n.sym->attr.flavor == FL_PARAMETER)
1430 t = simplify_parameter_variable (e, 0);
1434 gfc_error ("Variable '%s' at %L cannot appear in an initialization "
1435 "expression", e->symtree->n.sym->name, &e->where);
1444 case EXPR_SUBSTRING:
1445 t = check_init_expr (e->op1);
1449 t = check_init_expr (e->op2);
1451 t = gfc_simplify_expr (e, 0);
1455 case EXPR_STRUCTURE:
1456 t = gfc_check_constructor (e, check_init_expr);
1460 t = gfc_check_constructor (e, check_init_expr);
1464 t = gfc_expand_constructor (e);
1468 t = gfc_check_constructor_type (e);
1472 gfc_internal_error ("check_init_expr(): Unknown expression type");
1479 /* Match an initialization expression. We work by first matching an
1480 expression, then reducing it to a constant. */
1483 gfc_match_init_expr (gfc_expr ** result)
1489 m = gfc_match_expr (&expr);
1494 t = gfc_resolve_expr (expr);
1496 t = check_init_expr (expr);
1501 gfc_free_expr (expr);
1505 if (expr->expr_type == EXPR_ARRAY
1506 && (gfc_check_constructor_type (expr) == FAILURE
1507 || gfc_expand_constructor (expr) == FAILURE))
1509 gfc_free_expr (expr);
1513 if (!gfc_is_constant_expr (expr))
1514 gfc_internal_error ("Initialization expression didn't reduce %C");
1523 static try check_restricted (gfc_expr *);
1525 /* Given an actual argument list, test to see that each argument is a
1526 restricted expression and optionally if the expression type is
1527 integer or character. */
1530 restricted_args (gfc_actual_arglist * a)
1532 for (; a; a = a->next)
1534 if (check_restricted (a->expr) == FAILURE)
1542 /************* Restricted/specification expressions *************/
1545 /* Make sure a non-intrinsic function is a specification function. */
1548 external_spec_function (gfc_expr * e)
1552 f = e->value.function.esym;
1554 if (f->attr.proc == PROC_ST_FUNCTION)
1556 gfc_error ("Specification function '%s' at %L cannot be a statement "
1557 "function", f->name, &e->where);
1561 if (f->attr.proc == PROC_INTERNAL)
1563 gfc_error ("Specification function '%s' at %L cannot be an internal "
1564 "function", f->name, &e->where);
1570 gfc_error ("Specification function '%s' at %L must be PURE", f->name,
1575 if (f->attr.recursive)
1577 gfc_error ("Specification function '%s' at %L cannot be RECURSIVE",
1578 f->name, &e->where);
1582 return restricted_args (e->value.function.actual);
1586 /* Check to see that a function reference to an intrinsic is a
1587 restricted expression. */
1590 restricted_intrinsic (gfc_expr * e)
1592 /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */
1593 if (check_inquiry (e) == SUCCESS)
1596 return restricted_args (e->value.function.actual);
1600 /* Verify that an expression is a restricted expression. Like its
1601 cousin check_init_expr(), an error message is generated if we
1605 check_restricted (gfc_expr * e)
1613 switch (e->expr_type)
1616 t = check_intrinsic_op (e, check_restricted);
1618 t = gfc_simplify_expr (e, 0);
1623 t = e->value.function.esym ?
1624 external_spec_function (e) : restricted_intrinsic (e);
1629 sym = e->symtree->n.sym;
1632 if (sym->attr.optional)
1634 gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL",
1635 sym->name, &e->where);
1639 if (sym->attr.intent == INTENT_OUT)
1641 gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)",
1642 sym->name, &e->where);
1646 if (sym->attr.in_common
1647 || sym->attr.use_assoc
1649 || sym->ns != gfc_current_ns
1650 || (sym->ns->proc_name != NULL
1651 && sym->ns->proc_name->attr.flavor == FL_MODULE))
1657 gfc_error ("Variable '%s' cannot appear in the expression at %L",
1658 sym->name, &e->where);
1667 case EXPR_SUBSTRING:
1668 t = gfc_specification_expr (e->op1);
1672 t = gfc_specification_expr (e->op2);
1674 t = gfc_simplify_expr (e, 0);
1678 case EXPR_STRUCTURE:
1679 t = gfc_check_constructor (e, check_restricted);
1683 t = gfc_check_constructor (e, check_restricted);
1687 gfc_internal_error ("check_restricted(): Unknown expression type");
1694 /* Check to see that an expression is a specification expression. If
1695 we return FAILURE, an error has been generated. */
1698 gfc_specification_expr (gfc_expr * e)
1701 if (e->ts.type != BT_INTEGER)
1703 gfc_error ("Expression at %L must be of INTEGER type", &e->where);
1709 gfc_error ("Expression at %L must be scalar", &e->where);
1713 if (gfc_simplify_expr (e, 0) == FAILURE)
1716 return check_restricted (e);
1720 /************** Expression conformance checks. *************/
1722 /* Given two expressions, make sure that the arrays are conformable. */
1725 gfc_check_conformance (const char *optype, gfc_expr * op1, gfc_expr * op2)
1727 int op1_flag, op2_flag, d;
1728 mpz_t op1_size, op2_size;
1731 if (op1->rank == 0 || op2->rank == 0)
1734 if (op1->rank != op2->rank)
1736 gfc_error ("Incompatible ranks in %s at %L", optype, &op1->where);
1742 for (d = 0; d < op1->rank; d++)
1744 op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS;
1745 op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS;
1747 if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0)
1749 gfc_error ("%s at %L has different shape on dimension %d (%d/%d)",
1750 optype, &op1->where, d + 1, (int) mpz_get_si (op1_size),
1751 (int) mpz_get_si (op2_size));
1757 mpz_clear (op1_size);
1759 mpz_clear (op2_size);
1769 /* Given an assignable expression and an arbitrary expression, make
1770 sure that the assignment can take place. */
1773 gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform)
1777 sym = lvalue->symtree->n.sym;
1779 if (sym->attr.intent == INTENT_IN)
1781 gfc_error ("Can't assign to INTENT(IN) variable '%s' at %L",
1782 sym->name, &lvalue->where);
1786 if (rvalue->rank != 0 && lvalue->rank != rvalue->rank)
1788 gfc_error ("Incompatible ranks %d and %d in assignment at %L",
1789 lvalue->rank, rvalue->rank, &lvalue->where);
1793 if (lvalue->ts.type == BT_UNKNOWN)
1795 gfc_error ("Variable type is UNKNOWN in assignment at %L",
1800 if (rvalue->expr_type == EXPR_NULL)
1801 gfc_warning ("NULL appears on right-hand side in assignment at %L",
1804 /* Check size of array assignments. */
1805 if (lvalue->rank != 0 && rvalue->rank != 0
1806 && gfc_check_conformance ("Array assignment", lvalue, rvalue) != SUCCESS)
1809 if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
1814 if (gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
1817 gfc_error ("Incompatible types in assignment at %L, %s to %s",
1818 &rvalue->where, gfc_typename (&rvalue->ts),
1819 gfc_typename (&lvalue->ts));
1824 return gfc_convert_type (rvalue, &lvalue->ts, 1);
1828 /* Check that a pointer assignment is OK. We first check lvalue, and
1829 we only check rvalue if it's not an assignment to NULL() or a
1830 NULLIFY statement. */
1833 gfc_check_pointer_assign (gfc_expr * lvalue, gfc_expr * rvalue)
1835 symbol_attribute attr;
1838 if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN)
1840 gfc_error ("Pointer assignment target is not a POINTER at %L",
1845 attr = gfc_variable_attr (lvalue, NULL);
1848 gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where);
1852 is_pure = gfc_pure (NULL);
1854 if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym))
1856 gfc_error ("Bad pointer object in PURE procedure at %L",
1861 /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type,
1862 kind, etc for lvalue and rvalue must match, and rvalue must be a
1863 pure variable if we're in a pure function. */
1864 if (rvalue->expr_type == EXPR_NULL)
1867 if (!gfc_compare_types (&lvalue->ts, &rvalue->ts))
1869 gfc_error ("Different types in pointer assignment at %L",
1874 if (lvalue->ts.kind != rvalue->ts.kind)
1876 gfc_error ("Different kind type parameters in pointer "
1877 "assignment at %L", &lvalue->where);
1881 attr = gfc_expr_attr (rvalue);
1882 if (!attr.target && !attr.pointer)
1884 gfc_error ("Pointer assignment target is neither TARGET "
1885 "nor POINTER at %L", &rvalue->where);
1889 if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym))
1891 gfc_error ("Bad target in pointer assignment in PURE "
1892 "procedure at %L", &rvalue->where);
1895 if (lvalue->rank != rvalue->rank)
1897 gfc_error ("Unequal ranks %d and %d in pointer assignment at %L",
1898 lvalue->rank, rvalue->rank, &rvalue->where);
1906 /* Relative of gfc_check_assign() except that the lvalue is a single
1907 symbol. Used for initialization assignments. */
1910 gfc_check_assign_symbol (gfc_symbol * sym, gfc_expr * rvalue)
1915 memset (&lvalue, '\0', sizeof (gfc_expr));
1917 lvalue.expr_type = EXPR_VARIABLE;
1918 lvalue.ts = sym->ts;
1920 lvalue.rank = sym->as->rank;
1921 lvalue.symtree = (gfc_symtree *)gfc_getmem (sizeof (gfc_symtree));
1922 lvalue.symtree->n.sym = sym;
1923 lvalue.where = sym->declared_at;
1925 if (sym->attr.pointer)
1926 r = gfc_check_pointer_assign (&lvalue, rvalue);
1928 r = gfc_check_assign (&lvalue, rvalue, 1);
1930 gfc_free (lvalue.symtree);
1936 /* Get an expression for a default initializer. */
1939 gfc_default_initializer (gfc_typespec *ts)
1941 gfc_constructor *tail;
1947 /* See if we have a default initializer. */
1948 for (c = ts->derived->components; c; c = c->next)
1950 if (c->initializer && init == NULL)
1951 init = gfc_get_expr ();
1957 /* Build the constructor. */
1958 init->expr_type = EXPR_STRUCTURE;
1960 init->where = ts->derived->declared_at;
1962 for (c = ts->derived->components; c; c = c->next)
1965 init->value.constructor = tail = gfc_get_constructor ();
1968 tail->next = gfc_get_constructor ();
1973 tail->expr = gfc_copy_expr (c->initializer);