summaryrefslogtreecommitdiffstats
path: root/gcc/cppexp.c
diff options
context:
space:
mode:
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-06 22:53:10 +0000
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-06 22:53:10 +0000
commit318fdd81915678cdc4e744ad9aa51cbfef2b9fc1 (patch)
tree3f56b583072218fe62c5e65ab9af8fa0eb09165a /gcc/cppexp.c
parent09b8097e4cafe3e8cd0e44f136056fce86ccad74 (diff)
downloadppe42-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.c11
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:
OpenPOWER on IntegriCloud