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
This commit is contained in:
Jakub Jelinek 2000-09-13 01:45:51 +02:00 committed by Ulrich Drepper
parent 8cfccbf355
commit 5c80f6e6b1
3 changed files with 17 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2000-09-12 Jakub Jelinek <jakub@redhat.com>
* 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 <mhayes@cygnus.com>
* loop.c (note_set_pseudo_multiple_uses): Correct.

View File

@ -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)

View File

@ -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)]));
}
}
}
}