Auto merge of #4590 - flip1995:ice_4579, r=Manishearth
Fix ICE #4579 Fixes #4579 Fixes #4584 r? @phansch changelog: Fix ICE caused by Clippys const-utils
This commit is contained in:
commit
83f90aaedf
@ -62,8 +62,8 @@ matrix:
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=rust-lang/rustfmt
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=hyperium/hyper
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
# - env: INTEGRATION=hyperium/hyper
|
||||
# if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=bluss/rust-itertools
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=serde-rs/serde
|
||||
@ -72,8 +72,8 @@ matrix:
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=rust-random/rand
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=rust-lang-nursery/futures-rs
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
# - env: INTEGRATION=rust-lang-nursery/futures-rs
|
||||
# if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=Marwes/combine
|
||||
if: repo =~ /^rust-lang\/rust-clippy$/ AND branch IN (auto, try)
|
||||
- env: INTEGRATION=rust-lang-nursery/failure
|
||||
|
@ -152,7 +152,7 @@ impl Constant {
|
||||
}
|
||||
|
||||
/// Parses a `LitKind` to a `Constant`.
|
||||
pub fn lit_to_constant(lit: &LitKind, ty: Ty<'_>) -> Constant {
|
||||
pub fn lit_to_constant(lit: &LitKind, ty: Option<Ty<'_>>) -> Constant {
|
||||
use syntax::ast::*;
|
||||
|
||||
match *lit {
|
||||
@ -161,7 +161,9 @@ pub fn lit_to_constant(lit: &LitKind, ty: Ty<'_>) -> Constant {
|
||||
LitKind::ByteStr(ref s) => Constant::Binary(Lrc::clone(s)),
|
||||
LitKind::Char(c) => Constant::Char(c),
|
||||
LitKind::Int(n, _) => Constant::Int(n),
|
||||
LitKind::Float(ref is, _) | LitKind::FloatUnsuffixed(ref is) => match ty.kind {
|
||||
LitKind::Float(ref is, FloatTy::F32) => Constant::F32(is.as_str().parse().unwrap()),
|
||||
LitKind::Float(ref is, FloatTy::F64) => Constant::F64(is.as_str().parse().unwrap()),
|
||||
LitKind::FloatUnsuffixed(ref is) => match ty.expect("type of float is known").kind {
|
||||
ty::Float(FloatTy::F32) => Constant::F32(is.as_str().parse().unwrap()),
|
||||
ty::Float(FloatTy::F64) => Constant::F64(is.as_str().parse().unwrap()),
|
||||
_ => bug!(),
|
||||
@ -225,7 +227,7 @@ impl<'c, 'cc> ConstEvalLateContext<'c, 'cc> {
|
||||
match e.kind {
|
||||
ExprKind::Path(ref qpath) => self.fetch_path(qpath, e.hir_id),
|
||||
ExprKind::Block(ref block, _) => self.block(block),
|
||||
ExprKind::Lit(ref lit) => Some(lit_to_constant(&lit.node, self.tables.expr_ty(e))),
|
||||
ExprKind::Lit(ref lit) => Some(lit_to_constant(&lit.node, self.tables.expr_ty_opt(e))),
|
||||
ExprKind::Array(ref vec) => self.multi(vec).map(Constant::Vec),
|
||||
ExprKind::Tup(ref tup) => self.multi(tup).map(Constant::Tuple),
|
||||
ExprKind::Repeat(ref value, _) => {
|
||||
|
@ -44,7 +44,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NegMultiply {
|
||||
fn check_mul(cx: &LateContext<'_, '_>, span: Span, lit: &Expr, exp: &Expr) {
|
||||
if_chain! {
|
||||
if let ExprKind::Lit(ref l) = lit.kind;
|
||||
if let Constant::Int(1) = consts::lit_to_constant(&l.node, cx.tables.expr_ty(lit));
|
||||
if let Constant::Int(1) = consts::lit_to_constant(&l.node, cx.tables.expr_ty_opt(lit));
|
||||
if cx.tables.expr_ty(exp).is_integral();
|
||||
then {
|
||||
span_lint(cx, NEG_MULTIPLY, span, "Negation by multiplying with -1");
|
||||
|
13
tests/ui/ice-4579.rs
Normal file
13
tests/ui/ice-4579.rs
Normal file
@ -0,0 +1,13 @@
|
||||
#![allow(clippy::single_match)]
|
||||
|
||||
use std::ptr;
|
||||
|
||||
fn main() {
|
||||
match Some(0_usize) {
|
||||
Some(_) => {
|
||||
let s = "012345";
|
||||
unsafe { ptr::read(s.as_ptr().offset(1) as *const [u8; 5]) };
|
||||
},
|
||||
_ => (),
|
||||
};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user