diff options
author | Alon Zakai <alonzakai@gmail.com> | 2019-04-09 10:34:21 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-09 10:34:21 -0700 |
commit | b13db5a0bc1170494ba845ab66129a506b251fde (patch) | |
tree | 2fb047cfd864e8a6fb21d19a3cf43c4096831eaf /src/passes/OptimizeInstructions.cpp | |
parent | d318b18d8c415357e8ee65dd4ae34ec28dc8f9d0 (diff) | |
download | binaryen-b13db5a0bc1170494ba845ab66129a506b251fde.tar.gz binaryen-b13db5a0bc1170494ba845ab66129a506b251fde.tar.bz2 binaryen-b13db5a0bc1170494ba845ab66129a506b251fde.zip |
avoid signed overflow undefined behavior in OptimizeInstructions constant computations (#1990)
Diffstat (limited to 'src/passes/OptimizeInstructions.cpp')
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp index 7d4735686..c098d0ed7 100644 --- a/src/passes/OptimizeInstructions.cpp +++ b/src/passes/OptimizeInstructions.cpp @@ -825,11 +825,11 @@ private: // find added constants in an expression tree, including multiplied/shifted, and combine them // note that we ignore division/shift-right, as rounding makes this nonlinear, so not a valid opt Expression* optimizeAddedConstants(Binary* binary) { - int32_t constant = 0; + uint32_t constant = 0; std::vector<Const*> constants; std::function<void (Expression*, int)> seek = [&](Expression* curr, int mul) { if (auto* c = curr->dynCast<Const>()) { - auto value = c->value.geti32(); + uint32_t value = c->value.geti32(); if (value != 0) { constant += value * mul; constants.push_back(c); |