aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplib.c
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.demon.co.uk>2002-05-04 07:30:32 +0000
committerNeil Booth <neil@gcc.gnu.org>2002-05-04 07:30:32 +0000
commit4268e8bb9408758c1c97b6e821ab4c599d794808 (patch)
tree39e01f86f161ea393ce56f05f0c0a0264050f332 /gcc/cpplib.c
parentac5ec76848ad9634ba9cb93379c3011ebad22c4f (diff)
downloadgcc-4268e8bb9408758c1c97b6e821ab4c599d794808.zip
gcc-4268e8bb9408758c1c97b6e821ab4c599d794808.tar.gz
gcc-4268e8bb9408758c1c97b6e821ab4c599d794808.tar.bz2
c-lex.c (lex_string): Let cpp_parse_escape handles truncation and sign-extension.
* c-lex.c (lex_string): Let cpp_parse_escape handles truncation and sign-extension. (lex_charconst): Update for change in prototype of cpp_interpret_charconst. Extend from cppchar_t to HOST_WIDE_INT appropriately. * cpphash.h (BITS_PER_CPPCHAR_T): New. * cppinit.c (cpp_create_reader): Initialize them for no change in semantics. (cpp_post_options): Add sanity checks. * cpplex.c (cpp_parse_escape): Handle precision, sign-extension and truncation issues. Calculate in type cppchar_t. (MAX_CHAR_TYPE_SIZE, MAX_WCHAR_TYPE_SIZE): Remove. (cpp_interpret_charconst): Calculate in type cppchar_t. Handle run-time dependent precision correctly. Return whether the result is signed or not. * cpplib.c (dequote_string): Use cppchar_t; update. * cpplib.h (cppchar_signed_t): New. struct cpp_options): New precision members. (cpp_interpret_charconst, cpp_parse_escape): Update prototypes. From-SVN: r53152
Diffstat (limited to 'gcc/cpplib.c')
-rw-r--r--gcc/cpplib.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index b210209..c90224c 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -726,23 +726,15 @@ dequote_string (pfile, str, len)
uchar *result = _cpp_unaligned_alloc (pfile, len + 1);
uchar *dst = result;
const uchar *limit = str + len;
- unsigned int c;
- unsigned HOST_WIDE_INT mask;
+ cppchar_t c;
- /* We need the mask to match the host's 'unsigned char', not the
- target's. */
- if (CHAR_BIT < HOST_BITS_PER_WIDE_INT)
- mask = ((unsigned HOST_WIDE_INT) 1 << CHAR_BIT) - 1;
- else
- mask = ~(unsigned HOST_WIDE_INT)0;
-
while (str < limit)
{
c = *str++;
if (c != '\\')
*dst++ = c;
else
- *dst++ = cpp_parse_escape (pfile, (const uchar **)&str, limit, mask);
+ *dst++ = cpp_parse_escape (pfile, &str, limit, 0);
}
*dst++ = '\0';
return result;