Skip to content

Commit c1a859b

Browse files
committed
Auto merge of #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 #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)