Re: sparse error on __int128

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

 



On Tue, Aug 11, 2015 at 07:32:31AM -0400, Tony Camuso wrote:
> I think I've raised this question before, but I don't think I
> got a response that indicated whether this is a sparse bug or
> if there was a source or compile issue.
> 
> Here is the error:
> sparse /work/rh7/drivers/net/wireless/rtlwifi/rtl8723com/fw_common.i
> /work/rh7/drivers/net/wireless/rtlwifi/rtl8723com/fw_common.i:5505:26: error: impossible combination of type specifiers: unsigned __int128
> /work/rh7/drivers/net/wireless/rtlwifi/rtl8723com/fw_common.i:5505:26: error: Expected ) at end of cast operator
> /work/rh7/drivers/net/wireless/rtlwifi/rtl8723com/fw_common.i:5505:26: error: got __int128
> 
> Here is the offending line in context:
> 
>  5503 static inline __attribute__((no_instrument_function)) u64 mul_u64_u32_shr(u64 a, u32 mul, unsigned int shift)
>  5504 {
>  5505  return (u64)(((unsigned __int128)a * mul) >> shift);
>  5506 }
> 


Hi,

There is no source or compile issue here.
It's just that __int128 is only defined by gcc on x86_64
but is not defined by sparse.

Now, __int128 is only used twice in the kernel:
(mul_u64_u32_shr() & mul_u64_u64_shr()) and then only if
supported by the platform and if __SIZEOF_INT128__ is defined.
Since sparse doesn't define __SIZEOF_INT128__ there shouldn't be any problems
but you have used sparse not on the code itself but on preprocessed code by gcc.
If you run sparse directly on the C code or more simply by using "make C=1 ..."
to build kernel code, no such problem occurs.

Now, of course, one could argue that sparse should also define __int128
on platforms where gcc define it, on x86_64 thus.


Regards,
Luc
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux