On 18.02.2016 05:37, Keller, Jacob E wrote:
> Hi,
> 
>> -----Original Message-----
>> From: [email protected] [mailto:linux-kernel-
>> [email protected]] On Behalf Of Krzysztof Kozlowski
>> Sent: Wednesday, February 17, 2016 12:11 AM
>> To: Sangbeom Kim <[email protected]>; Krzysztof Kozlowski
>> <[email protected]>; Liam Girdwood <[email protected]>;
>> Mark Brown <[email protected]>; [email protected]; linux-
>> [email protected]
>> Cc: Arnd Bergmann <[email protected]>
>> Subject: [RFT] regulator: s2mps11: Simplify expression used in
>> BUILD_BUG_ON for some of preprocessors
>>
>> Apparently some preprocessors have problems with interpreting
>> BUILD_BUG_ON such as:
>>      var = ARRAY_SIZE(s2mps15_regulators);
>>      BUILD_BUG_ON(S2MPS_REGULATOR_MAX < var);
>> so let make it more obvious for them.
>>
> 
> Doesn't have much to do with the preprocessor, but rather exactly how the 
> compiler optimizes the variable. Some kernel configurations also impact this, 
> and it heavily depends on whether the compiler actually optimizes away the 
> variable. BUILD_BUG_ON may work a lot of the time, depending heavily on the 
> compiler.
> 
> BUILD_BUG_ON only works for constant expressions, so it is safer to put the 
> value in directly, because using a variable will only work if the compiler 
> optimizes the use of a variable away entirely. In this case it is somewhat 
> surprising that it doesn't, but would depend on what compiler version and 
> what kernel build rules you were using. For example allmodconfig ends up 
> selecting everything yes if it's not a module for kernel build options and 
> results in some BUILD_BUG_ON failures because of that)

Right, thanks for detailed explanation. Arnd confirmed that patch fixes
encountered issue (gcc 4.9 with UBSAN).

I'll change the commit message and re-submit.

Best regards,
Krzysztof

Reply via email to