aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2005-08-04 03:06:12 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2005-08-04 03:06:12 +0000
commita4f5cd4441e5e5a140ad6495eef56b88462ca807 (patch)
tree79ce8b2fc6abff72b98587b58b629ea8eae957d7 /gcc
parentcb941178f51cb7045ca29f0e27f80f873dbb613d (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c16
-rw-r--r--gcc/fortran/trans.h11
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. */