OUNTER__ macro is expanded to a sequential number starting from 0. This is sometimes used to declare unique variable names. Implement support for __COUNTER__ in sparse including a small test program for the test suite. Signed-off-by: Sam Ravnborg <sam@xxxxxxxxxxxx> --- I had hit this before - and then I saw a mil about it today. So took a quick look at it. It seems to work as expected. ident-list.h | 1 + pre-process.c | 3 +++ validation/preprocessor/preprocessor24.c | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 validation/preprocessor/preprocessor24.c diff --git a/ident-list.h b/ident-list.h index d5a145f..98e1764 100644 --- a/ident-list.h +++ b/ident-list.h @@ -108,6 +108,7 @@ __IDENT(__TIME___ident, "__TIME__", 0); __IDENT(__func___ident, "__func__", 0); __IDENT(__FUNCTION___ident, "__FUNCTION__", 0); __IDENT(__PRETTY_FUNCTION___ident, "__PRETTY_FUNCTION__", 0); +__IDENT(__COUNTER__ident, "__COUNTER__", 0); /* Sparse commands */ IDENT_RESERVED(__context__); diff --git a/pre-process.c b/pre-process.c index 1aa3d2c..67cc81f 100644 --- a/pre-process.c +++ b/pre-process.c @@ -181,6 +181,9 @@ 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 == &__COUNTER__ident) { + static int counter = 0; + replace_with_integer(token, counter++); } return 1; } diff --git a/validation/preprocessor/preprocessor24.c b/validation/preprocessor/preprocessor24.c new file mode 100644 index 0000000..381b823 --- /dev/null +++ b/validation/preprocessor/preprocessor24.c @@ -0,0 +1,20 @@ +#define DO_CONCAT(a, b) a##b +#define CONCAT(a, b) DO_CONCAT(a, b) +#define VARNAME(name) CONCAT(name, __COUNTER__) + +int VARNAME(x); +int VARNAME(x); + +/* + * check-name: Preprocessor #24 __COUNTER__ + * check-command: sparse -E $file + * + * check-output-start + +int x0; +int x1; +* check-output-end + * + * check-error-start + * check-error-end + */ -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html