aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-11-27 23:00:43 +0800
committerGitHub <noreply@github.com>2018-11-27 23:00:43 +0800
commitbc7cb301e3d71756c8fbefe888aca53433302117 (patch)
tree554b4388d4cfd74c4a83af73b7da1aca7bab595d
parent5e55cb17299e1c8f9a685637703e9bd956cfc826 (diff)
parentfb2e471d00d41dece0152b14ef209aa4e4b2d60d (diff)
downloaddexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar.gz
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar.bz2
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar.lz
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar.xz
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.tar.zst
dexon-solidity-bc7cb301e3d71756c8fbefe888aca53433302117.zip
Merge pull request #5517 from ethereum/nondeterminismBoost
Fix nondeterminism bug related to boost version.
-rw-r--r--Changelog.md1
-rw-r--r--libevmasm/ConstantOptimiser.cpp2
2 files changed, 2 insertions, 1 deletions
diff --git a/Changelog.md b/Changelog.md
index 876182cc..bed3ab36 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -17,6 +17,7 @@ Bugfixes:
* Assembly output: Do not mix in/out jump annotations with arguments.
* Code Generator: Annotate jump from calldata decoder to function as "jump in".
* Type Checker: Properly detect different return types when overriding an external interface function with a public contract function.
+ * Optimizer: Fix nondeterminism bug related to the boost version and constants representation. The bug only resulted in less optimal but still correct code because the generated routine is always verified to be correct.
Build System:
* Emscripten: Upgrade to Emscripten SDK 1.37.21 and boost 1.67.
diff --git a/libevmasm/ConstantOptimiser.cpp b/libevmasm/ConstantOptimiser.cpp
index 9844ba3a..ae1a5643 100644
--- a/libevmasm/ConstantOptimiser.cpp
+++ b/libevmasm/ConstantOptimiser.cpp
@@ -193,7 +193,7 @@ AssemblyItems ComputeMethod::findRepresentation(u256 const& _value)
bigint bestGas = gasNeeded(routine);
for (unsigned bits = 255; bits > 8 && m_maxSteps > 0; --bits)
{
- unsigned gapDetector = unsigned(_value >> (bits - 8)) & 0x1ff;
+ unsigned gapDetector = unsigned((_value >> (bits - 8)) & 0x1ff);
if (gapDetector != 0xff && gapDetector != 0x100)
continue;