rust/compiler/rustc_span/src
bors 80926fc409 Auto merge of #86368 - michaelwoerister:lexing-ice, r=davidtwco
Disambiguate between SourceFiles from different crates even if they have the same path

This PR fixes an ICE that can occur when the compiler encounters a source file that is part of both the local crate and an upstream crate:

1. While importing source files from an upstream crate the compiler creates a `SourceFile` entry for `foo.rs` in the `SourceMap`. Since this is an imported source file its `src` field is `None`.
2. At a later point the parser encounters `foo.rs` again. It tells the `SourceMap` to load the file but because we already have an entry for `foo.rs` the `SourceMap` will return the existing version with `src == None`.
3. The parser proceeds under the assumption that `src.is_some()` and panics when actually trying to use the file's contents.

This PR fixes the issue by adding the source file's associated `CrateNum` to the `SourceMap`'s interning key. As a consequence the two instances of the file will each have a separate entry in the `SourceMap`. They just happen to share the same file path. This approach seemed less problematic to me than trying to mutate the `SourceFile` after it had already been created.

Another, more involved, approach might be to merge the `src` and the `external_src` field.

Fixes #85955
2021-06-22 14:53:58 +00:00
..
analyze_source_file remove redundant closures (clippy::redundant_closure) 2021-01-03 13:34:24 +01:00
lev_distance remove redundant closures (clippy::redundant_closure) 2021-01-03 13:34:24 +01:00
source_map Split span_to_string into span_to_diagnostic/embeddable_string 2021-05-11 00:04:12 +01:00
symbol mv compiler to compiler/ 2020-08-30 18:45:07 +03:00
analyze_source_file.rs Fix some clippy lints 2020-12-03 17:08:19 -05:00
caching_source_map_view.rs rustc_span: add span_data_to_lines_and_cols to caching source map view 2020-12-03 18:36:34 -08:00
crate_disambiguator.rs Revert "Merge CrateDisambiguator into StableCrateId" 2021-06-07 10:37:45 +02:00
def_id.rs Sprinkle inline. 2021-06-11 16:48:24 +02:00
edition.rs fix: wrong word 2021-03-10 09:09:37 +08:00
fatal_error.rs mv compiler to compiler/ 2020-08-30 18:45:07 +03:00
hygiene.rs Make DummyHashStableContext dummier. 2021-06-11 16:54:34 +02:00
lev_distance.rs Edit rustc_span documentation 2020-12-25 14:02:52 -08:00
lib.rs Hash DefId in rustc_span. 2021-06-11 12:25:02 +02:00
source_map.rs Encode SourceFile source crate as StableCrateId in incr. comp. OnDiskCache. 2021-06-21 15:30:16 +02:00
span_encoding.rs Remove SpanInterner::get 2021-05-03 17:32:06 -04:00
symbol.rs Auto merge of #85707 - jam1garner:future_prelude_collision_lint, r=nikomatsakis 2021-06-22 07:01:54 +00:00
tests.rs mv compiler to compiler/ 2020-08-30 18:45:07 +03:00