diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-07-06 20:25:34 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-07-11 00:12:08 +0300 |
| commit | d1949b1ab01dbd482008f64af54161cc43bb0991 (patch) | |
| tree | 6f96c59b462eb2dcbb935be4eaa967996e7be44f /src/libsyntax_pos/hygiene.rs | |
| parent | 0ec6ea7333a8918a96f40110e014f2bbbd72281f (diff) | |
| download | rust-d1949b1ab01dbd482008f64af54161cc43bb0991.tar.gz rust-d1949b1ab01dbd482008f64af54161cc43bb0991.zip | |
expand: Do not overwrite existing `ExpnInfo` when injecting derive markers
Create a fresh expansion for them instead - this is the usual way to allow unstable features for generated/desugared code. Fixes https://github.com/rust-lang/rust/issues/52363
Diffstat (limited to 'src/libsyntax_pos/hygiene.rs')
| -rw-r--r-- | src/libsyntax_pos/hygiene.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index 28d452233cc..ba2b2b7a2dd 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -117,7 +117,11 @@ impl Mark { #[inline] pub fn set_expn_info(self, info: ExpnInfo) { - HygieneData::with(|data| data.marks[self.0 as usize].expn_info = Some(info)) + HygieneData::with(|data| { + let old_info = &mut data.marks[self.0 as usize].expn_info; + assert!(old_info.is_none(), "expansion info is reset for a mark"); + *old_info = Some(info); + }) } pub fn is_descendant_of(self, ancestor: Mark) -> bool { |
