about summary refs log tree commit diff
path: root/compiler/rustc_codegen_gcc
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-12-31 16:38:23 +0000
committerbors <bors@rust-lang.org>2021-12-31 16:38:23 +0000
commit984a6bf9c11b7356f696c685a145d7136fff051c (patch)
tree31d92d9cabd3d2ebec0cf370efd69c97458836f9 /compiler/rustc_codegen_gcc
parent8ed935e92dfb09ae388344b12284bf5110cf9265 (diff)
parentd9220924dc5603730b480706d94f5d68663f69b2 (diff)
downloadrust-984a6bf9c11b7356f696c685a145d7136fff051c.tar.gz
rust-984a6bf9c11b7356f696c685a145d7136fff051c.zip
Auto merge of #92175 - Aaron1011:fix-missing-source-file, r=cjgillot
Import `SourceFile`s from crate before decoding foreign `Span`

Fixes #92163
Fixes #92014

When writing to the incremental cache, we encode all `Span`s
we encounter, regardless of whether or not their `SourceFile`
comes from the local crate, or from a foreign crate.

When we decode a `Span`, we use the `StableSourceFileId` we encoded
to locate the matching `SourceFile` in the current session. If this
id corresponds to a `SourceFile` from another crate, then we need to
have already imported that `SourceFile` into our current session.

This usually happens automatically during resolution / macro expansion,
when we try to resolve definitions from other crates. In certain cases,
however, we may try to load a `Span` from a transitive dependency
without having ever imported the `SourceFile`s from that crate, leading
to an ICE.

This PR fixes the issue by enconding the `SourceFile`'s `CrateNum`
when we encode a `Span`. During decoding, we call `imported_source_files()`
when we encounter a foreign `CrateNum`, which ensure that all
`SourceFile`s from that crate are imported into the current session.
Diffstat (limited to 'compiler/rustc_codegen_gcc')
0 files changed, 0 insertions, 0 deletions