[PATCH] erofs-utils: fix "non-trivial designated initializers not supported"
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Jun 27 13:13:43 AEST 2024
This partially reverts commit 79f6e168d94c ("erofs-utils: improve
compatibility and reduce header conflicts") since some C++ compiler
will complain:
include/erofs_fs.h: In function 'void erofs_check_ondisk_layout_definitions()':
include/erofs_fs.h:460:2: sorry, unimplemented: non-trivial designated initializers not supported
Let's just bypass this compile-time check for the C++ language since
only external programs may be written by C++.
Fixes: 79f6e168d94c ("erofs-utils: improve compatibility and reduce header conflicts")
Cc: Hongzhen Luo <hongzhen at linux.alibaba.com>
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
include/erofs_fs.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/include/erofs_fs.h b/include/erofs_fs.h
index 0d603c4..fc21915 100644
--- a/include/erofs_fs.h
+++ b/include/erofs_fs.h
@@ -450,14 +450,14 @@ struct z_erofs_lcluster_index {
/* check the EROFS on-disk layout strictly at compile time */
static inline void erofs_check_ondisk_layout_definitions(void)
{
+#ifndef __cplusplus
const union {
struct z_erofs_map_header h;
__le64 v;
} fmh __maybe_unused = {
- .h = {
- .h_clusterbits = 1 <<Z_EROFS_FRAGMENT_INODE_BIT,
- },
+ .h.h_clusterbits = 1 << Z_EROFS_FRAGMENT_INODE_BIT,
};
+#endif
BUILD_BUG_ON(sizeof(struct erofs_super_block) != 128);
BUILD_BUG_ON(sizeof(struct erofs_inode_compact) != 32);
@@ -476,9 +476,11 @@ static inline void erofs_check_ondisk_layout_definitions(void)
BUILD_BUG_ON(BIT(Z_EROFS_LI_LCLUSTER_TYPE_BITS) <
Z_EROFS_LCLUSTER_TYPE_MAX - 1);
+#ifndef __cplusplus
/* exclude old compiler versions like gcc 7.5.0 */
BUILD_BUG_ON(__builtin_constant_p(fmh.v) ?
fmh.v != cpu_to_le64(1ULL << 63) : 0);
+#endif
}
#endif
--
2.39.3
More information about the Linux-erofs
mailing list