Hi all, Think this one has somewhat fallen through the cracks.
Gentle ping if someone could take a look? Thanks, Tamar > -----Original Message----- > From: Christopher Bazley <[email protected]> > Sent: 09 October 2025 11:57 > To: [email protected] > Subject: Ping 10: [PATCH v4 0/1] Add warnings of potentially-uninitialized > padding bits > > Ping > > On 21/05/2025 16:13, Christopher Bazley wrote: > > Commit 0547dbb725b reduced the number of cases in which > > union padding bits are zeroed when the relevant language > > standard does not strictly require it, unless gcc was > > invoked with -fzero-init-padding-bits=unions or > > -fzero-init-padding-bits=all in order to explicitly > > request zeroing of padding bits. > > > > This commit adds a closely related warning, > > -Wzero-init-padding-bits=, which is intended to help > > programmers to find code that might now need to be > > rewritten or recompiled with > > -fzero-init-padding-bits=unions or > > -fzero-init-padding-bits=all in order to replicate > > the behaviour that it had when compiled by older > > versions of GCC. It can also be used to find struct > > padding that was never previously guaranteed to be > > zero initialized and still isn't unless GCC is > > invoked with -fzero-init-padding-bits=all option. > > > > The new warning can be set to the same three states > > as -fzero-init-padding-bits ('standard', 'unions' > > or 'all') and has the same default value ('standard'). > > > > The two options interact as follows: > > > > f: standard f: unions f: all > > w: standard X X X > > w: unions U X X > > w: all A S X > > > > X = No warnings about padding > > U = Warnings about padding of unions. > > S = Warnings about padding of structs. > > A = Warnings about padding of structs and unions. > > > > The level of optimisation and whether or not the > > entire initializer is dropped to memory can both > > affect whether warnings are produced when compiling > > a given program. This is intentional, since tying > > the warnings more closely to the relevant language > > standard would require a very different approach > > that would still be target-dependent, might impose > > an unacceptable burden on programmers, and would > > risk not satisfying the intended use-case (which > > is closely tied to a specific optimisation). > > > > Bootstrapped the compiler and tested on AArch64 > > and x86-64 using some new tests for > > -Wzero-init-padding-bits and the existing tests > > for -fzero-init-padding-bits > > (check-gcc RUNTESTFLAGS="dg.exp=*-empty-init-*.c"). > > > > Base commit is a470433732e77ae29a717cf79049ceeea3cbe979 > > > > Changes in v2: > > - Added missing changelog entry. > > > > Changes in v3: > > - Modified two tests in which I had neglected to > > ensure that initializers were not compile time > > constants. This policy prevents the entire > > initializer being dropped to memory, which > > would otherwise prevent the expected diagnostic > > message from being produced. > > - Amended the diagnostic message from "Padding bits > > might not.." to "padding might not..." > > > > Changes in v4: > > - Removed redundant braces. > > - Added "if code relies on it being zero," to the > > diagnostic message. > > > > Link to v1: > > https://inbox.sourceware.org/gcc-patches/20250520104940.3546-1- > [email protected]/ > > > > Link to v2: > > https://inbox.sourceware.org/gcc-patches/20250520144524.5968-1- > [email protected]/ > > > > Link to v3: > > https://inbox.sourceware.org/gcc-patches/20250521124745.24592-1- > [email protected]/ > > > > Christopher Bazley (1): > > Add warnings of potentially-uninitialized padding bits > > > > gcc/common.opt | 4 + > > gcc/doc/invoke.texi | 85 ++++++++++++++++++- > > gcc/expr.cc | 41 ++++----- > > gcc/expr.h | 7 +- > > gcc/gimplify.cc | 27 +++++- > > gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c | 68 +++++++++++++++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c | 51 +++++++++++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c | 69 +++++++++++++++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c | 7 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c | 69 +++++++++++++++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c | 8 ++ > > gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c | 69 +++++++++++++++ > > .../gcc.dg/gnu11-empty-init-warn-1.c | 52 ++++++++++++ > > .../gcc.dg/gnu11-empty-init-warn-10.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-11.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-12.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-13.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-14.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-15.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-16.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-17.c | 51 +++++++++++ > > .../gcc.dg/gnu11-empty-init-warn-2.c | 59 +++++++++++++ > > .../gcc.dg/gnu11-empty-init-warn-3.c | 7 ++ > > .../gcc.dg/gnu11-empty-init-warn-4.c | 63 ++++++++++++++ > > .../gcc.dg/gnu11-empty-init-warn-5.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-6.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-7.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-8.c | 8 ++ > > .../gcc.dg/gnu11-empty-init-warn-9.c | 55 ++++++++++++ > > 39 files changed, 935 insertions(+), 25 deletions(-) > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-1.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-10.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-11.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-12.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-13.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-14.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-15.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-16.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-17.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-2.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-3.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-4.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-5.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-6.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-7.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-8.c > > create mode 100644 gcc/testsuite/gcc.dg/c23-empty-init-warn-9.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-1.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-10.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-11.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-12.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-13.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-14.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-15.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-16.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-17.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-2.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-3.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-4.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-5.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-6.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-7.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-8.c > > create mode 100644 gcc/testsuite/gcc.dg/gnu11-empty-init-warn-9.c > > > -- > Christopher Bazley > Staff Software Engineer, GNU Tools Team. > Arm Ltd, 110 Fulbourn Road, Cambridge, CB1 9NJ, UK. > http://www.arm.com/
