aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-12-25 13:35:27 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-12-25 13:35:27 -0500
commit307b821c36a068b8482454c6167c71cedc53083b (patch)
tree86772577778cd733606f09fd4c3f23ffec84c9a5
parent43b603ea3d8457f8fe167f4d2cb9aeacb8772ffa (diff)
downloadgcc-307b821c36a068b8482454c6167c71cedc53083b.zip
gcc-307b821c36a068b8482454c6167c71cedc53083b.tar.gz
gcc-307b821c36a068b8482454c6167c71cedc53083b.tar.bz2
(expand_expr...
(expand_expr, case ARRAY_REF): Remove uses of *_type_node and simplify folding a reference to a character in a STRING_CST. From-SVN: r6322
-rw-r--r--gcc/expr.c28
1 files changed, 6 insertions, 22 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index f31ad28..c0bd5db 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -148,7 +148,8 @@ static int fixed_type_p PROTO((tree));
static int get_pointer_alignment PROTO((tree, unsigned));
static tree string_constant PROTO((tree, tree *));
static tree c_strlen PROTO((tree));
-static rtx expand_builtin PROTO((tree, rtx, rtx, enum machine_mode, int));
+static rtx expand_builtin PROTO((tree, rtx, rtx,
+ enum machine_mode, int));
static int apply_args_size PROTO((void));
static int apply_result_size PROTO((void));
static rtx result_vector PROTO((int, rtx));
@@ -4273,23 +4274,9 @@ expand_expr (exp, target, tmode, modifier)
if (TREE_CODE (array) == STRING_CST
&& TREE_CODE (index) == INTEGER_CST
&& !TREE_INT_CST_HIGH (index)
- && (i = TREE_INT_CST_LOW (index)) < TREE_STRING_LENGTH (array))
- {
- if (TREE_TYPE (TREE_TYPE (array)) == integer_type_node)
- {
- exp = build_int_2 (((int *)TREE_STRING_POINTER (array))[i], 0);
- TREE_TYPE (exp) = integer_type_node;
- return expand_expr (exp, target, tmode, modifier);
- }
- if (TREE_TYPE (TREE_TYPE (array)) == char_type_node)
- {
- exp = build_int_2 (TREE_STRING_POINTER (array)[i], 0);
- TREE_TYPE (exp) = integer_type_node;
- return expand_expr (convert (TREE_TYPE (TREE_TYPE (array)),
- exp),
- target, tmode, modifier);
- }
- }
+ && (i = TREE_INT_CST_LOW (index)) < TREE_STRING_LENGTH (array)
+ && GET_MODE_CLASS (mode) == MODE_INT)
+ return GEN_INT (TREE_STRING_POINTER (array)[i]);
/* If this is a constant index into a constant array,
just get the value from the array. Handle both the cases when
@@ -4336,10 +4323,7 @@ expand_expr (exp, target, tmode, modifier)
}
else if (TREE_CODE (init) == STRING_CST
&& i < TREE_STRING_LENGTH (init))
- {
- temp = GEN_INT (TREE_STRING_POINTER (init)[i]);
- return convert_to_mode (mode, temp, 0);
- }
+ return GEN_INT (TREE_STRING_POINTER (init)[i]);
}
}
}