hyperv: Avoid -Wflex-array-member-not-at-end warning
Subsystems (3)
PATCH 1/1 hyperv: Avoid -Wflex-array-member-not-at-end warning
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the new __TRAILING_OVERLAP() helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
This helper creates a union between a flexible-array member (FAM) and a set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping the FAM and the start of MEMBER aligned.
The static_assert() ensures this alignment remains, and it's intentionally placed inmediately after the related structure --no blank line in between.
--- include/hyperv/hvgdk_mini.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
include/hyperv/hvgdk_mini.h +5 -2
@@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */struct hv_tlb_flush_ex {u64 address_space;u64 flags; -struct hv_vpset hv_vp_set; -u64 gva_list[]; + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed, + u64 gva_list[]; + ); } __packed; +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) == + offsetof(struct hv_tlb_flush_ex, gva_list));struct ms_hyperv_tsc_page {/* HV_REFERENCE_TSC_PAGE */ volatile u32 tsc_sequence;
Signature · 1 line
2.43.0
Wei Liu
maintainerQuoted 14 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the new
__TRAILING_OVERLAP()helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]This helper creates a union between a flexible-array member (FAM) and a set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping the FAM and the start of MEMBER aligned.
Quoted 5 lines
The
static_assert()ensures this alignment remains, and it's intentionally placed inmediately after the related structure --no blank line in between.Signed-off-by Gustavo A. R. Silva <[email protected]>
Gustavo, what is your build command? I would like to incorporate that into my own build tests.
Thanks,
Wei
Quoted 26 lines
--- include/hyperv/hvgdk_mini.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)include/hyperv/hvgdk_mini.h +5
-2@@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */struct hv_tlb_flush_ex {u64 address_space;u64 flags; -struct hv_vpset hv_vp_set; -u64 gva_list[]; + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed, + u64 gva_list[]; + ); } __packed; +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) == + offsetof(struct hv_tlb_flush_ex, gva_list));struct ms_hyperv_tsc_page {/* HV_REFERENCE_TSC_PAGE */ volatile u32 tsc_sequence;Signature · 1 line
2.43.0
Quoted 15 lines · Wei Liu
Quoted 14 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the new
__TRAILING_OVERLAP()helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]This helper creates a union between a flexible-array member (FAM) and a set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping the FAM and the start of MEMBER aligned.
Quoted 8 lines
Quoted 5 lines
The
static_assert()ensures this alignment remains, and it's intentionally placed inmediately after the related structure --no blank line in between.Signed-off-by Gustavo A. R. Silva <[email protected]>Gustavo, what is your build command? I would like to incorporate that into my own build tests.
I'm using the following patch (which is the one I'll actually submit upstream once all these warnings are fixed).
Makefile +2 -0
@@ -1086,6 +1086,8 @@ KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3) # Allow including a tagged struct or union anonymously in another struct/union. KBUILD_CFLAGS += -fms-extensions +KBUILD_CFLAGS += $(call cc-option, -Wflex-array-member-not-at-end) + # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += -fno-strict-overflow
Thanks
-Gustavo
Quoted 30 lines
Thanks,
WeiQuoted 26 lines
--- include/hyperv/hvgdk_mini.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)include/hyperv/hvgdk_mini.h +5
-2@@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */struct hv_tlb_flush_ex {u64 address_space;u64 flags; -struct hv_vpset hv_vp_set; -u64 gva_list[]; + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed, + u64 gva_list[]; + ); } __packed; +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) == + offsetof(struct hv_tlb_flush_ex, gva_list));struct ms_hyperv_tsc_page {/* HV_REFERENCE_TSC_PAGE */ volatile u32 tsc_sequence;Signature · 1 line
2.43.0
Quoted 14 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the new
__TRAILING_OVERLAP()helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]This helper creates a union between a flexible-array member (FAM) and a set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping the FAM and the start of MEMBER aligned.
Quoted 5 lines
The
static_assert()ensures this alignment remains, and it's intentionally placed inmediately after the related structure --no blank line in between.Signed-off-by Gustavo A. R. Silva <[email protected]>
Applied. I fixed a typo in the commit message ("inmediately" -> "immediately").
Wei
Quoted 26 lines
--- include/hyperv/hvgdk_mini.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)include/hyperv/hvgdk_mini.h +5
-2@@ -578,9 +578,12 @@ struct hv_tlb_flush { /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */struct hv_tlb_flush_ex {u64 address_space;u64 flags; -struct hv_vpset hv_vp_set; -u64 gva_list[]; + __TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed, + u64 gva_list[]; + ); } __packed; +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) == + offsetof(struct hv_tlb_flush_ex, gva_list));struct ms_hyperv_tsc_page {/* HV_REFERENCE_TSC_PAGE */ volatile u32 tsc_sequence;Signature · 1 line
2.43.0
Quoted 15 lines · Wei Liu
Quoted 14 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the new
__TRAILING_OVERLAP()helper to fix the following warning:
include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]This helper creates a union between a flexible-array member (FAM) and a set of MEMBERS that would otherwise follow it.
This overlays the trailing MEMBER u64 gva_list[]; onto the FAM struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping the FAM and the start of MEMBER aligned.
Quoted 8 lines
Quoted 5 lines
The
static_assert()ensures this alignment remains, and it's intentionally placed inmediately after the related structure --no blank line in between.Signed-off-by Gustavo A. R. Silva <[email protected]>Applied. I fixed a typo in the commit message ("inmediately" -> "immediately").
Awesome. :)
Thanks
-Gustavo