mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 05:48:26 +00:00
Bug 1416766: Int64 wasm globals should cause a link failure at instanciation time, not compile time; r=luke
MozReview-Commit-ID: 5Ryl47naf9R --HG-- extra : rebase_source : 742df9347c1a3492f638592436e113922ce46784
This commit is contained in:
parent
5ced9d1b55
commit
d380ec393f
@ -228,8 +228,13 @@ testInitExpr('f64', 13.37, 0.1989, x => +x);
|
||||
|
||||
// Int64.
|
||||
{
|
||||
wasmFailValidateText(`(module (import "globals" "x" (global i64)))`, /can't import.* an Int64 global/);
|
||||
wasmFailValidateText(`(module (global i64 (i64.const 42)) (export "" global 0))`, /can't .*export an Int64 global/);
|
||||
let module = new WebAssembly.Module(wasmTextToBinary(`(module (import "globals" "x" (global i64)))`));
|
||||
assertErrorMessage(() => new WebAssembly.Instance(module, {globals: {x:42}}),
|
||||
WebAssembly.LinkError,
|
||||
/cannot pass i64 to or from JS/);
|
||||
|
||||
module = new WebAssembly.Module(wasmTextToBinary(`(module (global i64 (i64.const 42)) (export "" global 0))`));
|
||||
assertErrorMessage(() => new WebAssembly.Instance(module), WebAssembly.LinkError, /cannot pass i64 to or from JS/);
|
||||
|
||||
setJitCompilerOption('wasm.test-mode', 1);
|
||||
testInner('i64', '0x531642753864975F', '0x123456789abcdef0', createI64, assertEqI64);
|
||||
|
@ -366,6 +366,7 @@ MSG_DEF(JSMSG_WASM_BAD_IMPORT_SIG, 2, JSEXN_WASMLINKERROR, "imported functio
|
||||
MSG_DEF(JSMSG_WASM_BAD_IMP_SIZE, 1, JSEXN_WASMLINKERROR, "imported {0} with incompatible size")
|
||||
MSG_DEF(JSMSG_WASM_BAD_IMP_MAX, 1, JSEXN_WASMLINKERROR, "imported {0} with incompatible maximum size")
|
||||
MSG_DEF(JSMSG_WASM_BAD_FIT, 2, JSEXN_WASMLINKERROR, "{0} segment does not fit in {1}")
|
||||
MSG_DEF(JSMSG_WASM_BAD_I64_LINK, 0, JSEXN_WASMLINKERROR, "cannot pass i64 to or from JS")
|
||||
MSG_DEF(JSMSG_WASM_IND_CALL_TO_NULL, 0, JSEXN_WASMRUNTIMEERROR, "indirect call to null")
|
||||
MSG_DEF(JSMSG_WASM_IND_CALL_BAD_SIG, 0, JSEXN_WASMRUNTIMEERROR, "indirect call signature mismatch")
|
||||
MSG_DEF(JSMSG_WASM_UNREACHABLE, 0, JSEXN_WASMRUNTIMEERROR, "unreachable executed")
|
||||
@ -384,7 +385,7 @@ MSG_DEF(JSMSG_WASM_BAD_ELEMENT, 0, JSEXN_TYPEERR, "\"element\" proper
|
||||
MSG_DEF(JSMSG_WASM_BAD_IMPORT_ARG, 0, JSEXN_TYPEERR, "second argument must be an object")
|
||||
MSG_DEF(JSMSG_WASM_BAD_IMPORT_FIELD, 1, JSEXN_TYPEERR, "import object field '{0}' is not an Object")
|
||||
MSG_DEF(JSMSG_WASM_BAD_TABLE_VALUE, 0, JSEXN_TYPEERR, "can only assign WebAssembly exported functions to Table")
|
||||
MSG_DEF(JSMSG_WASM_BAD_I64, 0, JSEXN_TYPEERR, "cannot pass i64 to or from JS")
|
||||
MSG_DEF(JSMSG_WASM_BAD_I64_TYPE, 0, JSEXN_TYPEERR, "cannot pass i64 to or from JS")
|
||||
MSG_DEF(JSMSG_WASM_NO_TRANSFER, 0, JSEXN_TYPEERR, "cannot transfer WebAssembly/asm.js ArrayBuffer")
|
||||
MSG_DEF(JSMSG_WASM_STREAM_ERROR, 0, JSEXN_TYPEERR, "stream error during WebAssembly compilation")
|
||||
MSG_DEF(JSMSG_WASM_TEXT_FAIL, 1, JSEXN_SYNTAXERR, "wasm text error: {0}")
|
||||
|
@ -150,7 +150,7 @@ Instance::callImport(JSContext* cx, uint32_t funcImportIndex, unsigned argc, con
|
||||
break;
|
||||
case ValType::I64: {
|
||||
if (!JitOptions.wasmTestMode) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64);
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_TYPE);
|
||||
return false;
|
||||
}
|
||||
RootedObject obj(cx, CreateI64Object(cx, *(int64_t*)&argv[i]));
|
||||
@ -180,7 +180,7 @@ Instance::callImport(JSContext* cx, uint32_t funcImportIndex, unsigned argc, con
|
||||
|
||||
// Throw an error if returning i64 and not in test mode.
|
||||
if (!JitOptions.wasmTestMode && fi.sig().ret() == ExprType::I64) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64);
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_TYPE);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -611,7 +611,7 @@ Instance::callExport(JSContext* cx, uint32_t funcIndex, CallArgs args)
|
||||
break;
|
||||
case ValType::I64:
|
||||
if (!JitOptions.wasmTestMode) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64);
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_TYPE);
|
||||
return false;
|
||||
}
|
||||
if (!ReadI64Object(cx, v, (int64_t*)&exportArgs[i]))
|
||||
@ -722,7 +722,7 @@ Instance::callExport(JSContext* cx, uint32_t funcIndex, CallArgs args)
|
||||
break;
|
||||
case ExprType::I64:
|
||||
if (!JitOptions.wasmTestMode) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64);
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_TYPE);
|
||||
return false;
|
||||
}
|
||||
retObj = CreateI64Object(cx, *(int64_t*)retAddr);
|
||||
|
@ -288,7 +288,10 @@ GetImports(JSContext* cx,
|
||||
break;
|
||||
}
|
||||
case ValType::I64: {
|
||||
MOZ_ASSERT(JitOptions.wasmTestMode, "no int64 in JS");
|
||||
if (!JitOptions.wasmTestMode) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_LINK);
|
||||
return false;
|
||||
}
|
||||
int64_t i64;
|
||||
if (!ReadI64Object(cx, v, &i64))
|
||||
return false;
|
||||
|
@ -1019,7 +1019,10 @@ GetGlobalExport(JSContext* cx, const GlobalDescVector& globals, uint32_t globalI
|
||||
return true;
|
||||
}
|
||||
case ValType::I64: {
|
||||
MOZ_ASSERT(JitOptions.wasmTestMode, "no int64 in asm.js/wasm");
|
||||
if (!JitOptions.wasmTestMode) {
|
||||
JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_WASM_BAD_I64_LINK);
|
||||
return false;
|
||||
}
|
||||
RootedObject obj(cx, CreateI64Object(cx, val.i64()));
|
||||
if (!obj)
|
||||
return false;
|
||||
|
@ -928,10 +928,7 @@ GlobalIsJSCompatible(Decoder& d, ValType type, bool isMutable)
|
||||
case ValType::I32:
|
||||
case ValType::F32:
|
||||
case ValType::F64:
|
||||
break;
|
||||
case ValType::I64:
|
||||
if (!jit::JitOptions.wasmTestMode)
|
||||
return d.fail("can't import/export an Int64 global to JS");
|
||||
break;
|
||||
default:
|
||||
return d.fail("unexpected variable type in global import/export");
|
||||
|
Loading…
x
Reference in New Issue
Block a user