Auto merge of #119274 - RalfJung:raw-ptr-pattern-ice, r=compiler-errors
fix ICE when using raw ptr in a pattern Fixes https://github.com/rust-lang/rust/issues/119270
This commit is contained in:
commit
471dcbdb09
@ -341,7 +341,7 @@ fn valtree_into_mplace<'tcx>(
|
||||
ty::FnDef(_, _) => {
|
||||
// Zero-sized type, nothing to do.
|
||||
}
|
||||
ty::Bool | ty::Int(_) | ty::Uint(_) | ty::Float(_) | ty::Char => {
|
||||
ty::Bool | ty::Int(_) | ty::Uint(_) | ty::Float(_) | ty::Char | ty::RawPtr(..) => {
|
||||
let scalar_int = valtree.unwrap_leaf();
|
||||
debug!("writing trivial valtree {:?} to place {:?}", scalar_int, place);
|
||||
ecx.write_immediate(Immediate::Scalar(scalar_int.into()), place).unwrap();
|
||||
|
@ -0,0 +1,19 @@
|
||||
// run-pass
|
||||
// Eventually this will be rejected (when the future-compat lints are turned into hard errors), and
|
||||
// then this test can be removed. But meanwhile we should ensure that this works and does not ICE.
|
||||
struct NoDerive(i32);
|
||||
|
||||
#[derive(PartialEq)]
|
||||
struct WrapEmbedded(*const NoDerive);
|
||||
|
||||
const WRAP_UNSAFE_EMBEDDED: &&WrapEmbedded = &&WrapEmbedded(std::ptr::null());
|
||||
|
||||
fn main() {
|
||||
let b = match WRAP_UNSAFE_EMBEDDED {
|
||||
WRAP_UNSAFE_EMBEDDED => true,
|
||||
//~^ WARN: must be annotated with `#[derive(PartialEq, Eq)]`
|
||||
//~| previously accepted
|
||||
_ => false,
|
||||
};
|
||||
assert!(b);
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
warning: to use a constant of type `WrapEmbedded` in a pattern, `WrapEmbedded` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||
--> $DIR/null-raw-ptr-issue-119270.rs:13:9
|
||||
|
|
||||
LL | WRAP_UNSAFE_EMBEDDED => true,
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411>
|
||||
= note: the traits must be derived, manual `impl`s are not sufficient
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
|
||||
= note: `#[warn(indirect_structural_match)]` on by default
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
Loading…
Reference in New Issue
Block a user