Skip to content

Commit d66cf77

Browse files
torvaldsgregkh
authored andcommitted
gcc-15: disable '-Wunterminated-string-initialization' entirely for now
commit 9d7a057 upstream. From: Linus Torvalds <[email protected]> I had left the warning around but as a non-fatal error to get my gcc-15 builds going, but fixed up some of the most annoying warning cases so that it wouldn't be *too* verbose. Because I like the _concept_ of the warning, even if I detested the implementation to shut it up. It turns out the implementation to shut it up is even more broken than I thought, and my "shut up most of the warnings" patch just caused fatal errors on gcc-14 instead. I had tested with clang, but when I upgrade my development environment, I try to do it on all machines because I hate having different systems to maintain, and hadn't realized that gcc-14 now had issues. The ACPI case is literally why I wanted to have a *type* that doesn't trigger the warning (see commit d5d45a7: "gcc-15: make 'unterminated string initialization' just a warning"), instead of marking individual places as "__nonstring". But gcc-14 doesn't like that __nonstring location that shut gcc-15 up, because it's on an array of char arrays, not on one single array: drivers/acpi/tables.c:399:1: error: 'nonstring' attribute ignored on objects of type 'const char[][4]' [-Werror=attributes] 399 | static const char table_sigs[][ACPI_NAMESEG_SIZE] __initconst __nonstring = { | ^~~~~~ and my attempts to nest it properly with a type had failed, because of how gcc doesn't like marking the types as having attributes, only symbols. There may be some trick to it, but I was already annoyed by the bad attribute design, now I'm just entirely fed up with it. I wish gcc had a proper way to say "this type is a *byte* array, not a string". The obvious thing would be to distinguish between "char []" and an explicitly signed "unsigned char []" (as opposed to an implicitly unsigned char, which is typically an architecture-specific default, but for the kernel is universal thanks to '-funsigned-char'). But any "we can typedef a 8-bit type to not become a string just because it's an array" model would be fine. But "__attribute__((nonstring))" is sadly not that sane model. Reported-by: Chris Clayton <[email protected]> Fixes: 4b4bd8c ("gcc-15: acpi: sprinkle random '__nonstring' crumbles around") Fixes: d5d45a7 ("gcc-15: make 'unterminated string initialization' just a warning") Signed-off-by: Linus Torvalds <[email protected]> [nathan: drivers/acpi diff dropped due to lack of 4b4bd8c in stable] Signed-off-by: Nathan Chancellor <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 9f58537 commit d66cf77

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,8 +1001,8 @@ KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
10011001
KBUILD_CFLAGS-$(CONFIG_CC_NO_STRINGOP_OVERFLOW) += $(call cc-option, -Wno-stringop-overflow)
10021002
KBUILD_CFLAGS-$(CONFIG_CC_STRINGOP_OVERFLOW) += $(call cc-option, -Wstringop-overflow)
10031003

1004-
#Currently, disable -Wunterminated-string-initialization as an error
1005-
KBUILD_CFLAGS += $(call cc-option, -Wno-error=unterminated-string-initialization)
1004+
#Currently, disable -Wunterminated-string-initialization as broken
1005+
KBUILD_CFLAGS += $(call cc-option, -Wno-unterminated-string-initialization)
10061006

10071007
# disable invalid "can't wrap" optimizations for signed / pointers
10081008
KBUILD_CFLAGS += -fno-strict-overflow

0 commit comments

Comments
 (0)