diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-08-21 19:35:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-21 19:35:10 +0200 |
| commit | 221b53c9b0e9eb3f06efbe4a11e724f406314db9 (patch) | |
| tree | e160ca9f3cc010f3f8a85bafcf2cdf3a45200bb6 /tests/rustdoc-js-std/parser-errors.js | |
| parent | 982c6f8721416431ec62bb0b9105c0578a9fc603 (diff) | |
| parent | 07481b9e90df0860519043b54e07529003e74814 (diff) | |
| download | rust-221b53c9b0e9eb3f06efbe4a11e724f406314db9.tar.gz rust-221b53c9b0e9eb3f06efbe4a11e724f406314db9.zip | |
Rollup merge of #127279 - bvanjoi:fix-112680, r=petrochenkov
use old ctx if has same expand environment during decode span
Fixes #112680
The root reason why #112680 failed with incremental compilation on the second attempt is the difference in `opaque` between the span of the field [`ident`](https://github.com/rust-lang/rust/blob/master/compiler/rustc_hir_typeck/src/expr.rs#L2348) and the span in the incremental cache at `tcx.def_ident_span(field.did)`.
- Let's call the span of `ident` as `span_a`, which is generated by [`apply_mark_internal`](https://github.com/rust-lang/rust/blob/master/compiler/rustc_span/src/hygiene.rs#L553-L554). Its content is similar to:
```rs
span_a_ctx -> SyntaxContextData {
opaque: span_a_ctx,
opaque_and_semitransparent: span_a_ctx,
// ....
}
```
- And call the span of `tcx.def_ident_span` as `span_b`, which is generated by [`decode_syntax_context`](https://github.com/rust-lang/rust/blob/master/compiler/rustc_span/src/hygiene.rs#L1390). Its content is:
```rs
span_b_ctx -> SyntaxContextData {
opaque: span_b_ctx,
// note `span_b_ctx` is not same as `span_a_ctx`
opaque_and_semitransparent: span_b_ctx,
// ....
}
```
Although they have the same `parent` (both refer to the root) and `outer_expn`, I cannot find the specific connection between them. Therefore, I chose a solution that may not be the best: give up the incremental compile cache to ensure we can use `span_a` in this case.
r? `@petrochenkov` Do you have any advice on this? Or perhaps this solution is acceptable?
Diffstat (limited to 'tests/rustdoc-js-std/parser-errors.js')
0 files changed, 0 insertions, 0 deletions
