trans-expr.c (gfc_conv_expr, [...]): Update comments.

2005-08-04  Paul Brook  <paul@codesourcery.com>

	* trans-expr.c (gfc_conv_expr, gfc_conv_expr_type): Update comments.
	(gfc_conv_expr_lhs): Fix assertion.
	(gfc_conv_expr_val): Merge post block.  Set se.expr to new value.
	* trans.h: Move and update comments.

From-SVN: r102729
This commit is contained in:
Paul Brook 2005-08-04 03:06:12 +00:00 committed by Paul Brook
parent cb941178f5
commit a4f5cd4441
3 changed files with 22 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2005-08-04 Paul Brook <paul@codesourcery.com>
* trans-expr.c (gfc_conv_expr, gfc_conv_expr_type): Update comments.
(gfc_conv_expr_lhs): Fix assertion.
(gfc_conv_expr_val): Merge post block. Set se.expr to new value.
2005-08-02 David Edelsohn <edelsohn@gnu.org> 2005-08-02 David Edelsohn <edelsohn@gnu.org>
PR fortran/22491 PR fortran/22491

View File

@ -1867,7 +1867,9 @@ gfc_conv_substring_expr (gfc_se * se, gfc_expr * expr)
} }
/* Entry point for expression translation. */ /* Entry point for expression translation. Evaluates a scalar quantity.
EXPR is the expression to be translated, and SE is the state structure if
called from within the scalarized. */
void void
gfc_conv_expr (gfc_se * se, gfc_expr * expr) gfc_conv_expr (gfc_se * se, gfc_expr * expr)
@ -1923,15 +1925,20 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr)
} }
} }
/* Like gfc_conv_expr_val, but the value is also suitable for use in the lhs
of an assignment. */
void void
gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr) gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr)
{ {
gfc_conv_expr (se, expr); gfc_conv_expr (se, expr);
/* AFAICS all numeric lvalues have empty post chains. If not we need to /* All numeric lvalues should have empty post chains. If not we need to
figure out a way of rewriting an lvalue so that it has no post chain. */ figure out a way of rewriting an lvalue so that it has no post chain. */
gcc_assert (expr->ts.type != BT_CHARACTER || !se->post.head); gcc_assert (expr->ts.type == BT_CHARACTER || !se->post.head);
} }
/* Like gfc_conv_expr, but the POST block is guaranteed to be empty for
numeric expressions. Used for scalar values whee inserting cleanup code
is inconvenient. */
void void
gfc_conv_expr_val (gfc_se * se, gfc_expr * expr) gfc_conv_expr_val (gfc_se * se, gfc_expr * expr)
{ {
@ -1943,9 +1950,12 @@ gfc_conv_expr_val (gfc_se * se, gfc_expr * expr)
{ {
val = gfc_create_var (TREE_TYPE (se->expr), NULL); val = gfc_create_var (TREE_TYPE (se->expr), NULL);
gfc_add_modify_expr (&se->pre, val, se->expr); gfc_add_modify_expr (&se->pre, val, se->expr);
se->expr = val;
gfc_add_block_to_block (&se->pre, &se->post);
} }
} }
/* Helper to translate and expression and convert it to a particular type. */
void void
gfc_conv_expr_type (gfc_se * se, gfc_expr * expr, tree type) gfc_conv_expr_type (gfc_se * se, gfc_expr * expr, tree type)
{ {

View File

@ -275,20 +275,15 @@ tree gfc_chainon_list (tree, tree);
when a POST chain may be created, and what the returned expression may be when a POST chain may be created, and what the returned expression may be
used for. Note that character strings have special handling. This used for. Note that character strings have special handling. This
should not be a problem as most statements/operations only deal with should not be a problem as most statements/operations only deal with
numeric/logical types. */ numeric/logical types. See the implementations in trans-expr.c
for details of the individual functions. */
/* Entry point for expression translation. */
void gfc_conv_expr (gfc_se * se, gfc_expr * expr); void gfc_conv_expr (gfc_se * se, gfc_expr * expr);
/* Like gfc_conv_expr, but the POST block is guaranteed to be empty for
numeric expressions. */
void gfc_conv_expr_val (gfc_se * se, gfc_expr * expr); void gfc_conv_expr_val (gfc_se * se, gfc_expr * expr);
/* Like gfc_conv_expr_val, but the value is also suitable for use in the lhs of
an assignment. */
void gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr); void gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr);
/* Converts an expression so that it can be passed be reference. */
void gfc_conv_expr_reference (gfc_se * se, gfc_expr *); void gfc_conv_expr_reference (gfc_se * se, gfc_expr *);
/* Equivalent to convert(type, gfc_conv_expr_val(se, expr)). */
void gfc_conv_expr_type (gfc_se * se, gfc_expr *, tree); void gfc_conv_expr_type (gfc_se * se, gfc_expr *, tree);
/* Find the decl containing the auxiliary variables for assigned variables. */ /* Find the decl containing the auxiliary variables for assigned variables. */
void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr); void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr);
/* If the value is not constant, Create a temporary and copy the value. */ /* If the value is not constant, Create a temporary and copy the value. */