diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2001-09-10 20:23:35 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2001-09-10 16:23:35 -0400 |
commit | bf06b5d8410b3feb3994ab15512a6de0fff9bdb0 (patch) | |
tree | f0af18cd6cf7684a1873adddbb2a05daa72c803c /gcc/builtins.c | |
parent | a623ef6e7121ca847162099d3141004454edd636 (diff) | |
download | gcc-bf06b5d8410b3feb3994ab15512a6de0fff9bdb0.zip gcc-bf06b5d8410b3feb3994ab15512a6de0fff9bdb0.tar.gz gcc-bf06b5d8410b3feb3994ab15512a6de0fff9bdb0.tar.bz2 |
builtins.c (c_getstr): Correct thinko in last change and further cleanup.
* builtins.c (c_getstr): Correct thinko in last change and further
cleanup.
From-SVN: r45519
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 9adbf96..7cd7e89 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -296,29 +296,22 @@ c_getstr (src) { tree offset_node; HOST_WIDE_INT offset; - int max; - const char *ptr; src = string_constant (src, &offset_node); if (src == 0) return 0; - max = TREE_STRING_LENGTH (src) - 1; - ptr = TREE_STRING_POINTER (src); - - if (offset_node == 0 || !host_integerp (offset_node, 0)) - return ptr; - - offset = tree_low_cst (offset_node, 0); - if (offset < 0 || offset > max) + if (offset_node == 0) + return TREE_STRING_POINTER (src); + else if (!host_integerp (offset_node, 1) + || compare_tree_int (offset_node, TREE_STRING_LENGTH (src) - 1) > 0) return 0; - return ptr + offset; + return TREE_STRING_POINTER (src) + tree_low_cst (offset_node, 1); } -/* Return a CONST_INT or CONST_DOUBLE corresponding to target - reading GET_MODE_BITSIZE (MODE) bits from string constant - STR. */ +/* Return a CONST_INT or CONST_DOUBLE corresponding to target reading + GET_MODE_BITSIZE (MODE) bits from string constant STR. */ static rtx c_readstr (str, mode) |