diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-10-21 19:11:08 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-10-21 19:11:08 -0400 |
commit | ab6c58f120a7cfb52a7e2b9fe8427715f0340574 (patch) | |
tree | c5240d60e71816b02dd9d89931d9b569f6a9e4ac /gcc | |
parent | 1dcfa896bdee3c95c22401a88ded22171d5caa81 (diff) | |
download | gcc-ab6c58f120a7cfb52a7e2b9fe8427715f0340574.zip gcc-ab6c58f120a7cfb52a7e2b9fe8427715f0340574.tar.gz gcc-ab6c58f120a7cfb52a7e2b9fe8427715f0340574.tar.bz2 |
(store_expr): Disable optimization of using convert if exp's type is a
subtype.
From-SVN: r12992
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -3125,8 +3125,11 @@ store_expr (exp, target, want_value) /* If we don't want a value, we can do the conversion inside EXP, which will often result in some optimizations. Do the conversion in two steps: first change the signedness, if needed, then - the extend. */ - if (! want_value) + the extend. But don't do this if the type of EXP is a subtype + of something else since then the conversion might involve + more than just converting modes. */ + if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp)) + && TREE_TYPE (TREE_TYPE (exp)) == 0) { if (TREE_UNSIGNED (TREE_TYPE (exp)) != SUBREG_PROMOTED_UNSIGNED_P (target)) |