diff options
| author | Ben Lewis <benlewisj@gmail.com> | 2020-02-16 11:39:04 +1300 |
|---|---|---|
| committer | Ben Lewis <benlewisj@gmail.com> | 2020-02-16 11:39:04 +1300 |
| commit | 8904bddec5abea92c88e5c991925c08a3df5faf3 (patch) | |
| tree | 4f91e455ede263506eb3f606c61a2e0601e19502 /src | |
| parent | 774a029e9629a461355c9e9cb423820e9936dc65 (diff) | |
| download | rust-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.rs | 9 |
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)?; } |
