Re: [PATCH][next] Bluetooth: hci.h: Avoid a couple -Wflex-array-member-not-at-end warnings

From: Luiz Augusto von Dentz

Date: Tue Apr 07 2026 - 16:10:31 EST


Hi Gustavo,

On Tue, Apr 7, 2026 at 3:58 PM Gustavo A. R. Silva
<gustavo@xxxxxxxxxxxxxx> wrote:
>
> Hi all,
>
> Friendly ping: who can take this, please?

Just resend as this is no longer available via patchwork.

> Thanks
> -Gustavo
>
> On 2/24/26 00:31, Gustavo A. R. Silva wrote:
> > -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> > getting ready to enable it, globally.
> >
> > struct hci_std_codecs and struct hci_std_codecs_v2 are flexible
> > structures, this is structures that contain a flexible-array member
> > (__u8 codec[]; and struct hci_std_codec_v2 codec[];, correspondingly.)
> >
> > Since struct hci_rp_read_local_supported_codecs and struct
> > hci_rp_read_local_supported_codecs_v2 are defined by hardware, we
> > create the new struct hci_std_codecs_hdr and struct hci_std_codecs_v2_hdr
> > types, and use them to replace the object types causing trouble in
> > struct hci_rp_read_local_supported_codecs and struct
> > hci_rp_read_local_supported_codecs_v2, namely struct hci_std_codecs
> > std_codecs; and struct hci_std_codecs_v2_hdr std_codecs;.
> >
> > Also, once -fms-extensions is enabled, we can use transparent struct
> > members in both struct hci_std_codecs and struct hci_std_codecs_v2_hdr.
> >
> > Notice that the newly created types does not contain the flex-array
> > member `codec`, which is the object causing the -Wfamnae warnings.
> >
> > After these changes, the size of struct hci_rp_read_local_supported_codecs
> > and struct hci_rp_read_local_supported_codecs_v2, along with their
> > member's offsets remain the same, hence the memory layouts don't
> > change:
> >
> > Before changes:
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs std_codecs; /* 1 1 */
> > struct hci_vnd_codecs vnd_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_v2 std_codecs; /* 1 1 */
> > struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > After changes:
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_hdr std_codecs; /* 1 1 */
> > struct hci_vnd_codecs vnd_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status; /* 0 1 */
> > struct hci_std_codecs_v2_hdr std_codecs; /* 1 1 */
> > struct hci_vnd_codecs_v2 vendor_codecs; /* 2 1 */
> >
> > /* size: 3, cachelines: 1, members: 3 */
> > /* last cacheline: 3 bytes */
> > } __attribute__((__packed__));
> >
> > With these changes fix the following warnings:
> >
> > include/net/bluetooth/hci.h:1490:31: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> > include/net/bluetooth/hci.h:1525:34: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> >
> > Signed-off-by: Gustavo A. R. Silva <gustavoars@xxxxxxxxxx>
> > ---
> > include/net/bluetooth/hci.h | 16 ++++++++++++----
> > 1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> > index 89ad9470fa71..572b1c620c5d 100644
> > --- a/include/net/bluetooth/hci.h
> > +++ b/include/net/bluetooth/hci.h
> > @@ -1468,8 +1468,12 @@ struct hci_rp_read_data_block_size {
> > } __packed;
> >
> > #define HCI_OP_READ_LOCAL_CODECS 0x100b
> > -struct hci_std_codecs {
> > +struct hci_std_codecs_hdr {
> > __u8 num;
> > +} __packed;
> > +
> > +struct hci_std_codecs {
> > + struct hci_std_codecs_hdr;
> > __u8 codec[];
> > } __packed;
> >
> > @@ -1487,7 +1491,7 @@ struct hci_vnd_codecs {
> >
> > struct hci_rp_read_local_supported_codecs {
> > __u8 status;
> > - struct hci_std_codecs std_codecs;
> > + struct hci_std_codecs_hdr std_codecs;
> > struct hci_vnd_codecs vnd_codecs;
> > } __packed;
> >
> > @@ -1504,8 +1508,12 @@ struct hci_std_codec_v2 {
> > __u8 transport;
> > } __packed;
> >
> > -struct hci_std_codecs_v2 {
> > +struct hci_std_codecs_v2_hdr {
> > __u8 num;
> > +} __packed;
> > +
> > +struct hci_std_codecs_v2 {
> > + struct hci_std_codecs_v2_hdr;
> > struct hci_std_codec_v2 codec[];
> > } __packed;
> >
> > @@ -1522,7 +1530,7 @@ struct hci_vnd_codecs_v2 {
> >
> > struct hci_rp_read_local_supported_codecs_v2 {
> > __u8 status;
> > - struct hci_std_codecs_v2 std_codecs;
> > + struct hci_std_codecs_v2_hdr std_codecs;
> > struct hci_vnd_codecs_v2 vendor_codecs;
> > } __packed;
> >
>


--
Luiz Augusto von Dentz