]> git.proxmox.com Git - mirror_frr.git/commitdiff
tools/gcc-plugin: support [un]signed in pragma
authorDavid Lamparter <equinox@diac24.net>
Thu, 18 Feb 2021 23:05:35 +0000 (00:05 +0100)
committerDavid Lamparter <equinox@diac24.net>
Fri, 26 Mar 2021 16:51:55 +0000 (17:51 +0100)
Need `unsigned char *` for `%pHX`.

Signed-off-by: David Lamparter <equinox@diac24.net>
tools/gcc-plugins/frr-format.c
tools/gcc-plugins/frr-format.h

index efb2c6393c9019e9321b6add3f42af3ceb391342..e9f397f225044859ec24c66ec6f25e52c8013324 100644 (file)
@@ -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);
     }
 
index 87d2049ed4f997cbdf29cf7fadbde234a33ee4a5..599dbc56f9cb23f84767e062860cf5e5f47ac63d 100644 (file)
@@ -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;