================
@@ -849,13 +849,11 @@ namespace CompoundLiterals {
   }
   static_assert(get5() == 5, "");
 
-  constexpr int get6(int f = (int[]){1,2,6}[2]) { // ref-note {{subexpression 
not valid in a constant expression}} \
-                                                  // ref-note {{declared here}}
+  constexpr int get6(int f = (int[]){1,2,6}[2]) {
----------------
AaronBallman wrote:

> With the VLA example, there are a few different weird interactions here... 
> but the primary silly thing I'm doing is abusing VLAs to modify argument 
> values.

Yeah, which we already seem to get wrong: https://godbolt.org/z/Y4xEGWhM3

> On top of that, we have to consider the question of the lifetime of compound 
> literals defined inside the array bound.

I think that's what `object backing the pointer x will be destroyed at the end 
of the full-expression` is about in your previous VLA example. There is an 
`ExprWithCleanups` node for the assignment operator and that is a `FullExpr`. 
So I think we do get that correct -- I'll add it as a test case with comments 
explaining why it's rejected.

> But maybe we should just reject this sort of thing in C++ more aggressively, 
> like gcc does, so we don't have to figure out all these weird cases.

I tend to agree we should be far more restrictive with VLAs in C++ than we are 
today. But I also think that's a different PR than this one. WDYT?

https://github.com/llvm/llvm-project/pull/132097
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to