Hi Andy, On 08.08.22 20:04, Andy Shevchenko wrote: > On Mon, Aug 8, 2022 at 5:59 PM Nathan Chancellor <nathan@xxxxxxxxxx> wrote: >> On Mon, Aug 08, 2022 at 01:18:06PM, +0200, Andy Shevchenko wrote: >>> On Mon, Aug 8, 2022 at 7:40 AM kernel test robot <lkp@xxxxxxxxx> wrote: >>> >>> ... >>> >>>> All errors (new ones prefixed by >>): >>>> >>>>>> drivers/iio/magnetometer/yamaha-yas530.c:933:19: error: initializer element is not a compile-time constant >>>> .product_name = yas5xx_product_name[yas530], >>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> 1 error generated. >>> >>> What?! >>> >>> The yas530 is a part of the enum, how come that compiler can't see >>> this? Looks like a Clang bug. >> >> That is not what clang is complaining about here, you'll see the same >> error even if you used '0', '1', or '2' here: >> >> drivers/iio/magnetometer/yamaha-yas530.c:933:19: error: initializer element is not a compile-time constant >> .product_name = yas5xx_product_name[0], >> ^~~~~~~~~~~~~~~~~~~~~~ >> 1 error generated. >> >> It is complaining that the initializer element >> ('yas5xx_product_name[yas530]', rather than just 'yas530') is not >> constant, which is a true complaint if I am reading C11 standard 6.6.7 >> correctly. >> >> GCC 8+ has chosen to accept const structures as constant expressions in >> designated initializers, which it is allowed to do per 6.6.10. Nick did >> have a patch to try and match this behavior in clang but the work that >> was requested doesn't seem to be trivial so it was never finalized: >> https://reviews.llvm.org/D76096 >> >> You'll see the same error with GCC 7: >> >> drivers/iio/magnetometer/yamaha-yas530.c:933:19: error: initializer element is not constant >> .product_name = yas5xx_product_name[yas530], >> ^~~~~~~~~~~~~~~~~~~ >> drivers/iio/magnetometer/yamaha-yas530.c:933:19: note: (near initialization for ‘yas5xx_chip_info_tbl[0].product_name’) >> drivers/iio/magnetometer/yamaha-yas530.c:938:19: error: initializer element is not constant >> .product_name = yas5xx_product_name[yas532], >> ^~~~~~~~~~~~~~~~~~~ >> drivers/iio/magnetometer/yamaha-yas530.c:938:19: note: (near initialization for ‘yas5xx_chip_info_tbl[1].product_name’) >> drivers/iio/magnetometer/yamaha-yas530.c:943:19: error: initializer element is not constant >> .product_name = yas5xx_product_name[yas533], >> ^~~~~~~~~~~~~~~~~~~ >> drivers/iio/magnetometer/yamaha-yas530.c:943:19: note: (near initialization for ‘yas5xx_chip_info_tbl[2].product_name’) > >>>> 930 static const struct yas5xx_chip_info yas5xx_chip_info_tbl[] = { >>>> 931 [yas530] = { >>>> 932 .devid = YAS530_DEVICE_ID, >>>> > 933 .product_name = yas5xx_product_name[yas530], >>>> 934 .version_name = yas5xx_version_names[yas530], > > Would then > > .product_name = "YAS530 MS-3E", > .version_names = { "A", "B" }, > > work? > > Jakob, note 's' in the field name as well. Thanks for clarifying. I'll change it that way. >>>> 935 }, >>>> 936 [yas532] = { >>>> 937 .devid = YAS532_DEVICE_ID, >>>> 938 .product_name = yas5xx_product_name[yas532], >>>> 939 .version_name = yas5xx_version_names[yas532], >>>> 940 }, >>>> 941 [yas533] = { >>>> 942 .devid = YAS532_DEVICE_ID, >>>> 943 .product_name = yas5xx_product_name[yas533], >>>> 944 .version_name = yas5xx_version_names[yas533], >>>> 945 }, >>>> 946 }; > Kind regards, Jakob