about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_hir_typeck/src/intrinsicck.rs7
-rw-r--r--src/test/ui/consts/issue-104609.rs10
-rw-r--r--src/test/ui/consts/issue-104609.stderr9
3 files changed, 24 insertions, 2 deletions
diff --git a/compiler/rustc_hir_typeck/src/intrinsicck.rs b/compiler/rustc_hir_typeck/src/intrinsicck.rs
index 9812d96fcc3..c2dc1402465 100644
--- a/compiler/rustc_hir_typeck/src/intrinsicck.rs
+++ b/compiler/rustc_hir_typeck/src/intrinsicck.rs
@@ -3,7 +3,7 @@ use rustc_errors::struct_span_err;
 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 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         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;
diff --git a/src/test/ui/consts/issue-104609.rs b/src/test/ui/consts/issue-104609.rs
new file mode 100644
index 00000000000..01fd1c48cf8
--- /dev/null
+++ b/src/test/ui/consts/issue-104609.rs
@@ -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() {}
diff --git a/src/test/ui/consts/issue-104609.stderr b/src/test/ui/consts/issue-104609.stderr
new file mode 100644
index 00000000000..00360c44d61
--- /dev/null
+++ b/src/test/ui/consts/issue-104609.stderr
@@ -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`.