diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-25 13:35:27 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-25 13:35:27 -0500 |
commit | 307b821c36a068b8482454c6167c71cedc53083b (patch) | |
tree | 86772577778cd733606f09fd4c3f23ffec84c9a5 /gcc | |
parent | 43b603ea3d8457f8fe167f4d2cb9aeacb8772ffa (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 28 |
1 files changed, 6 insertions, 22 deletions
@@ -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]); } } } |