Rollup merge of #122173 - compiler-errors:ptr-equality-in-ctfe, r=lcnr
Don't ICE in CTFE if raw/fn-ptr types differ Fixes #121688 r? lcnr
This commit is contained in:
commit
3d71bada5a
@ -581,7 +581,6 @@ fn visit_rvalue(&mut self, rvalue: &Rvalue<'tcx>, location: Location) {
|
|||||||
if is_int_bool_or_char(lhs_ty) && is_int_bool_or_char(rhs_ty) {
|
if is_int_bool_or_char(lhs_ty) && is_int_bool_or_char(rhs_ty) {
|
||||||
// Int, bool, and char operations are fine.
|
// Int, bool, and char operations are fine.
|
||||||
} else if lhs_ty.is_fn_ptr() || lhs_ty.is_unsafe_ptr() {
|
} else if lhs_ty.is_fn_ptr() || lhs_ty.is_unsafe_ptr() {
|
||||||
assert_eq!(lhs_ty, rhs_ty);
|
|
||||||
assert!(matches!(
|
assert!(matches!(
|
||||||
op,
|
op,
|
||||||
BinOp::Eq
|
BinOp::Eq
|
||||||
|
6
tests/ui/consts/different-fn-ptr-binders-during-ctfe.rs
Normal file
6
tests/ui/consts/different-fn-ptr-binders-during-ctfe.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
const fn cmp(x: fn(&'static ()), y: for<'a> fn(&'a ())) -> bool {
|
||||||
|
x == y
|
||||||
|
//~^ ERROR pointers cannot be reliably compared during const eval
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
10
tests/ui/consts/different-fn-ptr-binders-during-ctfe.stderr
Normal file
10
tests/ui/consts/different-fn-ptr-binders-during-ctfe.stderr
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
error: pointers cannot be reliably compared during const eval
|
||||||
|
--> $DIR/different-fn-ptr-binders-during-ctfe.rs:2:5
|
||||||
|
|
|
||||||
|
LL | x == y
|
||||||
|
| ^^^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user