diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-03-13 09:44:44 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-13 09:44:44 +0900 |
| commit | 04e24ae67e48025469601a32c3adf8c7c93ee742 (patch) | |
| tree | bb89ce62aed1af993a07144c200ae4df1184e38c | |
| parent | 7f319c74783b9e0684f1a2e29b977e0518257277 (diff) | |
| parent | d180f918240d2f8bd3d6f7292b63194f45901759 (diff) | |
| download | rust-04e24ae67e48025469601a32c3adf8c7c93ee742.tar.gz rust-04e24ae67e48025469601a32c3adf8c7c93ee742.zip | |
Rollup merge of #83020 - hi-rustin:rustin-patch-enum, r=lcnr
Emit the enum range assumption if the range only contains one element close https://github.com/rust-lang/rust/issues/82871
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/rvalue.rs | 2 | ||||
| -rw-r--r-- | src/test/codegen/enum-bounds-check-issue-82871.rs | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/rvalue.rs b/compiler/rustc_codegen_ssa/src/mir/rvalue.rs index 1795710ff53..629cb64d43e 100644 --- a/compiler/rustc_codegen_ssa/src/mir/rvalue.rs +++ b/compiler/rustc_codegen_ssa/src/mir/rvalue.rs @@ -325,7 +325,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> { let er = scalar.valid_range_exclusive(bx.cx()); if er.end != er.start - && scalar.valid_range.end() > scalar.valid_range.start() + && scalar.valid_range.end() >= scalar.valid_range.start() { // We want `table[e as usize ± k]` to not // have bound checks, and this is the most diff --git a/src/test/codegen/enum-bounds-check-issue-82871.rs b/src/test/codegen/enum-bounds-check-issue-82871.rs new file mode 100644 index 00000000000..e779e2ef274 --- /dev/null +++ b/src/test/codegen/enum-bounds-check-issue-82871.rs @@ -0,0 +1,16 @@ +// compile-flags: -O +// min-llvm-version: 11.0 + +#![crate_type = "lib"] + +#[repr(C)] +pub enum E { + A, +} + +// CHECK-LABEL: @index +#[no_mangle] +pub fn index(x: &[u32; 3], ind: E) -> u32{ + // CHECK-NOT: panic_bounds_check + x[ind as usize] +} |
