[RFC] [PATCH] Add __array_size keyword
Stuart Brady
sdb-gcc@zubnet.me.uk
Tue Feb 23 17:21:00 GMT 2016
On Wed, Feb 17, 2016 at 12:29:34AM +0000, Stuart Brady wrote:
> > - should __array_size (b) be an integer constant (size_t)2, or should it
> > be non-constant (size_t)2 because the argument is a VLA (albeit a VLA
> > whose top-level dimension is an integer constant expression)?
>
> Ouch. I would say it should be an integer constant (size_t)2, simply as
> that seems to me to be a reasonable expectation. Unfortunately, this is
> not what happens with my patch, as I get a -Wint-conversion warning. :-(
[snip]
Okay. So, unsurprisingly, it turns out the problem here was in my code.
When I added c_expr_array_size_expr() and c_expr_array_size_type() it
seems I had not understood that C_TYPE_VARIABLE_SIZE and therefore also
c_vla_type_p are non-zero (true) for VLAs where the outermost subscript
is not variable, behaviour I can now clearly see in grokdeclarator().
This certainly supports the notion that test cases and documentation are
of greater importance than the patch itself, at this stage.
I now seem to have an __array_size keyword that behaves as I would expect
in this case, too. I'll resubmit the patch once I have gone through the
final draft of C11.
It is still not entirely clear to me whether I must do something to
prevent constant folding for use of __array_size with VLAs, but I am not
so highly concerned just at the moment.
--
Many thanks,
Stuart Brady
More information about the Gcc-patches
mailing list