Rollup merge of #104657 - hi-rustin:rustin-patch-check-transmute, r=compiler-errors

Do not check transmute if has non region infer

close https://github.com/rust-lang/rust/issues/104609

See: https://github.com/rust-lang/rust/issues/104609#issuecomment-1320956351

r? `@compiler-errors`
This commit is contained in:
Matthias Krüger 2022-11-22 00:01:10 +01:00 committed by GitHub
commit 9cefd9dd29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 2 deletions

View File

@ -3,7 +3,7 @@
use rustc_hir as hir;
use rustc_index::vec::Idx;
use rustc_middle::ty::layout::{LayoutError, SizeSkeleton};
use rustc_middle::ty::{self, Ty, TyCtxt};
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitable};
use rustc_target::abi::{Pointer, VariantIdx};
use super::FnCtxt;
@ -46,7 +46,10 @@ pub fn check_transmute(&self, from: Ty<'tcx>, to: Ty<'tcx>, hir_id: HirId) {
let from = normalize(from);
let to = normalize(to);
trace!(?from, ?to);
if from.has_non_region_infer() || to.has_non_region_infer() {
tcx.sess.delay_span_bug(span, "argument to transmute has inference variables");
return;
}
// Transmutes that are only changing lifetimes are always ok.
if from == to {
return;

View File

@ -0,0 +1,10 @@
fn foo() {
oops;
//~^ ERROR: cannot find value `oops` in this scope
}
unsafe fn bar() {
std::mem::transmute::<_, *mut _>(1_u8);
}
fn main() {}

View File

@ -0,0 +1,9 @@
error[E0425]: cannot find value `oops` in this scope
--> $DIR/issue-104609.rs:2:5
|
LL | oops;
| ^^^^ not found in this scope
error: aborting due to previous error
For more information about this error, try `rustc --explain E0425`.