Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: cros_ec: 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 `DEFINE_RAW_FLEX()` helper for an on-stack definition of
a flexible structure where the size of the flexible-array member
is known at compile-time, and refactor the rest of the code,
accordingly.

So, with these changes, fix the following warning:

drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c:39:40: 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@kernel.org>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
Link: https://patch.msgid.link/Z9lE6IVDeC5lnChN@kspp
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Gustavo A. R. Silva and committed by
Jonathan Cameron
0d0f3bfb c72ada99

+10 -16
+10 -16
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
··· 34 34 static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev, 35 35 u16 cmd_offset, u16 cmd, u32 *mask) 36 36 { 37 + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data, 38 + MAX(sizeof(struct ec_response_get_cmd_versions), 39 + sizeof(struct ec_params_get_cmd_versions))); 37 40 int ret; 38 - struct { 39 - struct cros_ec_command msg; 40 - union { 41 - struct ec_params_get_cmd_versions params; 42 - struct ec_response_get_cmd_versions resp; 43 - }; 44 - } __packed buf = { 45 - .msg = { 46 - .command = EC_CMD_GET_CMD_VERSIONS + cmd_offset, 47 - .insize = sizeof(struct ec_response_get_cmd_versions), 48 - .outsize = sizeof(struct ec_params_get_cmd_versions) 49 - }, 50 - .params = {.cmd = cmd} 51 - }; 52 41 53 - ret = cros_ec_cmd_xfer_status(ec_dev, &buf.msg); 42 + buf->command = EC_CMD_GET_CMD_VERSIONS + cmd_offset; 43 + buf->insize = sizeof(struct ec_response_get_cmd_versions); 44 + buf->outsize = sizeof(struct ec_params_get_cmd_versions); 45 + ((struct ec_params_get_cmd_versions *)buf->data)->cmd = cmd; 46 + 47 + ret = cros_ec_cmd_xfer_status(ec_dev, buf); 54 48 if (ret >= 0) 55 - *mask = buf.resp.version_mask; 49 + *mask = ((struct ec_response_get_cmd_versions *)buf->data)->version_mask; 56 50 return ret; 57 51 } 58 52