https://github.com/AaronBallman commented:

Thank you for this, I think the clang-tidy portions make a lot of sense. 
However, I do have concerns about the changes to Clang. I don't think we want 
constant expression evaluation to fail based on an input parameter. For one, 
it's a bit odd because the constant expression is valid. But also, I don't 
think it will scale well if we want to add additional constraints on the 
evaluation in the future.

I think a better approach would be a new interface which doesn't return the 
`APValue`/`APSInt` directly, but instead returns something more like:
```
struct EvalResult {
  APValue Value;
  unsigned UnsignedWraparoundOccurred : 1;
  unsigned VLAWasUsed : 1; // Just an example, not a real suggestion
  unsigned DidSomeOtherQuestionableThing : 1; // Also an example :-)
};
```
This way, we can track whatever interesting details we want regarding the 
computation of the resulting value in a more extensible way, and we don't need 
to fail the constant expression evaluation itself.

CC @tbaederr who may also have opinions on constant expression evaluations or 
alternative ideas to consider

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

Reply via email to