Comments
Patch
@@ -99,6 +99,13 @@ __IDENT(__func___ident, "__func__", 0);
__IDENT(__FUNCTION___ident, "__FUNCTION__", 0);
__IDENT(__PRETTY_FUNCTION___ident, "__PRETTY_FUNCTION__", 0);
+__IDENT(__SCHAR_MAX__ident, "__SCHAR_MAX__", 0);
+__IDENT(__SHRT_MAX__ident, "__SHRT_MAX__", 0);
+__IDENT(__INT_MAX__ident, "__INT_MAX__", 0);
+__IDENT(__LONG_MAX__ident, "__LONG_MAX__", 0);
+__IDENT(__LONG_LONG_MAX__ident, "__LONG_LONG_MAX__", 0);
+__IDENT(__WCHAR_MAX__ident, "__WCHAR_MAX__", 0);
+
/* Sparse commands */
IDENT_RESERVED(__context__);
IDENT_RESERVED(__range__);
@@ -106,6 +106,14 @@ static void replace_with_integer(struct token *token, unsigned int val)
token->number = buf;
}
+static void replace_with_long_long(struct token *token, unsigned long long val)
+{
+ char *buf = __alloc_bytes(20);
+ sprintf(buf, "%llu", val);
+ token_type(token) = TOKEN_NUMBER;
+ token->number = buf;
+}
+
static struct symbol *lookup_macro(struct ident *ident)
{
struct symbol *sym = lookup_symbol(ident, NS_MACRO | NS_UNDEF);
@@ -167,6 +175,18 @@ static int expand_one_symbol(struct token **list)
time(&t);
strftime(buffer, 9, "%T", localtime(&t));
replace_with_string(token, buffer);
+ } else if (token->ident == &__SHRT_MAX__ident) {
+ replace_with_integer(token, __SHRT_MAX__);
+ } else if (token->ident == &__SCHAR_MAX__ident) {
+ replace_with_integer(token, __SCHAR_MAX__);
+ } else if (token->ident == &__INT_MAX__ident) {
+ replace_with_integer(token, __INT_MAX__);
+ } else if (token->ident == &__LONG_MAX__ident) {
+ replace_with_integer(token, __LONG_MAX__);
+ } else if (token->ident == &__LONG_LONG_MAX__ident) {
+ replace_with_long_long(token, __LONG_LONG_MAX__);
+ } else if (token->ident == &__WCHAR_MAX__ident) {
+ replace_with_integer(token, __WCHAR_MAX__);
}
return 1;
}
Sparse prints a lot of warnings like this for user-space projects: /usr/lib/gcc/i486-linux-gnu/4.3.2//include-fixed/limits.h:33:22: warning: undefined preprocessor identifier '__INT_MAX__' /usr/lib/gcc/i486-linux-gnu/4.3.2//include-fixed/limits.h:64:5: warning: undefined preprocessor identifier '__SHRT_MAX__' /usr/lib/gcc/i486-linux-gnu/4.3.2//include-fixed/limits.h:64:21: warning: undefined preprocessor identifier '__INT_MAX__' /usr/include/bits/xopen_lim.h:95:6: warning: undefined preprocessor identifier '__INT_MAX__' /usr/include/bits/xopen_lim.h:98:7: warning: undefined preprocessor identifier '__INT_MAX__' Fix that up by defining some GCC pre-processor builtins. Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> --- ident-list.h | 7 +++++++ pre-process.c | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 0 deletions(-)