Skip to content

Commit c1a859b

Browse files
committed
Auto merge of rust-lang#104164 - cjgillot:u64-cache, r=compiler-errors
Use 64 bits for incremental cache in-file positions We currently use a 32-bit integer to encode byte positions into the incremental cache. This is not enough when the query chache file is >4GB. As the overflow check was a `debug_assert`, it was removed in released compilers, making compilation succeed silently. At the next compilation, cache decoding would try to read unrelated data because of garbled file position, triggering an ICE. Fixes rust-lang#79786 (I'm closing that bug since it the original report and the subsequent questions are probably different instances. A new bug should be opened for new instances of that ICE.)
2 parents a3c0a02 + c49e250 commit c1a859b

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

compiler/rustc_query_impl/src/on_disk_cache.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,11 @@ pub type EncodedDepNodeIndex = Vec<(SerializedDepNodeIndex, AbsoluteBytePos)>;
119119
struct SourceFileIndex(u32);
120120

121121
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Encodable, Decodable)]
122-
pub struct AbsoluteBytePos(u32);
122+
pub struct AbsoluteBytePos(u64);
123123

124124
impl AbsoluteBytePos {
125125
fn new(pos: usize) -> AbsoluteBytePos {
126-
debug_assert!(pos <= u32::MAX as usize);
127-
AbsoluteBytePos(pos as u32)
126+
AbsoluteBytePos(pos.try_into().expect("Incremental cache file size overflowed u64."))
128127
}
129128

130129
fn to_usize(self) -> usize {

0 commit comments

Comments
 (0)