Do not re-hash foreign spans.
This commit is contained in:
parent
ce21756ed3
commit
daf8903e8e
@ -664,7 +664,21 @@ fn decode(decoder: &mut CacheDecoder<'a, 'tcx>) -> Result<Self, String> {
|
|||||||
|
|
||||||
let data: ExpnData = decoder
|
let data: ExpnData = decoder
|
||||||
.with_position(pos.to_usize(), |decoder| decode_tagged(decoder, TAG_EXPN_DATA))?;
|
.with_position(pos.to_usize(), |decoder| decode_tagged(decoder, TAG_EXPN_DATA))?;
|
||||||
rustc_span::hygiene::register_local_expn_id(data, hash)
|
let expn_id = rustc_span::hygiene::register_local_expn_id(data, hash);
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
{
|
||||||
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
|
let mut hcx = decoder.tcx.create_stable_hashing_context();
|
||||||
|
let mut hasher = StableHasher::new();
|
||||||
|
hcx.while_hashing_spans(true, |hcx| {
|
||||||
|
expn_id.expn_data().hash_stable(hcx, &mut hasher)
|
||||||
|
});
|
||||||
|
let local_hash: u64 = hasher.finish();
|
||||||
|
debug_assert_eq!(hash.local_hash(), local_hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
expn_id
|
||||||
} else {
|
} else {
|
||||||
let index_guess = decoder.foreign_expn_data[&hash];
|
let index_guess = decoder.foreign_expn_data[&hash];
|
||||||
decoder.tcx.cstore_untracked().expn_hash_to_expn_id(
|
decoder.tcx.cstore_untracked().expn_hash_to_expn_id(
|
||||||
@ -675,16 +689,7 @@ fn decode(decoder: &mut CacheDecoder<'a, 'tcx>) -> Result<Self, String> {
|
|||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
debug_assert_eq!(expn_id.krate, krate);
|
||||||
{
|
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
|
||||||
let mut hcx = decoder.tcx.create_stable_hashing_context();
|
|
||||||
let mut hasher = StableHasher::new();
|
|
||||||
hcx.while_hashing_spans(true, |hcx| expn_id.expn_data().hash_stable(hcx, &mut hasher));
|
|
||||||
let local_hash: u64 = hasher.finish();
|
|
||||||
debug_assert_eq!(hash.local_hash(), local_hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(expn_id)
|
Ok(expn_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
src/test/incremental/mir-opt.rs
Normal file
11
src/test/incremental/mir-opt.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// MIR optimizations can create expansions after the TyCtxt has been created.
|
||||||
|
// This test verifies that those expansions can be decoded correctly.
|
||||||
|
|
||||||
|
// revisions:rpass1 rpass2
|
||||||
|
// compile-flags: -Z query-dep-graph -Z mir-opt-level=3
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
if std::env::var("a").is_ok() {
|
||||||
|
println!("b");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user