about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-01-25 16:59:25 +0100
committerGitHub <noreply@github.com>2019-01-25 16:59:25 +0100
commitef5a5bab7ac333746c693c76ecc4a76cd705739b (patch)
treeeef3c48259b2de7db6671885e49480db6691d8a4
parent7187db619c134697647f96e82111cbcbae337d4f (diff)
parentb80332ed4c142496096ff2bf9aa378cc6b3bf806 (diff)
downloadrust-ef5a5bab7ac333746c693c76ecc4a76cd705739b.tar.gz
rust-ef5a5bab7ac333746c693c76ecc4a76cd705739b.zip
Rollup merge of #56233 - kenta7777:kenta7777#49937, r=oli-obk
Miri and miri-related code contains repetitions of `(n << amt) >> amt`

I reduced some code repetitions contains `(n << amt) >> amt`.
This pull request is related to #49937.
-rw-r--r--src/librustc_lint/types.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs
index 642681a73a8..9d3275ffde2 100644
--- a/src/librustc_lint/types.rs
+++ b/src/librustc_lint/types.rs
@@ -21,6 +21,8 @@ use syntax::source_map;
 
 use rustc::hir;
 
+use rustc::mir::interpret::{sign_extend, truncate};
+
 declare_lint! {
     UNUSED_COMPARISONS,
     Warn,
@@ -368,14 +370,14 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TypeLimits {
             let (t, actually) = match ty {
                 ty::Int(t) => {
                     let ity = attr::IntType::SignedInt(t);
-                    let bits = layout::Integer::from_attr(&cx.tcx, ity).size().bits();
-                    let actually = (val << (128 - bits)) as i128 >> (128 - bits);
+                    let size = layout::Integer::from_attr(&cx.tcx, ity).size();
+                    let actually = sign_extend(val, size) as i128;
                     (format!("{:?}", t), actually.to_string())
                 }
                 ty::Uint(t) => {
                     let ity = attr::IntType::UnsignedInt(t);
-                    let bits = layout::Integer::from_attr(&cx.tcx, ity).size().bits();
-                    let actually = (val << (128 - bits)) >> (128 - bits);
+                    let size = layout::Integer::from_attr(&cx.tcx, ity).size();
+                    let actually = truncate(val, size);
                     (format!("{:?}", t), actually.to_string())
                 }
                 _ => bug!(),