[clang] fix: constexpr bit_cast with empty base classes (PR #82383)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 22 09:12:26 PST 2024


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


More information about the cfe-commits mailing list