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. > > > 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 }; -- With Best Regards, Andy Shevchenko