diff options
author | dglead <none@none> | 2010-12-28 19:52:41 -0800 |
---|---|---|
committer | dglead <none@none> | 2010-12-28 19:52:41 -0800 |
commit | 5b7fda278c5f613835ea1a84ef0b39baa4e87936 (patch) | |
tree | 682978497f717168389bbc865a8da6f2d0e214d4 | |
parent | 27c9f996cfc6a4e8a3e03630588ab68349fe4d17 (diff) |
handle memmove of 0
-rw-r--r-- | src/preamble.js | 1 | ||||
-rw-r--r-- | tests/runner.py | 3 |
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]); |