From: David Lamparter Date: Thu, 18 Feb 2021 23:05:35 +0000 (+0100) Subject: tools/gcc-plugin: support [un]signed in pragma X-Git-Tag: base_8.0~195^2~14 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=bcf9d7d8aa77c66ac2e99f75ae11e276accecb1d;p=mirror%2Ffrr.git tools/gcc-plugin: support [un]signed in pragma Need `unsigned char *` for `%pHX`. Signed-off-by: David Lamparter --- diff --git a/tools/gcc-plugins/frr-format.c b/tools/gcc-plugins/frr-format.c index efb2c6393c..e9f397f225 100644 --- a/tools/gcc-plugins/frr-format.c +++ b/tools/gcc-plugins/frr-format.c @@ -4241,6 +4241,11 @@ handle_finish_parse (void *event_data, void *data) continue; } node = TREE_TYPE (node); + + if (etab->t_unsigned) + node = c_common_unsigned_type (node); + else if (etab->t_signed) + node = c_common_signed_type (node); } etab->type = node; @@ -4357,9 +4362,17 @@ handle_pragma_printfrr_ext (cpp_reader *dummy) ttype = pragma_lex (&token, &loc); /* qualifiers */ - if (ttype == CPP_NAME && !strcmp (IDENTIFIER_POINTER (token), "const")) + while (ttype == CPP_NAME) { - etab->t_const = true; + if (!strcmp (IDENTIFIER_POINTER (token), "const")) + etab->t_const = true; + else if (!strcmp (IDENTIFIER_POINTER (token), "signed")) + etab->t_signed = true; + else if (!strcmp (IDENTIFIER_POINTER (token), "unsigned")) + etab->t_unsigned = true; + else + break; + ttype = pragma_lex (&token, &loc); } diff --git a/tools/gcc-plugins/frr-format.h b/tools/gcc-plugins/frr-format.h index 87d2049ed4..599dbc56f9 100644 --- a/tools/gcc-plugins/frr-format.h +++ b/tools/gcc-plugins/frr-format.h @@ -113,6 +113,8 @@ struct kernel_ext_fmt tree_code type_code; int ptrlevel; bool t_const; + bool t_unsigned; + bool t_signed; bool warned; const char *type_str;