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

Reply via email to