diff options
Diffstat (limited to 'tests/codegen/issues/issue-122600-ptr-discriminant-update.rs')
| -rw-r--r-- | tests/codegen/issues/issue-122600-ptr-discriminant-update.rs | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/tests/codegen/issues/issue-122600-ptr-discriminant-update.rs b/tests/codegen/issues/issue-122600-ptr-discriminant-update.rs deleted file mode 100644 index 853a1ff36b1..00000000000 --- a/tests/codegen/issues/issue-122600-ptr-discriminant-update.rs +++ /dev/null @@ -1,43 +0,0 @@ -//@ compile-flags: -Copt-level=3 - -#![crate_type = "lib"] - -// The bug here was that it was loading and storing the whole value. -// It's ok for it to load the discriminant, -// to preserve the UB from `unreachable_unchecked`, -// but it better only store the constant discriminant of `B`. - -pub enum State { - A([u8; 753]), - B([u8; 753]), -} - -// CHECK-LABEL: @update -#[no_mangle] -pub unsafe fn update(s: *mut State) { - // CHECK-NOT: alloca - - // CHECK-NOT: load - // CHECK-NOT: store - // CHECK-NOT: memcpy - // CHECK-NOT: 75{{3|4}} - - // CHECK: %[[TAG:.+]] = load i8, ptr %s, align 1 - // CHECK-NEXT: trunc nuw i8 %[[TAG]] to i1 - - // CHECK-NOT: load - // CHECK-NOT: store - // CHECK-NOT: memcpy - // CHECK-NOT: 75{{3|4}} - - // CHECK: store i8 1, ptr %s, align 1 - - // CHECK-NOT: load - // CHECK-NOT: store - // CHECK-NOT: memcpy - // CHECK-NOT: 75{{3|4}} - - // CHECK: ret - let State::A(v) = s.read() else { std::hint::unreachable_unchecked() }; - s.write(State::B(v)); -} |
