hazohelet wrote:

> @hazohelet Does this collide or intersect with the work wrt. (un)evaluated 
> contexts in https://reviews.llvm.org/D155064 ?

I wasn't aware of VLA cases in that patch.
My patch needs modification so that use of `is_constant_evaluated` and 
consteval-if NOT considered tautologically-true when they happen 
`InConditionallyConstantEvaluateContext`, which is a few lines of change.

@cor3ntin
Is it alright to set `InConditionallyConstantEvaluateContext` true only when 
the outer evaluation context `isAlwaysConstantEvaluatedContext()` so that we 
can say the array bound expr is always constant-evaluated if it happens in 
always-constant-evaluated context?
Something like this:
```diff
 ExprResult Parser::ParseArrayBoundExpression() {
+  bool IsAlwaysConstantEvaluated = Actions.isAlwaysConstantEvaluatedContext();
   EnterExpressionEvaluationContext ConstantEvaluated(
       Actions, Sema::ExpressionEvaluationContext::ConstantEvaluated);
   // If we parse the bound of a VLA... we parse a non-constant
   // constant-expression!
-  Actions.ExprEvalContexts.back().InConditionallyConstantEvaluateContext = 
true;
+  Actions.ExprEvalContexts.back().InConditionallyConstantEvaluateContext = 
!IsAlwaysConstantEvaluated;
   return ParseConstantExpressionInExprEvalContext(NotTypeCast);
 }
```

Also, does this change suggest that we let some diagnostic mechanisms consider 
VLA cases? (e.g. `DiagRuntimeBehavior` should not early-return if the context 
is `InConditionallyConstantEvaluateContext` to diagnose div-by-zero in 
https://godbolt.org/z/556rKnMTG)

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

Reply via email to