Rollup merge of #140284 - bend-n:fix-expectation-unmet, r=jieyouxu

remove expect() in `unnecessary_transmutes`

removes expect() from #136083 and fixes #140277
includes regression test

r? lcnr
This commit is contained in:
Matthias Krüger 2025-04-25 17:31:49 +02:00 committed by GitHub
commit 432393972c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 22 additions and 5 deletions

View file

@ -87,11 +87,8 @@ impl<'tcx> Visitor<'tcx> for UnnecessaryTransmuteChecker<'_, 'tcx> {
&& let Some((func_def_id, _)) = func.const_fn_def()
&& self.tcx.is_intrinsic(func_def_id, sym::transmute)
&& let span = self.body.source_info(location).span
&& let Some(lint) = self.is_unnecessary_transmute(
func,
self.tcx.sess.source_map().span_to_snippet(arg).expect("ok"),
span,
)
&& let Ok(snippet) = self.tcx.sess.source_map().span_to_snippet(arg)
&& let Some(lint) = self.is_unnecessary_transmute(func, snippet, span)
&& let Some(hir_id) = terminator.source_info.scope.lint_root(&self.body.source_scopes)
{
self.tcx.emit_node_span_lint(UNNECESSARY_TRANSMUTES, hir_id, span, lint);

View file

@ -0,0 +1,10 @@
//@ compile-flags: --remap-path-prefix=/=/non-existent
// helper for ../unnecessary-transmute-path-remap-ice-140277.rs
#[macro_export]
macro_rules! transmute {
($e:expr) => {{
let e = $e;
std::mem::transmute(e)
}};
}

View file

@ -0,0 +1,10 @@
//@ aux-crate: zerocopy=unnecessary-transmute-path-remap-ice-140277-trans.rs
//@ check-pass
// tests for a regression in linting for unnecessary transmutes
// where a span was inacessible for snippet procuring,
// when remap-path-prefix was set, causing a panic.
fn bytes_at_home(x: [u8; 4]) -> u32 {
unsafe { zerocopy::transmute!(x) }
}
fn main() {}