debuginfo: Generalize C++-like encoding for enums. by michaelwoerister · Pull Request #98393 · rust-lang/rust (original) (raw)
So, I'm somewhat conflicted about variant_fallback
for niche-layout enums. As @vadimcn's comment make clear, it's something that makes it harder to reason about the encoding. And at the same time, it limits the encoding to there only being a single variant that corresponds to a range of tag values.
The (only) reason it does exist is to make the (already very big) NatVis definition smaller. With variant_fallback
we have:
{variant0.NAME,en} {variant1.NAME,en} {variant2.NAME,en} {variant3.NAME,en} {variant4.NAME,en} {variant5.NAME,en} {variant6.NAME,en} {variant7.NAME,en} {variant8.NAME,en} {variant9.NAME,en} {variant10.NAME,en} {variant11.NAME,en} {variant12.NAME,en} {variant13.NAME,en} {variant14.NAME,en} {variant15.NAME,en}
{variant_fallback.NAME,en}
Without it, we have to check for every variant if it corresponds to a range, so we get:
{variant0.NAME,en} {variant1.NAME,en} {variant2.NAME,en} {variant3.NAME,en} {variant4.NAME,en} {variant5.NAME,en} {variant6.NAME,en} {variant7.NAME,en} {variant8.NAME,en} {variant9.NAME,en} {variant10.NAME,en} {variant11.NAME,en} {variant12.NAME,en} {variant13.NAME,en} {variant14.NAME,en} {variant15.NAME,en}
{variant0.NAME,en} {variant1.NAME,en} {variant2.NAME,en} {variant3.NAME,en} {variant4.NAME,en} {variant5.NAME,en} {variant6.NAME,en} {variant7.NAME,en} {variant8.NAME,en} {variant9.NAME,en} {variant10.NAME,en} {variant11.NAME,en} {variant12.NAME,en} {variant13.NAME,en} {variant14.NAME,en} {variant15.NAME,en}
And there are actually another three similar copies of these two blocks to account for 128-bit tags and field expansion. It's quite the monstrosity😅
But I'm not sure that that would actually be a problem. On the one hand, I'm worried about NatVis evaluation engines not being built for visualizers of this size. On the other hand, I haven't seen any actual evidence that either Visual Studio or WinDbg have trouble interpreting these.
So I'm not sure. Shall we make the encoding more regular and consistent by removing variant_fallback
? I'm starting to be in favor of that.