about summary refs log tree commit diff
path: root/compiler/rustc_codegen_gcc
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2021-12-21 14:01:10 -0500
committerAaron Hill <aa1ronham@gmail.com>2021-12-23 12:56:12 -0500
commitd9220924dc5603730b480706d94f5d68663f69b2 (patch)
tree749be9b8b08665301c19db64ba4457e9881246fc /compiler/rustc_codegen_gcc
parent489296d82561f596c278e90edc10eb56168ab623 (diff)
downloadrust-d9220924dc5603730b480706d94f5d68663f69b2.tar.gz
rust-d9220924dc5603730b480706d94f5d68663f69b2.zip
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 calling `imported_source_files()`
when we encounter a `SourceFile` with a foreign `CrateNum`.
This ensures 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