[clang] Enable AST mutation in the constant evaluator (PR #115168)

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 25 14:00:39 PST 2024


zygoloid wrote:

> > the special "the language rules say this is manifestly constant evaluated" cases that should be able to perform AST mutations, that we need to be extremely careful to invoke at exactly the right times and in exactly the right cases and to invoke only once
> 
> Can you expand on the "to invoke only once" bit? As I understand the position of authors of P2996, calls to `define_aggregate` with the same arguments are supposed to be idempotent. Do you see reasons why we wouldn't be able to achieve that, meaning that we need to prevent `define_aggregate` to be called multiple times (with the same arguments) on the language level?

I think it's short-sighted to imagine that will work for the breadth of compile-time constructs we'll end up providing. People have already asked for things like a consteval function that produces a warning or an error -- is that also going to be idempotent? What about consteval facilities that generate random numbers, or produce a log file on the build machine? What about a consteval utility that generates a new anonymous global? What do you do if you *want* each call to your "make a new type" facility to guarantee to produce a new, distinct type?

Maybe we can say no to some of those things, but I don't think we'll be able to say no to all of them forever. It seems more forward-looking to me to instead guarantee that we will evaluate exactly the things we're required to evaluate in this new mode, exactly once each.

https://github.com/llvm/llvm-project/pull/115168


More information about the cfe-commits mailing list