tavianator wrote:

> I mean it would be useful to round up to the alignment for when you wanne 
> have an array of the structs, but I'm not sure this is actually required by 
> the standard. Do you have more justification for the alignment requirement on 
> structs containing FAMs?

Here's an example:

```c
struct S {
    int foo;
    char fam[];
};
struct S *s = malloc(9);
s->fam[4];
```

[Your C standard 
quote](https://github.com/llvm/llvm-project/pull/111015#issuecomment-2392534292)
 says

> when a . (or ->) operator has a left operand that is (a pointer to) a 
> structure with a flexible array member and the right operand names that 
> member, it behaves as if that member were replaced with the longest array 
> (with the same element type) that would not make the structure larger than 
> the object being accessed

which I interpret as the largest N such that `sizeof(struct S) <= 9` in

```
struct S {
    int foo;
    char fam[N];
};
```

Well, for N = 4 we have `sizeof(struct S) == 8` and for N = 5 we have 
`sizeof(struct S) == 12` (due to alignment padding), therefore N = 4.  That 
makes `s->fam[4]` out-of-bounds.  Am I wrong?

https://github.com/llvm/llvm-project/pull/112636
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to