From: Linus Torvalds Date: Thu, 9 Jun 2022 16:41:42 +0000 (-0700) Subject: gcc-12: disable '-Wdangling-pointer' warning for now X-Git-Tag: accepted/tizen/unified/20230616.172401~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0704f7843952b3a98ee034202c72e26c980584f2;p=platform%2Fkernel%2Flinux-amlogic.git gcc-12: disable '-Wdangling-pointer' warning for now While the concept of checking for dangling pointers to local variables at function exit is really interesting, the gcc-12 implementation is not compatible with reality, and results in false positives. For example, gcc sees us putting things on a local list head allocated on the stack, which involves exactly those kinds of pointers to the local stack entry: In function ‘__list_add’, inlined from ‘list_add_tail’ at include/linux/list.h:102:2, inlined from ‘rebuild_snap_realms’ at fs/ceph/snap.c:434:2: include/linux/list.h:74:19: warning: storing the address of local variable ‘realm_queue’ in ‘*&realm_27(D)->rebuild_item.prev’ [-Wdangling-pointer=] 74 | new->prev = prev; | ~~~~~~~~~~^~~~~~ But then gcc - understandably - doesn't really understand the big picture how the doubly linked list works, so doesn't see how we then end up emptying said list head in a loop and the pointer we added has been removed. Gcc also complains about us (intentionally) using this as a way to store a kind of fake stack trace, eg drivers/acpi/acpica/utdebug.c:40:38: warning: storing the address of local variable ‘current_sp’ in ‘acpi_gbl_entry_stack_pointer’ [-Wdangling-pointer=] 40 | acpi_gbl_entry_stack_pointer = ¤t_sp; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ which is entirely reasonable from a compiler standpoint, and we may want to change those kinds of patterns, but not not. So this is one of those "it would be lovely if the compiler were to complain about us leaving dangling pointers to the stack", but not this way. Signed-off-by: Linus Torvalds [sw0312.kim: backport upstream commit 49beadbd47c2 to resolve gcc-13 build issue] Signed-off-by: Seung-Woo Kim Change-Id: I1c45cf23149d2bab3cf8104013bd890302a567f6 --- diff --git a/Makefile b/Makefile index 8829577a1c4d..1ac32db87203 100644 --- a/Makefile +++ b/Makefile @@ -791,6 +791,9 @@ else # Use make W=1 to enable them (see scripts/Makefile.build) KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) + +# These result in bogus false positives +KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer) endif ifdef CONFIG_FRAME_POINTER