diff options
| author | Alexis Hunt <alercah@gmail.com> | 2011-07-19 00:50:57 +0000 |
|---|---|---|
| committer | Alexis Hunt <alercah@gmail.com> | 2011-07-19 00:50:57 +0000 |
| commit | 8cb46bb51cc79196cd2712bd7b113155fa691aca (patch) | |
| tree | fa061c642abb4bb52cb0ad60589906d8d9219f83 /clang/lib | |
| parent | 9ab3cac69468462fd0bf770d3a80912c611094ae (diff) | |
| download | bcm5719-llvm-8cb46bb51cc79196cd2712bd7b113155fa691aca.tar.gz bcm5719-llvm-8cb46bb51cc79196cd2712bd7b113155fa691aca.zip | |
Implement a __WCHAR_UNSIGNED__ macro and use it to include WCHAR_MIN and
WCHAR_MAX in limits.h, thus solving the problem where the system header
thinks it knows better.
llvm-svn: 135455
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Frontend/InitPreprocessor.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Headers/limits.h | 14 |
2 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 9428cd5de0f..77a1b3f396a 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -554,6 +554,9 @@ static void InitializePredefinedMacros(const TargetInfo &TI, if (!TargetInfo::isTypeSigned(TI.getWIntType())) Builder.defineMacro("__WINT_UNSIGNED__"); + if (!TargetInfo::isTypeSigned(TI.getWCharType())) + Builder.defineMacro("__WCHAR_UNSIGNED__"); + // Define exact-width integer types for stdint.h Builder.defineMacro("__INT" + llvm::Twine(TI.getCharWidth()) + "_TYPE__", "char"); diff --git a/clang/lib/Headers/limits.h b/clang/lib/Headers/limits.h index ecd09a4a246..6683a2db727 100644 --- a/clang/lib/Headers/limits.h +++ b/clang/lib/Headers/limits.h @@ -52,6 +52,8 @@ #undef LONG_MIN #undef LONG_MAX #undef ULONG_MAX +#undef WCHAR_MIN +#undef WCHAR_MAX #undef CHAR_BIT #undef CHAR_MIN @@ -62,6 +64,7 @@ #define SHRT_MAX __SHRT_MAX__ #define INT_MAX __INT_MAX__ #define LONG_MAX __LONG_MAX__ +#define WCHAR_MAX __WCHAR_MAX__ #define SCHAR_MIN (-__SCHAR_MAX__-1) #define SHRT_MIN (-__SHRT_MAX__ -1) @@ -87,6 +90,17 @@ #define CHAR_MAX __SCHAR_MAX__ #endif +/* C++ or C99: Added wchar_t */ +#if defined(__cplusplus) || __STDC_VERSION__ >= 199901 + +#ifdef __WCHAR_UNSIGNED__ +#define WCHAR_MIN 0 +#else +#define WCHAR_MIN (-__WCHAR_MAX__-1) +#endif + +#endif + /* C99 5.2.4.2.1: Added long long. */ #if __STDC_VERSION__ >= 199901 |

