aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library.js9
-rwxr-xr-xtests/runner.py15
2 files changed, 23 insertions, 1 deletions
diff --git a/src/library.js b/src/library.js
index 51921541..79f1c285 100644
--- a/src/library.js
+++ b/src/library.js
@@ -2822,7 +2822,14 @@ LibraryManager.library = {
prefix = flagAlternative ? '0x' : '';
#if PRECISE_I64_MATH
if (argSize == 8 && i64Math) {
- argText = (origArg[1] ? (origArg[1]>>>0).toString(16) : '') + (origArg[0]>>>0).toString(16);
+ if (origArg[1]) {
+ argText = (origArg[1]>>>0).toString(16);
+ var lower = (origArg[0]>>>0).toString(16);
+ while (lower.length < 8) lower = '0' + lower;
+ argText += lower;
+ } else {
+ argText = (origArg[0]>>>0).toString(16);
+ }
} else
#endif
if (currArg < 0) {
diff --git a/tests/runner.py b/tests/runner.py
index a5eb7ede..b93300d5 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -5254,6 +5254,8 @@ at function.:blag
self.do_run(src, re.sub('(^|\n)\s+', '\\1', expected))
def test_vsnprintf(self):
+ if self.emcc_args is None: return self.skip('needs i64 math')
+
src = r'''
#include <stdio.h>
#include <stdarg.h>
@@ -5279,6 +5281,17 @@ at function.:blag
printy("0x%llx_0x%llx", y, x);
printy("0x%llx_0x%llx", y, y);
+ {
+ uint64_t A = 0x800000;
+ uint64_t B = 0x800000000000ULL;
+ printy("0x%llx_0x%llx", A, B);
+ }
+ {
+ uint64_t A = 0x800;
+ uint64_t B = 0x12340000000000ULL;
+ printy("0x%llx_0x%llx", A, B);
+ }
+
return 0;
}
'''
@@ -5286,6 +5299,8 @@ at function.:blag
0x0_0x0
0x400000_0x0
0x400000_0x400000
+0x800000_0x800000000000
+0x800_0x12340000000000
''')
def test_printf_more(self):