فهرست منبع

reaching def can be killed, handle this

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 4 سال پیش
والد
کامیت
e44b566c1e
2فایلهای تغییر یافته به همراه13 افزوده شده و 3 حذف شده
  1. 12 2
      src/codegen/dead_storage.rs
  2. 1 1
      tests/substrate_tests/mappings.rs

+ 12 - 2
src/codegen/dead_storage.rs

@@ -677,8 +677,18 @@ fn expression_compare(
         }
         (Expression::Variable(_, _, left), Expression::Variable(_, _, right)) => {
             // let's check that the variable left has the same reaching definitions as right
-            let left = &left_vars.vars[left];
-            let right = &right_vars.vars[right];
+            let left = match left_vars.vars.get(left) {
+                Some(left) => left,
+                None => {
+                    return ExpressionCmp::Unknown;
+                }
+            };
+            let right = match right_vars.vars.get(right) {
+                Some(right) => right,
+                None => {
+                    return ExpressionCmp::Unknown;
+                }
+            };
 
             if left == right {
                 ExpressionCmp::Equal

+ 1 - 1
tests/substrate_tests/mappings.rs

@@ -207,7 +207,7 @@ fn basic() {
 
             function libfunc(data storage self, uint64 value) internal {
                 self.pairmap[self.pairmap[value].a].a = 1;
-                //self.pairmap[self.pairmap[value].b].b = 2;
+                self.pairmap[self.pairmap[value].b].b = 2;
             }
         }
         "##,