rust/compiler/rustc_query_impl/src
Aaron Hill d9220924dc
Import SourceFiles 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.
2021-12-23 12:56:12 -05:00
..
keys.rs Remove in_band_lifetimes from rustc_query_impl 2021-12-14 12:13:07 -05:00
lib.rs Remove in_band_lifetimes from rustc_query_impl 2021-12-14 12:13:07 -05:00
on_disk_cache.rs Import SourceFiles from crate before decoding foreign Span 2021-12-23 12:56:12 -05:00
plumbing.rs Remove in_band_lifetimes from rustc_query_impl 2021-12-14 12:13:07 -05:00
profiling_support.rs Auto merge of #91957 - nnethercote:rm-SymbolStr, r=oli-obk 2021-12-19 09:31:37 +00:00
README.md
stats.rs Remove built-in cache_hit tracking 2021-10-11 16:33:49 -04:00
util.rs Note that type aliases cannot be recursive 2021-08-27 14:50:51 -07:00
values.rs

For more information about how the query system works, see the rustc dev guide.