Re: [PATCH v5 09/14] iio: magnetometer: yas530: Introduce "chip_info" structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux