Skip to content

Commit 860db02

Browse files
committed
Stop requiring ctxts in inline and outline spans being synchronized
1 parent 686bfc4 commit 860db02

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

compiler/rustc_span/src/span_encoding.rs

+10-6
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,13 @@ impl Span {
136136
}
137137

138138
// Partially-interned or fully-interned format.
139-
let index =
140-
with_span_interner(|interner| interner.intern(&SpanData { lo, hi, ctxt, parent }));
141-
let ctxt_or_parent_or_marker = if ctxt2 <= MAX_CTXT {
142-
ctxt2 as u16 // partially-interned
139+
let (ctxt_or_parent_or_marker, ctxt) = if ctxt2 <= MAX_CTXT {
140+
(ctxt2 as u16, SyntaxContext::from_u32(u32::MAX)) // partially-interned
143141
} else {
144-
CTXT_INTERNED_MARKER // fully-interned
142+
(CTXT_INTERNED_MARKER, ctxt) // fully-interned
145143
};
144+
let index =
145+
with_span_interner(|interner| interner.intern(&SpanData { lo, hi, ctxt, parent }));
146146
Span {
147147
lo_or_index: index,
148148
len_with_tag_or_marker: BASE_LEN_INTERNED_MARKER,
@@ -193,7 +193,11 @@ impl Span {
193193
// the interned value contains all the data, so we don't need to
194194
// distinguish them.
195195
let index = self.lo_or_index;
196-
with_span_interner(|interner| interner.spans[index as usize])
196+
let mut data = with_span_interner(|interner| interner.spans[index as usize]);
197+
if data.ctxt.as_u32() == u32::MAX {
198+
data.ctxt = SyntaxContext::from_u32(u32::from(self.ctxt_or_parent_or_marker));
199+
}
200+
data
197201
}
198202
}
199203

0 commit comments

Comments
 (0)