aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordglead <none@none>2010-12-28 19:52:41 -0800
committerdglead <none@none>2010-12-28 19:52:41 -0800
commit5b7fda278c5f613835ea1a84ef0b39baa4e87936 (patch)
tree682978497f717168389bbc865a8da6f2d0e214d4
parent27c9f996cfc6a4e8a3e03630588ab68349fe4d17 (diff)
handle memmove of 0
-rw-r--r--src/preamble.js1
-rw-r--r--tests/runner.py3
2 files changed, 4 insertions, 0 deletions
diff --git a/src/preamble.js b/src/preamble.js
index 8c954d0d..4eb99d18 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -388,6 +388,7 @@ _memcpy = _llvm_memcpy_i64 = _llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_p0i8_p0i8
function _llvm_memmove_i32(dest, src, num, idunno) {
// not optimized!
+ if (num === 0) return; // will confuse malloc if 0
var tmp = _malloc(num);
_memcpy(tmp, src, num);
_memcpy(dest, tmp, num);
diff --git a/tests/runner.py b/tests/runner.py
index ef6f024d..56add2db 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -385,6 +385,9 @@ if 'benchmark' not in sys.argv:
int main(int argc, char **argv)
{
+ int x = 5, y = 9, magic = 7; // fool compiler with magic
+ memmove(&x, &y, magic-7); // 0 should not crash us
+
printf("*%d\\n", argc);
puts(argv[1]);
puts(argv[2]);