https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715
--- Comment #24 from Arnd Bergmann <arnd at linaro dot org> --- (In reply to Martin Liška from comment #23) > That's definitely possible for GCC 9. Question is whether such change will > be sufficient for you. Do you expect it will reduce stack usage in the > desired way? I've recreated my original finding, comparing a clang-5 release against a recent gcc-8 snapshot. Building an x86 allmodconfig kernel with clang, I get 78 -fsanitize-address-use-after-scope warnings against a 2048 byte limit, the largest ones are: drivers/usb/misc/sisusbvga/sisusb.c:1880:12: warning: stack frame size of 6776 bytes in function 'sisusb_init_gfxcore' [-Wframe-larger-than=] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c:1521:1: warning: stack frame size of 5176 bytes in function 'gk104_ram_new_' [-Wframe-larger-than=] drivers/usb/misc/sisusbvga/sisusb.c:1750:12: warning: stack frame size of 5112 bytes in function 'sisusb_set_default_mode' [-Wframe-larger-than=] drivers/net/wireless/atmel/atmel.c:1307:5: warning: stack frame size of 5016 bytes in function 'atmel_open' [-Wframe-larger-than=] net/core/ethtool.c:2549:5: warning: stack frame size of 4568 bytes in function 'dev_ethtool' [-Wframe-larger-than=] drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c:19216:6: warning: stack frame size of 4312 bytes in function 'wlc_phy_init_nphy' [-Wframe-larger-than=] drivers/media/usb/em28xx/em28xx-dvb.c:1129:12: warning: stack frame size of 3992 bytes in function 'em28xx_dvb_init' [-Wframe-larger-than=] drivers/staging/media/atomisp/pci/atomisp2/css2400/sh_css.c:6802:24: warning: stack frame size of 3960 bytes in function 'load_capture_binaries' [-Wframe-larger-than=] drivers/staging/wlan-ng/cfg80211.c:454:12: warning: stack frame size of 3864 bytes in function 'prism2_connect' [-Wframe-larger-than=] drivers/staging/wilc1000/host_interface.c:2480:13: warning: stack frame size of 3704 bytes in function 'host_if_work' [-Wframe-larger-than=] With gcc-8, the same configuration has 179 warnings, including: drivers/net/wireless/ralink/rt2x00/rt2800lib.c:5650:1: warning: the frame size of 23632 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt2800lib.c:4515:1: warning: the frame size of 14056 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt2800lib.c:3879:1: warning: the frame size of 11504 bytes is larger than 2048 bytes [-Wframe-larger-than=] lib/atomic64_test.c:250:1: warning: the frame size of 11192 bytes is larger than 2048 bytes [-Wframe-larger-than=] lib/atomic64_test.c:148:1: warning: the frame size of 10360 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt73usb.c:1294:1: warning: the frame size of 8680 bytes is larger than 2048 bytes [-Wframe-larger-than=] fs/fscache/stats.c:287:1: warning: the frame size of 6536 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt2800lib.c:8655:1: warning: the frame size of 6456 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/media/dvb-frontends/stv090x.c:3090:1: warning: the frame size of 5872 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt61pci.c:1647:1: warning: the frame size of 5792 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/media/dvb-frontends/stv090x.c:1595:1: warning: the frame size of 5304 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/scsi/fnic/fnic_trace.c:451:1: warning: the frame size of 5000 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/net/wireless/ralink/rt2x00/rt2800lib.c:2417:1: warning: the frame size of 4912 bytes is larger than 2048 bytes [-Wframe-larger-than=] drivers/media/dvb-frontends/stv090x.c:4265:1: warning: the frame size of 4840 bytes is larger than 2048 bytes [-Wframe-larger-than=] Comparing against a 3072 byte limit, I get 18 warnings for clang vs 54 for gcc-8. The detailed analysis of some of those warnings last year had shown that the difference can be traced almost entirely to simple scalar variables that use 64 bytes redzone with gcc but only 16 bytes with clang.