Commit 62ae2529 by Jakub Jelinek Committed by Jakub Jelinek

c-lex.c (cb_ident, c_lex): Remove unnecessary cast.

	* c-lex.c (cb_ident, c_lex): Remove unnecessary cast.
	(lex_string): Use unsigned char pointers.

	* gcc.c-torture/execute/wchar_t-1.c: New test.

From-SVN: r50689
parent 46f56f54
2002-03-12 Jakub Jelinek <jakub@redhat.com>
* c-lex.c (cb_ident, c_lex): Remove unnecessary cast.
(lex_string): Use unsigned char pointers.
2002-03-12 Ulrich Weigand <uweigand@de.ibm.com>
* reload1.c (reload): Ignore MEM REG_EQUIV notes if the equivalent
......
......@@ -85,7 +85,8 @@ static int ignore_escape_flag;
static void parse_float PARAMS ((PTR));
static tree lex_number PARAMS ((const char *, unsigned int));
static tree lex_string PARAMS ((const char *, unsigned int, int));
static tree lex_string PARAMS ((const unsigned char *, unsigned int,
int));
static tree lex_charconst PARAMS ((const cpp_token *));
static void update_header_times PARAMS ((const char *));
static int dump_one_header PARAMS ((splay_tree_node, void *));
......@@ -239,7 +240,7 @@ cb_ident (pfile, line, str)
if (! flag_no_ident)
{
/* Convert escapes in the string. */
tree value = lex_string ((const char *)str->text, str->len, 0);
tree value = lex_string (str->text, str->len, 0);
ASM_OUTPUT_IDENT (asm_out_file, TREE_STRING_POINTER (value));
}
#endif
......@@ -807,8 +808,8 @@ c_lex (value)
case CPP_STRING:
case CPP_WSTRING:
*value = lex_string ((const char *)tok->val.str.text,
tok->val.str.len, tok->type == CPP_WSTRING);
*value = lex_string (tok->val.str.text, tok->val.str.len,
tok->type == CPP_WSTRING);
break;
/* These tokens should not be visible outside cpplib. */
......@@ -1282,14 +1283,14 @@ lex_number (str, len)
static tree
lex_string (str, len, wide)
const char *str;
const unsigned char *str;
unsigned int len;
int wide;
{
tree value;
char *buf = alloca ((len + 1) * (wide ? WCHAR_BYTES : 1));
char *q = buf;
const char *p = str, *limit = str + len;
const unsigned char *p = str, *limit = str + len;
unsigned int c;
unsigned width = wide ? WCHAR_TYPE_SIZE
: TYPE_PRECISION (char_type_node);
......@@ -1305,7 +1306,7 @@ lex_string (str, len, wide)
wchar_t wc;
int char_len;
char_len = local_mbtowc (&wc, p, limit - p);
char_len = local_mbtowc (&wc, (const char *) p, limit - p);
if (char_len == -1)
{
warning ("ignoring invalid multibyte character");
......@@ -1329,8 +1330,7 @@ lex_string (str, len, wide)
mask = ((unsigned int) 1 << width) - 1;
else
mask = ~0;
c = cpp_parse_escape (parse_in, (const unsigned char **) &p,
(const unsigned char *) limit, mask);
c = cpp_parse_escape (parse_in, &p, limit, mask);
}
/* Add this single character into the buffer either as a wchar_t
......
2002-03-12 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/wchar_t-1.c: New test.
2002-03-12 David Edelsohn <edelsohn@gnu.org>
* gcc.dg/20020103-1.c: Add rs6000 target and macro.
......
typedef __WCHAR_TYPE__ wchar_t;
wchar_t x[] = L"";
wchar_t y = L'';
extern void abort (void);
extern void exit (int);
int main (void)
{
if (sizeof (x) / sizeof (wchar_t) != 2)
abort ();
if (x[0] != L'' || x[1] != L'\0')
abort ();
if (y != L'')
abort ();
exit (0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment