about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src
diff options
context:
space:
mode:
authorStuart Cook <Zalathar@users.noreply.github.com>2025-04-08 20:55:03 +1000
committerGitHub <noreply@github.com>2025-04-08 20:55:03 +1000
commit7ffa56c3a3b95080511216d84f945fe3c3c77bb5 (patch)
tree2c31b6cc0dbbaf647cc0557d450ebe48369564c6 /compiler/rustc_codegen_llvm/src
parent6257825c8fed1a5df762ca769abc876d40e70eef (diff)
parent502f7f9c241b35d65f4538d28c43e6feca474df2 (diff)
downloadrust-7ffa56c3a3b95080511216d84f945fe3c3c77bb5.tar.gz
rust-7ffa56c3a3b95080511216d84f945fe3c3c77bb5.zip
Rollup merge of #139098 - scottmcm:assert-impossible-tags, r=WaffleLapkin
Tell LLVM about impossible niche tags

I was trying to find a better way of emitting discriminant calculations, but sadly had no luck.

So here's a fairly small PR with the bits that did seem worth bothering:

1. As the [`TagEncoding::Niche` docs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_abi/enum.TagEncoding.html#variant.Niche) describe, it's possible to end up with a dead value in the input that's not already communicated via the range parameter attribute nor the range load metadata attribute.  So this adds an `llvm.assume` in non-debug mode to tell LLVM about that.  (That way it can tell that the sides of the `select` have disjoint possible values.)

2. I'd written a bunch more tests, or at least made them parameterized, in the process of trying things out, so this checks in those tests to hopefully help future people not trip on the same weird edge cases, like when the tag type is `i8` but yet there's still a variant index and discriminant of `258` which doesn't fit in that tag type because the enum is really weird.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions