mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Jeff King](/assets/img/avatar_default.png)
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
48 lines
1.6 KiB
Plaintext
48 lines
1.6 KiB
Plaintext
ifeq ($(filter no-error,$(DEVOPTS)),)
|
|
DEVELOPER_CFLAGS += -Werror
|
|
endif
|
|
ifneq ($(filter pedantic,$(DEVOPTS)),)
|
|
DEVELOPER_CFLAGS += -pedantic
|
|
# don't warn for each N_ use
|
|
DEVELOPER_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0
|
|
endif
|
|
DEVELOPER_CFLAGS += -Wall
|
|
DEVELOPER_CFLAGS += -Wdeclaration-after-statement
|
|
DEVELOPER_CFLAGS += -Wformat-security
|
|
DEVELOPER_CFLAGS += -Wold-style-definition
|
|
DEVELOPER_CFLAGS += -Woverflow
|
|
DEVELOPER_CFLAGS += -Wpointer-arith
|
|
DEVELOPER_CFLAGS += -Wstrict-prototypes
|
|
DEVELOPER_CFLAGS += -Wunused
|
|
DEVELOPER_CFLAGS += -Wvla
|
|
|
|
ifndef COMPILER_FEATURES
|
|
COMPILER_FEATURES := $(shell ./detect-compiler $(CC))
|
|
endif
|
|
|
|
ifneq ($(filter clang4,$(COMPILER_FEATURES)),)
|
|
DEVELOPER_CFLAGS += -Wtautological-constant-out-of-range-compare
|
|
endif
|
|
|
|
ifneq ($(or $(filter gcc6,$(COMPILER_FEATURES)),$(filter clang4,$(COMPILER_FEATURES))),)
|
|
DEVELOPER_CFLAGS += -Wextra
|
|
# if a function is public, there should be a prototype and the right
|
|
# header file should be included. If not, it should be static.
|
|
DEVELOPER_CFLAGS += -Wmissing-prototypes
|
|
ifeq ($(filter extra-all,$(DEVOPTS)),)
|
|
# These are disabled because we have these all over the place.
|
|
DEVELOPER_CFLAGS += -Wno-empty-body
|
|
DEVELOPER_CFLAGS += -Wno-missing-field-initializers
|
|
DEVELOPER_CFLAGS += -Wno-sign-compare
|
|
DEVELOPER_CFLAGS += -Wno-unused-parameter
|
|
endif
|
|
endif
|
|
|
|
# uninitialized warnings on gcc 4.9.2 in xdiff/xdiffi.c and config.c
|
|
# not worth fixing since newer compilers correctly stop complaining
|
|
ifneq ($(filter gcc4,$(COMPILER_FEATURES)),)
|
|
ifeq ($(filter gcc5,$(COMPILER_FEATURES)),)
|
|
DEVELOPER_CFLAGS += -Wno-uninitialized
|
|
endif
|
|
endif
|