[cfe-dev] Flexible array members in ObjC classes

Volodymyr Sapsai via cfe-dev cfe-dev at lists.llvm.org
Mon Sep 25 15:42:54 PDT 2017


On Sep 22, 2017, at 01:06, David Chisnall <David.Chisnall at cl.cam.ac.uk> wrote:
> 
> On 22 Sep 2017, at 06:31, John McCall <rjmccall at apple.com> wrote:
>> 
>>> Thanks everybody for their input. I plan to update the patch with different test cases so it's easier to discuss. But so far my summary is the following.
>>> 
>>> For flexible array members we allow them only as the last ivar in @interface, with no ivars in @implementation. If it's not last, if it is in @implementation, if there are more ivars in @implementation - that's an error.
>>> 
>>> For variable sized types (i.e. structs with last member a flexible array) we don't error but warn if we can detect more ivars after it (in @interface or in @implementation). If @implementation ivars end with variable sized ivar, no error or warning.
>>> 
>>> For subclassing we don't error but warn if we can detect more ivars after a flexible array member or after a variable sized type member.
>> 
>> I think most of this sounds reasonable.  I would recommend being lax about whether the ivar is declared in the @interface vs. the @implementation, though.
> 
> If nothing else, I’d recommend a warning if the ivar is in the @implementation, because that means that we can’t guarantee getting a warning for subclasses, but apart from that this looks like a sensible design.  Thanks!
> 
> David

Added test cases to https://reviews.llvm.org/D38114 <https://reviews.llvm.org/D38114> Changes from my previous proposal:
* Allow flexible array members and variable sized types in @implementation but it should be the last field. And there is still a warning in this case.
* Error when variable sized type is not the last field (StructNotLastIVar, StructOtherIVarInImpl, StructNotLastIVarInImpl). Currently for C clang shows a warning that’s a GNU extension but by default GCC 7.2 rejects such code so I’m not sure it is worth supporting this extension for Objective-C.

Volodymyr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170925/57335bc6/attachment.html>


More information about the cfe-dev mailing list