From a852156980986d6c5875981a49c16fe8b98875c3 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 1 Sep 2018 09:59:04 -0700 Subject: 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. --- src/tools/wasm-shell.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/tools/wasm-shell.cpp') diff --git a/src/tools/wasm-shell.cpp b/src/tools/wasm-shell.cpp index 613fc8040..2a59be167 100644 --- a/src/tools/wasm-shell.cpp +++ b/src/tools/wasm-shell.cpp @@ -201,14 +201,14 @@ static void run_asserts(Name moduleName, size_t* i, bool* checked, Module* wasm, ->dynCast() ->value; std::cerr << "seen " << result << ", expected " << expected << '\n'; - if (!expected.bitwiseEqual(result)) { + if (expected != result) { std::cout << "unexpected, should be identical\n"; abort(); } } else { Literal expected; std::cerr << "seen " << result << ", expected " << expected << '\n'; - if (!expected.bitwiseEqual(result)) { + if (expected != result) { std::cout << "unexpected, should be identical\n"; abort(); } -- cgit v1.2.3