git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] config.mak.dev: re-enable -Wformat-zero-length

From
Jeff King <peff@peff.net>
Date
Feb 27, 2020, 23:54 UTC
Message-ID
<20200227235445.GA1371170@coredump.intra.peff.net>
In-Reply-To
<pull.567.git.1582835130592.gitgitgadget@gmail.com>
On Thu, Feb 27, 2020 at 08:25:30PM +0000, Ralf Thielow via GitGitGadget wrote:
Show 7 quoted lines
> Fixes the following warnings:
> 
> rebase-interactive.c: In function ‘edit_todo_list’:
> rebase-interactive.c:137:38: warning: zero-length gnu_printf format string [-Wformat-zero-length]
>     write_file(rebase_path_dropped(), "");
> rebase-interactive.c:144:37: warning: zero-length gnu_printf format string [-Wformat-zero-length]
>    write_file(rebase_path_dropped(), "");
Thanks, I think this is worth doing.

I had noticed them, too, but then they "went away" so I assumed they had already been fixed. It turns out that it's the difference between a build with and without the DEVELOPER Makefile knob set.

I think we should do this on top:
-- >8 --
Subject: [PATCH] config.mak.dev: re-enable -Wformat-zero-length

We recently triggered some -Wformat-zero-length warnings in the code, but no developers noticed because we suppress that warning in builds with the DEVELOPER=1 Makefile knob set. But we _don't_ suppress them in a non-developer build (and they're part of -Wall). So even though non-developers probably aren't using -Werror, they see the annoying warnings when they build.

We've had back and forth discussion over the years on whether this warning is useful or not. In most cases we've seen, it's not true that the call is a mistake, since we're using its side effects (like adding a newline status_printf_ln()) or writing an empty string to a destination which is handled by the function (as in write_file()). And so we end up working around it in the source by passing ("%s", "").

There's more discussion in the subthread starting at:
  https://lore.kernel.org/git/xmqqtwaod7ly.fsf@gitster.mtv.corp.google.com/

The short of it is that we probably can't just disable the warning for everybody because of portability issues. And ignoring it for developers puts us in the situation we're in now, where non-dev builds are annoyed.

Since the workaround is both rarely needed and fairly straight-forward, let's just commit to doing it as necessary, and re-enable the warning.

Signed-off-by: Jeff King <peff@peff.net>
---
I had totally forgotten about that thread until researching the history
just now. There's another option there involving #pragma, but it was too
gross for me to even suggest now as an alternative in the commit
message. ;) I think this is the most practical improvement.
 config.mak.dev | 1 -
 1 file changed, 1 deletion(-)
diff --git a/config.mak.dev b/config.mak.dev
index bf1f3fcdee..89b218d11a 100644
--- a/config.mak.dev
+++ b/config.mak.dev
@@ -9,7 +9,6 @@ endif
 DEVELOPER_CFLAGS += -Wall
 DEVELOPER_CFLAGS += -Wdeclaration-after-statement
 DEVELOPER_CFLAGS += -Wformat-security
-DEVELOPER_CFLAGS += -Wno-format-zero-length
 DEVELOPER_CFLAGS += -Wold-style-definition
 DEVELOPER_CFLAGS += -Woverflow
 DEVELOPER_CFLAGS += -Wpointer-arith
-- 
2.25.1.911.g022f5304bc
Previous: Ralf Thielow via GitGitGadgetNext: Junio C Hamano
Message 2 of 6 in “rebase-interactive.c: silence format-zero-length warnings”
  1. rebase-interactive.c: silence format-zero-length warningsRalf Thielow via GitGitGadget, Feb 27, 2020
  2. config.mak.dev: re-enable -Wformat-zero-lengthJeff King, Feb 27, 2020
  3. Junio C HamanoFeb 28, 2020
  4. Jeff KingFeb 28, 2020
  5. Alban GruinMar 3, 2020
  6. Junio C HamanoMar 3, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.