diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-20 17:01:32 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-20 17:01:32 +0000 |
commit | 624d37a67346eddd65841cd7093190b69a5db148 (patch) | |
tree | 60cdafb935d90504cac1d3437ff96f90d70b9c09 /gcc/builtins.c | |
parent | 628dfe67321e94b743a840ef4e2ee5d0b75a9e02 (diff) | |
download | gcc-624d37a67346eddd65841cd7093190b69a5db148.tar.gz |
PR 18785
libcpp:
* charset.c (LAST_POSSIBLY_BASIC_SOURCE_CHAR): New helper macro.
(cpp_host_to_exec_charset): New function.
* include/cpplib.h: Declare cpp_host_to_exec_charset.
gcc:
* langhooks.h (struct lang_hooks): Add to_target_charset.
* langhooks.c (lhd_to_target_charset): New function.
* langhooks-def.h: Declare lhd_to_target_charset.
(LANG_HOOKS_TO_TARGET_CHARSET): New macro.
(LANG_HOOKS_INITIALIZER): Update.
* c-common.c (c_common_to_target_charset): New function.
* c-common.h: Declare it.
* c-objc-common.h (LANG_HOOKS_TO_TARGET_CHARSET): Set to
c_common_to_target_charset.
* defaults.c (TARGET_BELL, TARGET_BS, TARGET_CR, TARGET_DIGIT0)
(TARGET_ESC, TARGET_FF, TARGET_NEWLINE, TARGET_TAB, TARGET_VT):
Delete definitions.
* system.h: Poison them.
* doc/tm.texi: Don't discuss them.
* builtins.c (fold_builtin_isdigit): Use lang_hooks.to_target_charset.
* c-pretty-print.c (pp_c_integer_constant): Don't use pp_c_char.
(pp_c_char): Do not attempt to generate letter escapes for
newline, tab, etc.
* config/arm/arm.c (output_ascii_pseudo_op): Likewise.
* config/mips/mips.c (mips_output_ascii): Likewise.
gcc/cp:
* cp-objcp-common.h (LANG_HOOKS_TO_TARGET_CHARSET): Set to
c_common_to_target_charset. Delete bogus comment.
gcc/testsuite:
* gcc.dg/charset/builtin1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95304 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index c214ef7ae20..f0dd878d36b 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7623,11 +7623,18 @@ fold_builtin_isdigit (tree arglist) else { /* Transform isdigit(c) -> (unsigned)(c) - '0' <= 9. */ - /* According to the C standard, isdigit is unaffected by locale. */ - tree arg = TREE_VALUE (arglist); - arg = fold_convert (unsigned_type_node, arg); + /* According to the C standard, isdigit is unaffected by locale. + However, it definitely is affected by the target character set. */ + tree arg; + unsigned HOST_WIDE_INT target_digit0 + = lang_hooks.to_target_charset ('0'); + + if (target_digit0 == 0) + return NULL_TREE; + + arg = fold_convert (unsigned_type_node, TREE_VALUE (arglist)); arg = build2 (MINUS_EXPR, unsigned_type_node, arg, - build_int_cst (unsigned_type_node, TARGET_DIGIT0)); + build_int_cst (unsigned_type_node, target_digit0)); arg = build2 (LE_EXPR, integer_type_node, arg, build_int_cst (unsigned_type_node, 9)); arg = fold (arg); |