about summary refs log tree commit diff
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2018-05-26 00:54:52 +0100
committervarkor <github@varkor.com>2018-08-16 20:09:05 +0100
commit6c21a0322c55c2da7f2b1479cb631b8596901f1c (patch)
treea2628e83c141a40e7694778ec2dae900623a1120
parent732d63848302156d475beb7159e73c14c0570e3a (diff)
downloadrust-6c21a0322c55c2da7f2b1479cb631b8596901f1c.tar.gz
rust-6c21a0322c55c2da7f2b1479cb631b8596901f1c.zip
Refactor after miri api changes
-rw-r--r--src/librustc/mir/mod.rs1
-rw-r--r--src/librustc_mir/hair/pattern/_match.rs27
2 files changed, 16 insertions, 12 deletions
diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs
index 2013766aa39..8b5b41fc777 100644
--- a/src/librustc/mir/mod.rs
+++ b/src/librustc/mir/mod.rs
@@ -35,7 +35,6 @@ use std::slice;
 use std::vec::IntoIter;
 use std::{iter, mem, option, u32};
 use syntax::ast::{self, Name};
-use syntax::attr::SignedInt;
 use syntax::symbol::InternedString;
 use syntax_pos::{Span, DUMMY_SP};
 use ty::fold::{TypeFoldable, TypeFolder, TypeVisitor};
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs
index 0d56f345d8e..9cd59a42402 100644
--- a/src/librustc_mir/hair/pattern/_match.rs
+++ b/src/librustc_mir/hair/pattern/_match.rs
@@ -461,10 +461,11 @@ fn all_constructors<'a, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
                 .collect()
         }
         ty::TyChar if exhaustive_integer_patterns => {
+            value_constructors = true;
             let endpoint = |c: char| {
-                ty::Const::from_bits(cx.tcx, c as u128, cx.tcx.types.char)
+                let ty = ty::ParamEnv::empty().and(cx.tcx.types.char);
+                ty::Const::from_bits(cx.tcx, c as u128, ty)
             };
-            value_constructors = true;
             vec![
                 // The valid Unicode Scalar Value ranges.
                 ConstantRange(endpoint('\u{0000}'), endpoint('\u{D7FF}'), RangeEnd::Included),
@@ -472,22 +473,24 @@ fn all_constructors<'a, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
             ]
         }
         ty::TyInt(ity) if exhaustive_integer_patterns => {
+            value_constructors = true;
             // FIXME(49937): refactor these bit manipulations into interpret.
             let bits = Integer::from_attr(cx.tcx, SignedInt(ity)).size().bits() as u128;
             let min = 1u128 << (bits - 1);
             let max = (1u128 << (bits - 1)) - 1;
-            value_constructors = true;
-            vec![ConstantRange(ty::Const::from_bits(cx.tcx, min as u128, pcx.ty),
-                               ty::Const::from_bits(cx.tcx, max as u128, pcx.ty),
+            let ty = ty::ParamEnv::empty().and(pcx.ty);
+            vec![ConstantRange(ty::Const::from_bits(cx.tcx, min as u128, ty),
+                               ty::Const::from_bits(cx.tcx, max as u128, ty),
                                RangeEnd::Included)]
         }
         ty::TyUint(uty) if exhaustive_integer_patterns => {
+            value_constructors = true;
             // FIXME(49937): refactor these bit manipulations into interpret.
             let bits = Integer::from_attr(cx.tcx, UnsignedInt(uty)).size().bits() as u128;
             let max = !0u128 >> (128 - bits);
-            value_constructors = true;
-            vec![ConstantRange(ty::Const::from_bits(cx.tcx, 0, pcx.ty),
-                               ty::Const::from_bits(cx.tcx, max, pcx.ty),
+            let ty = ty::ParamEnv::empty().and(pcx.ty);
+            vec![ConstantRange(ty::Const::from_bits(cx.tcx, 0, ty),
+                               ty::Const::from_bits(cx.tcx, max, ty),
                                RangeEnd::Included)]
         }
         _ => {
@@ -623,8 +626,9 @@ impl<'tcx> IntRange<'tcx> {
             ConstantRange(lo, hi, end) => {
                 assert_eq!(lo.ty, hi.ty);
                 let ty = lo.ty;
-                if let Some(lo) = lo.assert_bits(ty) {
-                    if let Some(hi) = hi.assert_bits(ty) {
+                let env_ty = ty::ParamEnv::empty().and(ty);
+                if let Some(lo) = lo.assert_bits(tcx, env_ty) {
+                    if let Some(hi) = hi.assert_bits(tcx, env_ty) {
                         // Perform a shift if the underlying types are signed,
                         // which makes the interval arithmetic simpler.
                         let bias = IntRange::signed_bias(tcx, ty);
@@ -642,7 +646,7 @@ impl<'tcx> IntRange<'tcx> {
             }
             ConstantValue(val) => {
                 let ty = val.ty;
-                if let Some(val) = val.assert_bits(ty) {
+                if let Some(val) = val.assert_bits(tcx, ty::ParamEnv::empty().and(ty)) {
                     let bias = IntRange::signed_bias(tcx, ty);
                     let val = val ^ bias;
                     Some(IntRange { range: val..=val, ty })
@@ -707,6 +711,7 @@ fn ranges_subtract_pattern<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
         remaining_ranges.into_iter().map(|r| {
             let (lo, hi) = r.into_inner();
             let bias = IntRange::signed_bias(cx.tcx, ty);
+            let ty = ty::ParamEnv::empty().and(ty);
             ConstantRange(ty::Const::from_bits(cx.tcx, lo ^ bias, ty),
                           ty::Const::from_bits(cx.tcx, hi ^ bias, ty),
                           RangeEnd::Included)