From: Jakub Jelinek Date: Tue, 12 Sep 2000 23:45:51 +0000 (+0200) Subject: c-lex.c (lex_string): Use charwidth to compute bytemask. X-Git-Tag: prereleases/libstdc++-2.92~4051 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c80f6e6b1be7ad5fc64b015e87ee44896595ae6;p=thirdparty%2Fgcc.git c-lex.c (lex_string): Use charwidth to compute bytemask. * c-lex.c (lex_string): Use charwidth to compute bytemask. * expr.c (expand_expr): Don't optimize constant array references initialized with wide string constants. From-SVN: r36380 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 46e9945efb78..c6e8733ca9bc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-09-12 Jakub Jelinek + + * c-lex.c (lex_string): Use charwidth to compute bytemask. + * expr.c (expand_expr): Don't optimize constant array references + initialized with wide string constants. + 2000-09-13 Michael Hayes * loop.c (note_set_pseudo_multiple_uses): Correct. diff --git a/gcc/c-lex.c b/gcc/c-lex.c index fa5c7a79cef6..f9c5cb432f94 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -2381,7 +2381,7 @@ lex_string (str, len, wide) if (wide) { unsigned charwidth = TYPE_PRECISION (char_type_node); - unsigned bytemask = (1 << width) - 1; + unsigned bytemask = (1 << charwidth) - 1; int byte; for (byte = 0; byte < WCHAR_BYTES; ++byte) diff --git a/gcc/expr.c b/gcc/expr.c index 9c4237bb43d5..baa4ef134b79 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -6619,9 +6619,16 @@ expand_expr (exp, target, tmode, modifier) else if (TREE_CODE (init) == STRING_CST && 0 > compare_tree_int (index, TREE_STRING_LENGTH (init))) - return (GEN_INT - (TREE_STRING_POINTER - (init)[TREE_INT_CST_LOW (index)])); + { + tree type = TREE_TYPE (TREE_TYPE (init)); + enum machine_mode mode = TYPE_MODE (type); + + if (GET_MODE_CLASS (mode) == MODE_INT + && GET_MODE_SIZE (mode) == 1) + return (GEN_INT + (TREE_STRING_POINTER + (init)[TREE_INT_CST_LOW (index)])); + } } } }