diff options
author | Paul Brook <paul@codesourcery.com> | 2005-08-04 03:06:12 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2005-08-04 03:06:12 +0000 |
commit | a4f5cd4441e5e5a140ad6495eef56b88462ca807 (patch) | |
tree | 79ce8b2fc6abff72b98587b58b629ea8eae957d7 /gcc | |
parent | cb941178f51cb7045ca29f0e27f80f873dbb613d (diff) | |
download | gcc-a4f5cd4441e5e5a140ad6495eef56b88462ca807.zip gcc-a4f5cd4441e5e5a140ad6495eef56b88462ca807.tar.gz gcc-a4f5cd4441e5e5a140ad6495eef56b88462ca807.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 16 | ||||
-rw-r--r-- | gcc/fortran/trans.h | 11 |
3 files changed, 22 insertions, 11 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b2a7452..f626559 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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> PR fortran/22491 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 0cd8741..a3846f3 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -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 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 gfc_conv_expr_lhs (gfc_se * se, gfc_expr * 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. */ - 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 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); 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 gfc_conv_expr_type (gfc_se * se, gfc_expr * expr, tree type) { diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index c4099a9..9678ff8 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -275,20 +275,15 @@ tree gfc_chainon_list (tree, tree); when a POST chain may be created, and what the returned expression may be used for. Note that character strings have special handling. This 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); -/* 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); -/* 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); -/* Converts an expression so that it can be passed be reference. */ 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); + /* Find the decl containing the auxiliary variables for assigned variables. */ void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr); /* If the value is not constant, Create a temporary and copy the value. */ |