mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-25 20:14:46 +08:00
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:
parent
cb941178f5
commit
a4f5cd4441
@ -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
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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. */
|
||||||
|
Loading…
Reference in New Issue
Block a user