From 77b998fc2711a1f46e699d581c50a6cf9d50c7c2 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:11:36 +0300 Subject: Hide Visual Studio build warning on casting 64-bit int to 32-bit when we know it is safe to do so. --- src/wasm-s-parser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 965336857..4c22fb1e3 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -826,7 +826,7 @@ private: } else if (str[0] == 'o') { uint64_t offset = atoll(eq); if (offset > 0xffffffff) onError(); - ret->offset = offset; + ret->offset = (uint32_t)offset; } else onError(); i++; } -- cgit v1.2.3 From 85f814e17f7d4e8d665fee4281831c8f4576e40f Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:12:17 +0300 Subject: Fix function trapIfGt() to operate on 64-bit integers even when building a 32-bit executable. --- src/wasm-interpreter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 9aadccb59..00a3db0c6 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -695,7 +695,7 @@ private: template size_t getFinalAddress(LS* curr, Literal ptr) { - auto trapIfGt = [this](size_t lhs, size_t rhs, const char* msg) { + auto trapIfGt = [this](uint64_t lhs, uint64_t rhs, const char* msg) { if (lhs > rhs) { std::stringstream ss; ss << msg << ": " << lhs << " > " << rhs; -- cgit v1.2.3 From 432163d499f183ed794f50ec4d38919a169fb80f Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:16:49 +0300 Subject: Clean Visual Studio build warning C4800: 'int64_t': forcing value to bool 'true' or 'false' (performance warning). --- src/wasm-binary.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 6782eec21..edc904787 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -43,7 +43,7 @@ struct LEB { bool hasMore(T temp, MiniT byte) { // for signed, we must ensure the last bit has the right sign, as it will zero extend - return isSigned() ? (temp != 0 && int32_t(temp) != -1) || (value >= 0 && (byte & 64)) || (value < 0 && !(byte & 64)): temp; + return isSigned() ? (temp != 0 && int32_t(temp) != -1) || (value >= 0 && (byte & 64)) || (value < 0 && !(byte & 64)): (temp != 0); } void write(std::vector* out) { -- cgit v1.2.3 From 6dabb50603975681c5ae6ac8048abd66a582bf40 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:20:49 +0300 Subject: Avoid the use of CRT pow(2, n) function to generate integer bit patterns, since pow() returns a double. Cleans VS build warnings C4244: '=': conversion from 'double' to 'size_t', possible loss of data. --- src/s2wasm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/s2wasm.h b/src/s2wasm.h index e10d365a0..f4c83fe65 100644 --- a/src/s2wasm.h +++ b/src/s2wasm.h @@ -703,7 +703,7 @@ class S2WasmBuilder { curr->align = curr->bytes; if (attributes[0]) { assert(strncmp(attributes[0], "p2align=", 8) == 0); - curr->align = pow(2, getInt(attributes[0] + 8)); + curr->align = 1U << getInt(attributes[0] + 8); } setOutput(curr, assign); }; @@ -722,7 +722,7 @@ class S2WasmBuilder { curr->align = curr->bytes; if (attributes[0]) { assert(strncmp(attributes[0], "p2align=", 8) == 0); - curr->align = pow(2, getInt(attributes[0] + 8)); + curr->align = 1U << getInt(attributes[0] + 8); } curr->value = inputs[1]; setOutput(curr, assign); @@ -1101,7 +1101,7 @@ class S2WasmBuilder { align = getInt(); skipWhitespace(); } - align = pow(2, align); // convert from power to actual bytes + align = (size_t)1 << align; // convert from power to actual bytes if (match(".lcomm")) { parseLcomm(name, align); return; -- cgit v1.2.3 From ef0d9f61157ae22bd7c57cf9211bf4bdfe76284e Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:26:42 +0300 Subject: Clean unsigned long long -> size_t assignment build warnings on Visual Studio 2015. --- src/s2wasm-main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/s2wasm-main.cpp b/src/s2wasm-main.cpp index 752494aac..40009cbc9 100644 --- a/src/s2wasm-main.cpp +++ b/src/s2wasm-main.cpp @@ -78,18 +78,18 @@ int main(int argc, const char *argv[]) { if (options.debug) std::cerr << "Parsing and wasming..." << std::endl; AllocatingModule wasm; - size_t globalBase = options.extra.find("global-base") != options.extra.end() + uint64_t globalBase = options.extra.find("global-base") != options.extra.end() ? std::stoull(options.extra["global-base"]) : 1; - size_t stackAllocation = + uint64_t stackAllocation = options.extra.find("stack-allocation") != options.extra.end() ? std::stoull(options.extra["stack-allocation"]) : 0; - size_t initialMem = + uint64_t initialMem = options.extra.find("initial-memory") != options.extra.end() ? std::stoull(options.extra["initial-memory"]) : 0; - size_t maxMem = + uint64_t maxMem = options.extra.find("max-memory") != options.extra.end() ? std::stoull(options.extra["max-memory"]) : 0; -- cgit v1.2.3 From 9da4e6ea0e2631f0643578e8c3603d1f5f825179 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:33:57 +0300 Subject: Fix wasm::read_file() to abort if input file is too big to read in when building a 32-bit executable and size_t is not 64-bit. --- src/support/file.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/support/file.cpp b/src/support/file.cpp index 8813750d4..0401ea724 100644 --- a/src/support/file.cpp +++ b/src/support/file.cpp @@ -27,8 +27,13 @@ T wasm::read_file(const std::string &filename, bool debug) { exit(EXIT_FAILURE); } infile.seekg(0, std::ios::end); - size_t insize = infile.tellg(); - T input(insize + 1, '\0'); + std::streamoff insize = infile.tellg(); + if (sizeof(size_t) == 4 && insize >= 0xFFFFFFFFU) { + // Building a 32-bit executable where size_t == 32 bits, we are not able to create strings larger than 2^32 bytes in length, so must abort here. + std::cerr << "Failed opening '" << filename << "': Input file too large: " << insize << " bytes. Try rebuilding in 64-bit mode." << std::endl; + exit(EXIT_FAILURE); + } + T input((size_t)insize + 1, '\0'); infile.seekg(0); infile.read(&input[0], insize); return input; -- cgit v1.2.3 From 5340abb9ebd1ea73df0c3cf724522510637a9a1c Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:37:32 +0300 Subject: Clean up build warning C4244: 'return': conversion from 'double' to 'uint32_t', possible loss of data in src\support\safe_integer.cpp(40). --- src/support/safe_integer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/support/safe_integer.cpp b/src/support/safe_integer.cpp index dbe62ca52..39c7ee2d0 100644 --- a/src/support/safe_integer.cpp +++ b/src/support/safe_integer.cpp @@ -36,7 +36,7 @@ bool wasm::isSInteger32(double x) { uint32_t wasm::toUInteger32(double x) { assert(isUInteger32(x)); return x < std::numeric_limits::max() - ? x + ? (uint32_t)x : std::numeric_limits::max(); } -- cgit v1.2.3 From a6c00e1fee1a840902cb10e715e2571e824666fa Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 15:56:33 +0300 Subject: Also clean up Visual Studio build warning in wasm::toSInteger32 for double->int32_t cast. --- src/support/safe_integer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/support/safe_integer.cpp b/src/support/safe_integer.cpp index 39c7ee2d0..a596f871c 100644 --- a/src/support/safe_integer.cpp +++ b/src/support/safe_integer.cpp @@ -44,7 +44,7 @@ int32_t wasm::toSInteger32(double x) { assert(isSInteger32(x)); return x > std::numeric_limits::min() && x < std::numeric_limits::max() - ? x + ? (int32_t)x : (x < 0 ? std::numeric_limits::min() : std::numeric_limits::max()); } -- cgit v1.2.3 From a471455c7fb4ffc01badedbb2ac9328a646f4693 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:01:56 +0300 Subject: Clean up src\wasm-interpreter.h(286): warning C4800: 'int64_t': forcing value to bool 'true' or 'false' (performance warning) --- src/wasm-interpreter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 00a3db0c6..5f51ff253 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -283,7 +283,7 @@ private: if (curr->condition) { Flow conditionFlow = visit(curr->condition); if (conditionFlow.breaking()) return conditionFlow; - condition = conditionFlow.value.getInteger(); + condition = conditionFlow.value.getInteger() != 0; } return condition ? flow : Flow(); } -- cgit v1.2.3 From bce9c632434bafd99bc18e57a0ba077785b333fa Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:03:19 +0300 Subject: Clean up src\wasm-interpreter.h(307): warning C4244: 'argument': conversion from 'int64_t' to 'unsigned int', possible loss of data --- src/wasm-interpreter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 5f51ff253..6f3d872fa 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -304,7 +304,7 @@ private: Name target = curr->default_; if (index >= 0 && (size_t)index < curr->targets.size()) { - target = curr->targets[index]; + target = curr->targets[(size_t)index]; } flow.breakTo = target; return flow; -- cgit v1.2.3 From 6f7f0286a93a0356f8548760082d082bede57ed8 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:04:49 +0300 Subject: Clean up src\wasm-interpreter.h(644): warning C4244: 'initializing': conversion from 'double' to 'int64_t', possible loss of data. --- src/wasm-interpreter.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 6f3d872fa..e7a5d6d14 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -641,7 +641,7 @@ private: if (val > (double)std::numeric_limits::max() || val < (double)std::numeric_limits::min()) trap("i32.truncSFloat overflow"); return Literal(int32_t(val)); } else { - int64_t converted = val; + int64_t converted = (int64_t)val; if ((val >= 1 && converted <= 0) || val < (double)LLONG_MIN) trap("i64.truncSFloat overflow"); return Literal(converted); } @@ -654,7 +654,7 @@ private: if (val > (double)std::numeric_limits::max() || val <= (double)-1) trap("i32.truncUFloat overflow"); return Literal(uint32_t(val)); } else { - uint64_t converted = val; + uint64_t converted = (uint64_t)val; if (converted < val - 1 || val <= (double)-1) trap("i64.truncUFloat overflow"); return Literal(converted); } -- cgit v1.2.3 From c685cc43c8b8a3a36837b26a358408c5d8da68d0 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:06:28 +0300 Subject: Clean up truncating cast warnings: src\binaryen-shell.cpp(181): warning C4244: 'argument': conversion from 'int64_t' to 'int8_t', possible loss of data src\binaryen-shell.cpp(182): warning C4244: 'argument': conversion from 'int64_t' to 'int16_t', possible loss of data src\binaryen-shell.cpp(183): warning C4244: 'argument': conversion from 'int64_t' to 'int32_t', possible loss of data --- src/binaryen-shell.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index bfed8277e..985154ddd 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -178,9 +178,9 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { } case i64: { switch (store->bytes) { - case 1: memory.set(addr, value.geti64()); break; - case 2: memory.set(addr, value.geti64()); break; - case 4: memory.set(addr, value.geti64()); break; + case 1: memory.set(addr, (int8_t)value.geti64()); break; + case 2: memory.set(addr, (int16_t)value.geti64()); break; + case 4: memory.set(addr, (int32_t)value.geti64()); break; case 8: memory.set(addr, value.geti64()); break; default: abort(); } -- cgit v1.2.3 From 6f2d0dc9b17bfd7039418681bb34386c69aaed22 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:07:32 +0300 Subject: Cleanup redundant '> 0' check in src\binaryen-shell.cpp(251): warning C4804: '>': unsafe use of type 'bool' in operation --- src/binaryen-shell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index 985154ddd..182c0dfd6 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -248,7 +248,7 @@ static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm, if (wasm) { interface = new ShellExternalInterface(); instance = new ModuleInstance(*wasm, interface); - if (entry.is() > 0) { + if (entry.is()) { Function* function = wasm->functionsMap[entry]; if (!function) { std::cerr << "Unknown entry " << entry << std::endl; -- cgit v1.2.3 From 4b019795697ddd33bd66089881b351f9f0549c78 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 16:08:34 +0300 Subject: Clean up unused variables warnings: src\binaryen-shell.cpp(262): warning C4101: 'x': unreferenced local variable src\binaryen-shell.cpp(290): warning C4101: 'e': unreferenced local variable src\binaryen-shell.cpp(310): warning C4101: 'e': unreferenced local variable --- src/binaryen-shell.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index 182c0dfd6..78ff91150 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -259,7 +259,7 @@ static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm, } try { instance->callExport(entry, arguments); - } catch (ExitException& x) { + } catch (ExitException&) { } } } @@ -287,7 +287,7 @@ static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm, throw ParseException(); }) ); - } catch (const ParseException& e) { + } catch (const ParseException&) { invalid = true; } if (!invalid) { @@ -307,7 +307,7 @@ static void run_asserts(size_t* i, bool* checked, AllocatingModule* wasm, try { Invocation invocation(*curr[1], instance, *builder->get()); result = invocation.invoke(); - } catch (const TrapException& e) { + } catch (const TrapException&) { trapped = true; } if (id == ASSERT_RETURN) { -- cgit v1.2.3 From 246c58952f4f56ebc9614459b218cbc885dd13d4 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 21:33:03 +0300 Subject: Use std::numeric_limits::max() instead of 0xFFFFFFFF. --- src/support/file.cpp | 5 +++-- src/wasm-s-parser.h | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/support/file.cpp b/src/support/file.cpp index 0401ea724..da7054f7f 100644 --- a/src/support/file.cpp +++ b/src/support/file.cpp @@ -17,6 +17,7 @@ #include "support/file.h" #include +#include template T wasm::read_file(const std::string &filename, bool debug) { @@ -27,8 +28,8 @@ T wasm::read_file(const std::string &filename, bool debug) { exit(EXIT_FAILURE); } infile.seekg(0, std::ios::end); - std::streamoff insize = infile.tellg(); - if (sizeof(size_t) == 4 && insize >= 0xFFFFFFFFU) { + std::streampos insize = infile.tellg(); + if (insize >= std::numeric_limits::max()) { // Building a 32-bit executable where size_t == 32 bits, we are not able to create strings larger than 2^32 bytes in length, so must abort here. std::cerr << "Failed opening '" << filename << "': Input file too large: " << insize << " bytes. Try rebuilding in 64-bit mode." << std::endl; exit(EXIT_FAILURE); diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 4c22fb1e3..c3f32e809 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -23,6 +23,7 @@ #define wasm_wasm_s_parser_h #include +#include #include "wasm.h" #include "mixed_arena.h" @@ -825,7 +826,7 @@ private: ret->align = atoi(eq); } else if (str[0] == 'o') { uint64_t offset = atoll(eq); - if (offset > 0xffffffff) onError(); + if (offset > std::numeric_limits::max()) onError(); ret->offset = (uint32_t)offset; } else onError(); i++; -- cgit v1.2.3 From cefb6b6e05c985524e885af17160b9e146f9b088 Mon Sep 17 00:00:00 2001 From: Jukka Jylänki Date: Mon, 28 Mar 2016 21:38:54 +0300 Subject: Add missing include. # Conflicts: # src/wasm-s-parser.h --- src/wasm-s-parser.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index c3f32e809..575ceff97 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -23,6 +23,7 @@ #define wasm_wasm_s_parser_h #include +#include #include #include "wasm.h" -- cgit v1.2.3 From 5cc2c2182332cd17bf12e3cdb58e61d0582eafc1 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 28 Mar 2016 18:13:58 -0700 Subject: streampos may be signed on some platforms --- src/support/file.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/support/file.cpp b/src/support/file.cpp index da7054f7f..c93086990 100644 --- a/src/support/file.cpp +++ b/src/support/file.cpp @@ -29,12 +29,12 @@ T wasm::read_file(const std::string &filename, bool debug) { } infile.seekg(0, std::ios::end); std::streampos insize = infile.tellg(); - if (insize >= std::numeric_limits::max()) { + if (size_t(insize) >= std::numeric_limits::max()) { // Building a 32-bit executable where size_t == 32 bits, we are not able to create strings larger than 2^32 bytes in length, so must abort here. std::cerr << "Failed opening '" << filename << "': Input file too large: " << insize << " bytes. Try rebuilding in 64-bit mode." << std::endl; exit(EXIT_FAILURE); } - T input((size_t)insize + 1, '\0'); + T input(size_t(insize) + 1, '\0'); infile.seekg(0); infile.read(&input[0], insize); return input; -- cgit v1.2.3