about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBen Lewis <benlewisj@gmail.com>2020-02-16 11:39:04 +1300
committerBen Lewis <benlewisj@gmail.com>2020-02-16 11:39:04 +1300
commit8904bddec5abea92c88e5c991925c08a3df5faf3 (patch)
tree4f91e455ede263506eb3f606c61a2e0601e19502 /src
parent774a029e9629a461355c9e9cb423820e9936dc65 (diff)
downloadrust-8904bddec5abea92c88e5c991925c08a3df5faf3.tar.gz
rust-8904bddec5abea92c88e5c991925c08a3df5faf3.zip
Determine type of intrinsics instead of assuming the destination type is the same.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/interpret/intrinsics.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/librustc_mir/interpret/intrinsics.rs b/src/librustc_mir/interpret/intrinsics.rs
index 42d4996c253..04f0f92d67f 100644
--- a/src/librustc_mir/interpret/intrinsics.rs
+++ b/src/librustc_mir/interpret/intrinsics.rs
@@ -110,7 +110,14 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
             | sym::type_id
             | sym::type_name => {
                 let gid = GlobalId { instance, promoted: None };
-                let val = self.const_eval(gid, dest.layout.ty)?;
+                let ty = match intrinsic_name {
+                    sym::min_align_of | sym::pref_align_of | sym::size_of => self.tcx.types.usize,
+                    sym::needs_drop => self.tcx.types.bool,
+                    sym::type_id => self.tcx.types.u64,
+                    sym::type_name => self.tcx.mk_static_str(),
+                    _ => span_bug!(span, "Already checked for nullary intrinsics"),
+                };
+                let val = self.const_eval(gid, ty)?;
                 self.copy_op(val, dest)?;
             }