qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 6/6] qemu-io-cmds: Silent GCC9 format-overflow warning


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 6/6] qemu-io-cmds: Silent GCC9 format-overflow warning
Date: Wed, 18 Dec 2019 18:45:34 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2

On 12/18/19 5:15 AM, Richard Henderson wrote:
On 12/17/19 7:34 AM, Philippe Mathieu-Daudé wrote:
GCC9 is confused when building with CFLAG -O3:

   In function ‘help_oneline’,
       inlined from ‘help_all’ at qemu-io-cmds.c:2414:9,
       inlined from ‘help_f’ at qemu-io-cmds.c:2424:9:
   qemu-io-cmds.c:2389:9: error: ‘%s’ directive argument is null 
[-Werror=format-overflow=]
    2389 |         printf("%s ", ct->name);
         |         ^~~~~~~~~~~~~~~~~~~~~~~

Audit shows this can't happen. Give a hint to GCC adding an
assert() call.

This deserves more investigation.  From my glance it appears you are right --
and moreover impossible for gcc to have come to this conclusion.  Which begs
the question of how that is.

New entries are added to cmdtab[] in qemuio_add_command() which is public (also called in qemu-io.c). So you can insert a cmdinfo_t with a name being NULL. This is why I thought GCC was correct first, and I tried:

-- >8 --
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -42,6 +42,7 @@ void qemuio_add_command(const cmdinfo_t *ci)
      * Catch it now rather than letting it manifest as a crash if a
      * particular set of command line options are used.
      */
+    assert(ci->name);
     assert(ci->perm == 0 ||
            (ci->flags & (CMD_FLAG_GLOBAL | CMD_NOFILE_OK)) == 0);
     cmdtab = g_renew(cmdinfo_t, cmdtab, ++ncmds);
---

But this didn't fix the warning... So I moved the assert() in the other location.


Did you file a gcc bug report?

No because I'm not sure this is a bug, but if you confirm I'll file one :)


Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
---
Cc: Kevin Wolf <address@hidden>
Cc: Max Reitz <address@hidden>
Cc: address@hidden
---
  qemu-io-cmds.c | 1 +
  1 file changed, 1 insertion(+)

diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
index 1b7e700020..9e956a5dd4 100644
--- a/qemu-io-cmds.c
+++ b/qemu-io-cmds.c
@@ -2411,6 +2411,7 @@ static void help_all(void)
      const cmdinfo_t *ct;
for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) {
+        assert(ct->name);
          help_oneline(ct->name, ct);
      }
      printf("\nUse 'help commandname' for extended help.\n");






reply via email to

[Prev in Thread] Current Thread [Next in Thread]