[PATCH] D21453: Add support for attribute "overallocated"
Akira Hatanaka via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 9 18:20:34 PST 2016
ahatanak added inline comments.
================
Comment at: include/clang/AST/Decl.h:3250
+ /// This is true if this struct ends with an array marked 'flexible_array'.
+ bool HasFlexibleArrayAttr : 1;
+
----------------
ahatanak wrote:
> rsmith wrote:
> > How is this different from `HasFlexibleArrayMember`? Do we really need both?
> As I commented below, we don't need both if we are going to treat an array with flexible_array attribute like other existing flexible arrays.
I forgot to mention this, but one reason I didn't treat arrays with flexible_array attribute as C99 flexible arrays is that there are a couple of places in IRGen (TargetInfo.cpp) that call hasFlexibleArrayMember() to decide how to pass arguments to functions. For example, when I compile the following code with "-arch arm64", the first function receives a pointer while the second one receives a value:
```
typedef struct {
int a;
int b[5];
} S0;
typedef struct {
int a;
int b[];
} S1;
S0 g0;
S1 g1;
void foo0(S0 s0) {
g0 = s0;
}
void foo1(S1 s1) {
g1 = s1;
}
```
I agree with you that treating flexible_arrays as C99 flexible arrays will probably keep the code simple and clean, but I have to see if anyone is using structs with flexible arrays in way that will cause ABI breakage.
https://reviews.llvm.org/D21453
More information about the cfe-commits
mailing list