[PATCH 4/9] pre-process: print macros containing # and ## correctly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The dump_macro() function fails to correctly output the definitions of
macros that contain the string operator '#', the concatenation operator
'##' and any macro parameter in the definition token list. For example,
the following macros:

    #define STRING(x) #x
    #define CONCAT(x,y) x ## y

are output like so:

    #define STRING(x) unhandled token type '21'
    #define CONCAT(x, y) unhandled token type '22'  unhandled token type '23'  unhandled token type '22'

Add the code necessary to handle those token types to the dump_macros()
function and add the above macros to the 'dump-macros.c' test file.

Signed-off-by: Ramsay Jones <ramsay@xxxxxxxxxxxxxxxxxxxx>
---
 pre-process.c                         | 7 +++++++
 validation/preprocessor/dump-macros.c | 5 +++++
 2 files changed, 12 insertions(+)

diff --git a/pre-process.c b/pre-process.c
index 8abd5e6..eca7ab5 100644
--- a/pre-process.c
+++ b/pre-process.c
@@ -2196,6 +2196,13 @@ static void dump_macro(struct symbol *sym)
 		switch (token_type(token)) {
 		case TOKEN_UNTAINT:
 			break;
+		case TOKEN_STR_ARGUMENT:
+			printf("#%s", show_token(args[token->argnum]));
+			break;
+		case TOKEN_CONCAT:
+			printf("## ");
+			break;
+		case TOKEN_QUOTED_ARGUMENT:
 		case TOKEN_MACRO_ARGUMENT:
 			token = args[token->argnum];
 			/* fall-through */
diff --git a/validation/preprocessor/dump-macros.c b/validation/preprocessor/dump-macros.c
index 4dbb962..5a96464 100644
--- a/validation/preprocessor/dump-macros.c
+++ b/validation/preprocessor/dump-macros.c
@@ -6,6 +6,9 @@
 #define DEF xyz
 
 #define NYDEF ydef
+
+#define STRING(x) #x
+#define CONCAT(x,y) x ## y
 /*
  * check-name: dump-macros
  * check-command: sparse -E -dD -DIJK=ijk -UNDEF -UNYDEF $file
@@ -15,4 +18,6 @@ check-output-pattern(1): #define __CHECKER__ 1
 check-output-contains: #define IJK ijk
 check-output-contains: #define DEF xyz
 check-output-contains: #define NYDEF ydef
+check-output-contains: #define STRING(x) #x
+check-output-contains: #define CONCAT(x, y) x ## y
  */
-- 
2.19.0



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux