Re: sparse handles int64_t type wrong

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

 



On Tue, 12 Dec 2006 at 12:02 -0800, Linus Torvalds wrote:
> On Tue, 12 Dec 2006, Linus Torvalds wrote:
> > 
> > Did you use "-m64" if you are doing this on an architecture with 64-bit 
> > /usr/include?
> 
> Never mind, that's not it.
> 
> The problem is that the standard headers use _this_ for "int64_t":
> 
> 	typedef int int64_t __attribute__ ((__mode__ (__DI__)));
> 
> and sparse just says "ok, int64_t is an 'int'"
> 
> The "__attribute__((__mode__()))" thing has always been a quick hack - 
> sparse actually tries to parse it, but not very well.
> 
> If you use 
> 
> 	typedef long long s64;
> 
> sparse gets it right.
> 
> In fact, sparse even gets it right if you do
> 
> 	typedef int __attribute__((__mode__(__DI__))) int64_t;
> 
> because then the attribute gets attached to the underlying type, before it 
> gets bound to the typedef.

Great! This works for me. So I will probably use
	#ifdef __CHECKER__
	typedef int __attribute__((__mode__(__DI__))) int64_t;
	#endif
until it will be fixed in sparse.

> I'll take a look if I can fix typedef to accept the crapola __attibute__ 
> syntax.
> 
> Putting the attributes at the end really _does_ suck. It's as if you were 
> to write
> 
> 	typedef void * const_ptr_t const;
> 
> and that obviously isn't supposed to work. Why gcc thinks attributes can 
> go at the end will never be clear to me.
> 
> Gcc attributes suck. Some gcc extensions really were thought out really 
> really badly.

Thanks for quick reply and explanations!

-- 
Best regards,
        Yura

-
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