diff options
author | Jim Wilson <wilson@cygnus.com> | 1998-05-04 19:16:35 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1998-05-04 12:16:35 -0700 |
commit | 06eaa86f99c3576f1f47f48d79cfebaecac57225 (patch) | |
tree | f0914b034e218ac7b59f25135a52b9429d5e9eea /gcc | |
parent | 9ed5dc544a13f979a4ab8931a016cb8ff69fd590 (diff) | |
download | gcc-06eaa86f99c3576f1f47f48d79cfebaecac57225.zip gcc-06eaa86f99c3576f1f47f48d79cfebaecac57225.tar.gz gcc-06eaa86f99c3576f1f47f48d79cfebaecac57225.tar.bz2 |
Fix bug where storing into const string gives core dump, from Kamil Iskra.
* expr.c (expand_expr, case INDIRECT_REF): Don't optimize string
reference if this is a store.
From-SVN: r19531
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/expr.c | 4 |
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7038dbf..2c7d23c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon May 4 19:15:29 1998 Jim Wilson <wilson@cygnus.com> + + * expr.c (expand_expr, case INDIRECT_REF): Don't optimize string + reference if this is a store. + Mon May 4 17:25:17 1998 Richard Henderson <rth@cygnus.com> * sparc.c (output_move_quad): Fix typo in mov_by_64 argument. @@ -5484,13 +5484,15 @@ expand_expr (exp, target, tmode, modifier) tree string = string_constant (exp1, &index); int i; + /* Try to optimize reads from const strings. */ if (string && TREE_CODE (string) == STRING_CST && TREE_CODE (index) == INTEGER_CST && !TREE_INT_CST_HIGH (index) && (i = TREE_INT_CST_LOW (index)) < TREE_STRING_LENGTH (string) && GET_MODE_CLASS (mode) == MODE_INT - && GET_MODE_SIZE (mode) == 1) + && GET_MODE_SIZE (mode) == 1 + && modifier != EXPAND_MEMORY_USE_WO) return GEN_INT (TREE_STRING_POINTER (string)[i]); op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); |