aaron.ballman added a comment. In D132952#3759731 <https://reviews.llvm.org/D132952#3759731>, @efriedma wrote:
> As a practical matter, there isn't any reason to force variably modified > parameters to make a function variably modified. The types of parameters > aren't visible in the caller of a function; we only check the compatibility > for calls. There are constraints in C based on whether something is or isn't a variably modified type, so I think there is a reason to make sure we're correct here. For example: // All at file scope int n = 100; void func(int array[n++]); typedef typeof(func) other_func; C2x 6.7.8p2: "If a typedef name specifies a variably modified type then it shall have block scope." Even more interesting is C2x 6.7.2.5p4 (typeof, which is new in C2x): "If the type of the operand is a variably modified type, the operand is evaluated; otherwise the operand is not evaluated." > Trying to treat `void (*)(int, int *)` as variably modified would have > additional complications, in that clang would internally need to have two > canonical types for `void (*)(int, int *)`: one variably modified, one not > variably modified. > > So if there's a disagreement between clang and the standard, I'd rather just > try to fix the standard. I'll ask on the WG14 reflectors to see if I'm interpreting the variably modified type specification wrong or not. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132952/new/ https://reviews.llvm.org/D132952 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits