[PATCH] D132952: [Sema] disable -Wvla for function array parameters
Eli Friedman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 30 12:42:41 PDT 2022
efriedma added a comment.
In D132952#3759226 <https://reviews.llvm.org/D132952#3759226>, @aaron.ballman wrote:
>> We could theoretically mess with the AST representation somehow, but I don't see any compelling reason to. We probably just want to emit the warn_vla_used diagnostic somewhere else.
>
> Yeah, re-reading the C standard, I think I got VM types slightly wrong. Consider:
>
> void func(int n, int array[n]);
>
> `array` is a VLA (C2x 6.7.6.2p4) before pointer adjustment (C2x 6.7.6.3p6), which makes `func` a VM type (C2x 6.7.6p3), not `array`.
The type of parameter array after promotion (which is the type that matters for almost any purpose), is `int*`. That isn't variably modified. And the function type is just `void(int,int*)`; there's no way we can possibly treat that as variably modified.
If you wrote, say `void func(int n, int array[n][n])`, then array is variably modified. "func" is still not variably modified, I think? "array" is not part of the "nested sequence of declarators", despite the fact that the parameter list contains a variably modified type. At least, that's clang's current interpretation of the rules.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132952/new/
https://reviews.llvm.org/D132952
More information about the cfe-commits
mailing list