OSDN Git Service

Fix bug where storing into const string gives core dump, from Kamil Iskra.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 May 1998 19:16:35 +0000 (19:16 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 May 1998 19:16:35 +0000 (19:16 +0000)
* expr.c (expand_expr, case INDIRECT_REF): Don't optimize string
reference if this is a store.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@19531 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.c

index 7038dbf..2c7d23c 100644 (file)
@@ -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.
index c094a0f..8b8e513 100644 (file)
@@ -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);