Auto merge of #4715 - rust-lang:rustup, r=phansch

Rustup to rust-lang/rust#65647

cc rust-lang/rust#65647

waiting on rust-lang/rust#65690

changelog: none
This commit is contained in:
bors 2019-10-23 10:35:17 +00:00
commit 9a2e500928

View File

@ -2,10 +2,11 @@ use crate::consts::{constant_context, constant_simple};
use crate::utils::differing_macro_contexts; use crate::utils::differing_macro_contexts;
use rustc::hir::ptr::P; use rustc::hir::ptr::P;
use rustc::hir::*; use rustc::hir::*;
use rustc::ich::StableHashingContextProvider;
use rustc::lint::LateContext; use rustc::lint::LateContext;
use rustc::ty::TypeckTables; use rustc::ty::TypeckTables;
use std::collections::hash_map::DefaultHasher; use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
use std::hash::{Hash, Hasher}; use std::hash::Hash;
use syntax::ast::Name; use syntax::ast::Name;
/// Type used to check whether two ast are the same. This is different from the /// Type used to check whether two ast are the same. This is different from the
@ -348,7 +349,7 @@ pub struct SpanlessHash<'a, 'tcx> {
/// Context used to evaluate constant expressions. /// Context used to evaluate constant expressions.
cx: &'a LateContext<'a, 'tcx>, cx: &'a LateContext<'a, 'tcx>,
tables: &'a TypeckTables<'tcx>, tables: &'a TypeckTables<'tcx>,
s: DefaultHasher, s: StableHasher,
} }
impl<'a, 'tcx> SpanlessHash<'a, 'tcx> { impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
@ -356,11 +357,11 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
Self { Self {
cx, cx,
tables, tables,
s: DefaultHasher::new(), s: StableHasher::new(),
} }
} }
pub fn finish(&self) -> u64 { pub fn finish(self) -> u64 {
self.s.finish() self.s.finish()
} }
@ -411,7 +412,8 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
self.hash_expr(r); self.hash_expr(r);
}, },
ExprKind::AssignOp(ref o, ref l, ref r) => { ExprKind::AssignOp(ref o, ref l, ref r) => {
o.hash(&mut self.s); o.node
.hash_stable(&mut self.cx.tcx.get_stable_hashing_context(), &mut self.s);
self.hash_expr(l); self.hash_expr(l);
self.hash_expr(r); self.hash_expr(r);
}, },
@ -419,7 +421,8 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
self.hash_block(b); self.hash_block(b);
}, },
ExprKind::Binary(op, ref l, ref r) => { ExprKind::Binary(op, ref l, ref r) => {
op.node.hash(&mut self.s); op.node
.hash_stable(&mut self.cx.tcx.get_stable_hashing_context(), &mut self.s);
self.hash_expr(l); self.hash_expr(l);
self.hash_expr(r); self.hash_expr(r);
}, },
@ -460,7 +463,7 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
}, },
ExprKind::InlineAsm(..) | ExprKind::Err => {}, ExprKind::InlineAsm(..) | ExprKind::Err => {},
ExprKind::Lit(ref l) => { ExprKind::Lit(ref l) => {
l.hash(&mut self.s); l.node.hash(&mut self.s);
}, },
ExprKind::Loop(ref b, ref i, _) => { ExprKind::Loop(ref b, ref i, _) => {
self.hash_block(b); self.hash_block(b);
@ -519,7 +522,7 @@ impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
self.hash_exprs(v); self.hash_exprs(v);
}, },
ExprKind::Unary(lop, ref le) => { ExprKind::Unary(lop, ref le) => {
lop.hash(&mut self.s); lop.hash_stable(&mut self.cx.tcx.get_stable_hashing_context(), &mut self.s);
self.hash_expr(le); self.hash_expr(le);
}, },
} }