Re: [PATCH v4] sparse: add support for _Static_assert

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

 



> From: "Luc Van Oostenryck" <luc.vanoostenryck@xxxxxxxxx>
> To: "Lance Richardson" <lrichard@xxxxxxxxxx>
> Cc: "Linux-Sparse" <linux-sparse@xxxxxxxxxxxxxxx>
> Sent: Thursday, 4 May, 2017 10:58:35 AM
> Subject: Re: [PATCH v4] sparse: add support for _Static_assert
> 
> On Thu, May 04, 2017 at 09:53:50AM -0400, Lance Richardson wrote:
> > Thanks for the quick feedback, will incorporate in v5.
> 
> I also saw a small issue, possibly related to the problem with
> the mixup between 'declaration-list' and 'struct-declarator-list'
> that you noticed. In the following code, the static assert is not
> recognized:
> 	void foo(void)
> 	{
> 		int i = 0;
> 		for (_Static_assert(1, "ok"); 1; )
> 			;
> 		for (_Static_assert(0, "ko"); 1; )
> 			;
> 	}
> 
> It should because (since C99) the first part of the for-statement
> is just a 'declaration', which include the static assert.
> Not that it's very important, though.
> 
> Probably, it's best to leave it as is for the moment and just
> add a new test case, annotated with 'check-known-to-fail'.
> 
> -- Luc
> 

Hi Luc,

I'm not sure it should be accepted; the standard doc says:

    "The declaration part of a for statement shall only declare
     identifiers for objects having storage class auto or register."
 
But _Static_assert() doesn't declare an identifier.

gcc accepts this syntax, although clang does not.  I did find this discussion:

    https://reviews.llvm.org/D9113

Which points to a working group discussion that made it sound as
though _Static_assert() should not be accepted in for-loop declarations:

    www.open-std.org/JTC1/SC22/WG14/13677

As you say, probably best to leave this for now.

   Lance
--
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