about summary refs log tree commit diff
path: root/src/libsyntax_pos
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-06-20 00:13:11 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-06-23 20:09:21 +0300
commitb15785b67133b5017f141d1fda1dd3dcf331b4b4 (patch)
tree985a0c9af4d01a26a636f8032e6a7796dafbb6d9 /src/libsyntax_pos
parent17f20bec227244a0b47c8c0c24e09452a061e09a (diff)
downloadrust-b15785b67133b5017f141d1fda1dd3dcf331b4b4.tar.gz
rust-b15785b67133b5017f141d1fda1dd3dcf331b4b4.zip
hygiene: Make sure expansion info is set at most once for a given `Mark`
Diffstat (limited to 'src/libsyntax_pos')
-rw-r--r--src/libsyntax_pos/hygiene.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs
index 6cf6f6f17c1..64cd31a485c 100644
--- a/src/libsyntax_pos/hygiene.rs
+++ b/src/libsyntax_pos/hygiene.rs
@@ -85,7 +85,14 @@ 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;
+            if let Some(old_info) = old_info {
+                panic!("expansion info is reset for the mark {}\nold: {:#?}\nnew: {:#?}",
+                       self.0, old_info, info);
+            }
+            *old_info = Some(info);
+        })
     }
 
     pub fn modern(mut self) -> Mark {