diff options
author | Alon Zakai <alonzakai@gmail.com> | 2018-09-01 09:59:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-01 09:59:04 -0700 |
commit | a852156980986d6c5875981a49c16fe8b98875c3 (patch) | |
tree | 40d254794757b82197c8bc3530ce9973e2daf3b1 /src/ir/ExpressionAnalyzer.cpp | |
parent | 9750c18faba7be48f9e086fd2d00838ca4ae9d0f (diff) | |
download | binaryen-a852156980986d6c5875981a49c16fe8b98875c3.tar.gz binaryen-a852156980986d6c5875981a49c16fe8b98875c3.tar.bz2 binaryen-a852156980986d6c5875981a49c16fe8b98875c3.zip |
Change the Literal class's operator== to be bitwise (#1661)
The change means that nan values will be compared bitwise when writing A == B, and so the float rule of a nan is different from itself would not apply.
I think this is a safer default. In particular this PR fixes a fuzz bug in the rse pass, which placed Literals in a hash table, and due to nan != nan, an infinite loop... Also, looks like we really want a bitwise comparison pretty much everywhere anyhow, as can be seen in the diff here. Really the single place we need a floaty comparison is in the intepreter where we implement f32.eq etc., and there the code was already using the proper code path anyhow.
Diffstat (limited to 'src/ir/ExpressionAnalyzer.cpp')
-rw-r--r-- | src/ir/ExpressionAnalyzer.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/ir/ExpressionAnalyzer.cpp b/src/ir/ExpressionAnalyzer.cpp index 64b1ce24b..d91bc370c 100644 --- a/src/ir/ExpressionAnalyzer.cpp +++ b/src/ir/ExpressionAnalyzer.cpp @@ -257,7 +257,7 @@ bool ExpressionAnalyzer::flexibleEqual(Expression* left, Expression* right, Expr break; } case Expression::Id::ConstId: { - if (!left->cast<Const>()->value.bitwiseEqual(right->cast<Const>()->value)) { + if (left->cast<Const>()->value != right->cast<Const>()->value) { return false; } break; |