diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-06 22:53:10 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-06 22:53:10 +0000 |
commit | 318fdd81915678cdc4e744ad9aa51cbfef2b9fc1 (patch) | |
tree | 3f56b583072218fe62c5e65ab9af8fa0eb09165a /gcc/cppexp.c | |
parent | 09b8097e4cafe3e8cd0e44f136056fce86ccad74 (diff) | |
download | ppe42-gcc-318fdd81915678cdc4e744ad9aa51cbfef2b9fc1.tar.gz ppe42-gcc-318fdd81915678cdc4e744ad9aa51cbfef2b9fc1.zip |
* c-common.c (warn_multichar): New.
(c_common_init): Set CPP's warn_multichar.
* c-common.h (warn_multichar): New.
* c-decl.c (warn_multichar): Remove.
* c-lex.c (lex_charconst): Update.
* c-tree.h (warn_multichar): Remove.
* cppexp.c (eval_token): Sign-extend charconst value.
* cppinit.c (cpp_create_reader): Set warn_multichar.
* cpplex.c (cpp_interpret_charconst): Don't sign-extend
each character. Update prototype. Sign-extend the result.
* cpplib.h: Fix conditions.
(struct cpp_options): Add new warning flag.
(cpp_interpret_charconst): Update prototype.
cp:
* Make-lang.in (decl2.o): Update.
* cp-tree.h (warn_multichar): Remove.
* decl2.c: Include c-common.h.
(warn_multichar): Remove.
doc:
* cpp.texi: Update documentation.
testsuite:
* gcc.dg/cpp/charconst-3.c: Correct tests accordingly.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53240 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cppexp.c')
-rw-r--r-- | gcc/cppexp.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/cppexp.c b/gcc/cppexp.c index b71b02abfd2..288cdd406b0 100644 --- a/gcc/cppexp.c +++ b/gcc/cppexp.c @@ -295,7 +295,16 @@ eval_token (pfile, token) case CPP_WCHAR: case CPP_CHAR: - op.value = cpp_interpret_charconst (pfile, token, 1, &temp, &unsignedp); + { + cppchar_t result = cpp_interpret_charconst (pfile, token, + &temp, &unsignedp); + op.value = result; + /* Sign-extend the result if necessary. */ + if (!unsignedp && (cppchar_signed_t) result < 0 + && sizeof (HOST_WIDEST_INT) > sizeof (cppchar_t)) + op.value |= ~(((unsigned HOST_WIDEST_INT) 1 << BITS_PER_CPPCHAR_T) + - 1); + } break; case CPP_NAME: |