diff options
author | Hans-Peter Nilsson <hp@bitrange.com> | 2002-08-12 00:57:55 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2002-08-12 00:57:55 +0000 |
commit | e56fc090cbe11459d7570c04c3fdbe8fa655a8c8 (patch) | |
tree | dc5bc1335e3a9eec8102f10a6796b72eacee24e6 /gcc/expr.c | |
parent | 76c3e73e325f8452a05e8912d15740b1a5fb7ed9 (diff) | |
download | gcc-e56fc090cbe11459d7570c04c3fdbe8fa655a8c8.zip gcc-e56fc090cbe11459d7570c04c3fdbe8fa655a8c8.tar.gz gcc-e56fc090cbe11459d7570c04c3fdbe8fa655a8c8.tar.bz2 |
expr.c (store_expr): In condition for checking if value is generated in TARGET...
* expr.c (store_expr): In condition for checking if value is
generated in TARGET, move call to expr_size last.
From-SVN: r56217
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -4238,14 +4238,17 @@ store_expr (exp, target, want_value) || (temp != target && (side_effects_p (temp) || side_effects_p (target)))) && TREE_CODE (exp) != ERROR_MARK - /* If there's nothing to copy, don't bother. */ - && expr_size (exp) != const0_rtx && ! dont_store_target /* If store_expr stores a DECL whose DECL_RTL(exp) == TARGET, but TARGET is not valid memory reference, TEMP will differ from TARGET although it is really the same location. */ && (TREE_CODE_CLASS (TREE_CODE (exp)) != 'd' - || target != DECL_RTL_IF_SET (exp))) + || target != DECL_RTL_IF_SET (exp)) + /* If there's nothing to copy, don't bother. Don't call expr_size + unless necessary, because some front-ends (C++) expr_size-hook + aborts on objects that are not supposed to be bit-copied or + bit-initialized. */ + && expr_size (exp) != const0_rtx) { target = protect_from_queue (target, 1); if (GET_MODE (temp) != GET_MODE (target) |