mizvekov 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. > > 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. I have been thinking about this problem for different reasons. I wonder if the right solution here is to just change AdjustedType so that it desugars to the OriginalType instead of the AdjustedType, but keep the latter as the canonical type. And not bother storing a separate QualType fot the AdjustedType. That way, after a decay, the as-written type could be VM, but not the canonical type. Similarly with `AttributedType` vis EquivalentType and ModifiedType. We would lose though the nice property that a single step desugar always produces the same type. I wonder how radical a change this would be for the users. 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