diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-30 22:55:30 +0000 |
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-30 22:55:30 +0000 |
| commit | e67e5e1f09d694bdc12f5d5733075cd7dba374d1 (patch) | |
| tree | b8e5fa782f1cf0143b461a419b9a4855d6b9c559 /gcc/fortran/trans-expr.c | |
| parent | 98cdc32e7828071a68104dc86db105d51f76fe93 (diff) | |
| download | ppe42-gcc-e67e5e1f09d694bdc12f5d5733075cd7dba374d1.tar.gz ppe42-gcc-e67e5e1f09d694bdc12f5d5733075cd7dba374d1.zip | |
* gimplify.c (gimplify_expr) <case CONST_DECL>: Don't replace
with DECL_INITIAL if fb_lvalue.
* tree-gimple.c (is_gimple_id): Add CONST_DECL.
* tree-pretty-print.c (dump_decl_name): Dump unnamed CONST_DECL
with <Cxxx>.
* tree-ssa-ccp.c (maybe_fold_stmt_indirect): Fold CONST_DECL.
fortran/
* trans-expr.c (gfc_conv_expr_reference): Create a CONST_DECL
for TREE_CONSTANTs.
testsuite/
* gfortran.fortran-torture/execute/intrinsic_rrspacing.f90: Fix
write to constant argument.
* gfortran.fortran-torture/execute/intrinsic_scale.f90: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85365 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans-expr.c')
| -rw-r--r-- | gcc/fortran/trans-expr.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 4745f0cc3be..81d879e5dde 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -1612,8 +1612,17 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr) gfc_conv_expr (se, expr); /* Create a temporary var to hold the value. */ - var = gfc_create_var (TREE_TYPE (se->expr), NULL); - gfc_add_modify_expr (&se->pre, var, se->expr); + if (TREE_CONSTANT (se->expr)) + { + var = build_decl (CONST_DECL, NULL, TREE_TYPE (se->expr)); + DECL_INITIAL (var) = se->expr; + pushdecl (var); + } + else + { + var = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify_expr (&se->pre, var, se->expr); + } gfc_add_block_to_block (&se->pre, &se->post); /* Take the address of that value. */ |

