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