sethp wrote:

> I'm curious why the removed code was there in the first place.

I had the same thought; there was nothing that was no test trying to produce an 
empty struct from a bit-cast before this change, which made me think it was 
(overly) defensive coding that didn't get fully exercised.

In a broader sense, I think that's maybe where there's interesting leverage: 
the constant evaluators in clang (& gcc too) have some, uh, emergent behaviors. 
It's hard to say whether they're on purpose or not: the testing strategy seems 
to be largely demonstrative (i.e. "there exists a situation that ought to work 
out like so") and based on hand-crafted examples.

Property-based testing (AKA "fuzz" testing) might offer a win here, if the 
properties were reasonably coherent to write. It'd be (relatively) easy to 
write a thing that verified something like "all sub-expressions of a 
constant-producing expression are themselves constant-producing expressions", 
which would've caught this bug. What I don't know is whether that property 
makes sense in the context of C++, though.

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

Reply via email to