On Tue, Jan 26, 2016 at 04:50:07PM +0100, Nicolai Stange wrote: > Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> writes: > > > On Mon, Jan 25, 2016 at 03:52:14PM +0100, Nicolai Stange wrote: > >> + [0 < 0.] = 0, // KO > > > > It's not clear to me what the standrad says about this case. > > What about the constness of 'usual artihmetic conversions' ? > > Also GCC don't complain on this one. > > Within the square brackets, an integer constant expression is needed. > > That's 6.6(6). "Floating constants that are immediate operands of casts" > are allowed. Implicitly promoted types are not, at least to my > interpretation. Yes, I saw that the standard isn't explicit about it. The way I see things is: - I don't see any reason why an explicit conversion would preserve constness while an implicit one would not. - intuitively, when I read the code I see that the result of this expression is can be known at compile time. But well ... I have the same issue with [(int) (0 + 0.0)] which is clearly not allowed by the standard while [(int) 0.0] is. Maybe those should be relaxed latter and we can invoke 6.6(10): An implementation may accept other forms of constant expressions OTOH, who cares about floats ;) Reading a bit more about it ... For the designator in the array initializer (but also probably elsewhere) 6.7.8(6) first uses [ <i>constant-expression<\i> ] and then and the expression shall be an integer constant expression. Can this last 'integer constant expression' be interpreted as 'constant expression of integer type'? This could be considered to be coherent with the footnote 99) in 6.6(6) followed by 6.6(7). I don't know, it's something for language lawyers. 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