ayzhao added a comment.

Status update:

While investigating @cor3ntin's comment about refactoring `VisitInitListExpr` 
and `VisitCXXParenListInitExpr` as they share common code, I discovered that 
flexible array members would cause this patch to explode. Specifically, the 
following code:

  struct S {
      int b;
      int a[];
  };
  
  S s2(1, {1, 2});

was causing this assertion 
<https://github.com/llvm/llvm-project/blob/3f18f7c0072b642f5fe88d2fb7bb8ccf69a6c6f5/clang/lib/CodeGen/CGExprAgg.cpp#L480>
 to fail.

I took a look at GCC, and it turns out that GCC doesn't allow flexible array 
members at all in paren list initialization of aggregates, even in contexts 
where the corresponding designated initializer expression succeeds: 
https://godbolt.org/z/E73433erb

For now, I updated this implementation to follow GCC's behavior and disallow 
flexible array members, as IIRC in C++ they are a GCC extension and we should 
therefore follow GCC behavior. However, I am open to other thoughts.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129531/new/

https://reviews.llvm.org/D129531

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to