From c0abddc9dcbf1f0437ac04119a0c8c238fad44c8 Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 6 Feb 2018 12:58:51 +0100 Subject: [PATCH] Test for self-referring assignment. --- libjulia/optimiser/DataFlowAnalyzer.cpp | 2 -- test/libjulia/Rematerialiser.cpp | 9 +++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libjulia/optimiser/DataFlowAnalyzer.cpp b/libjulia/optimiser/DataFlowAnalyzer.cpp index 9ee3215d7..566533930 100644 --- a/libjulia/optimiser/DataFlowAnalyzer.cpp +++ b/libjulia/optimiser/DataFlowAnalyzer.cpp @@ -135,9 +135,7 @@ void DataFlowAnalyzer::handleAssignment(set const& _variables, Expressio string const& name = *_variables.begin(); // Expression has to be movable and cannot contain a reference // to the variable that will be assigned to. - // TODO: Add a test for that if (_value && movableChecker.movable() && !movableChecker.referencedVariables().count(name)) - // TODO If _value is null, we could use zero. m_value[name] = _value; } diff --git a/test/libjulia/Rematerialiser.cpp b/test/libjulia/Rematerialiser.cpp index 5bd692362..8f928f8ef 100644 --- a/test/libjulia/Rematerialiser.cpp +++ b/test/libjulia/Rematerialiser.cpp @@ -146,6 +146,15 @@ BOOST_AUTO_TEST_CASE(reassignment) ); } +BOOST_AUTO_TEST_CASE(update_assignment_remat) +{ + // We cannot substitute `a` in `let b := a` + CHECK( + "{ let a := extcodesize(0) a := mul(a, 2) let b := a }", + "{ let a := extcodesize(0) a := mul(a, 2) let b := a }" + ); +} + BOOST_AUTO_TEST_CASE(do_not_move_out_of_scope) { // Cannot replace by `let b := x` by `let b := a` since a is out of scope.