[asm.js] Fix handling of bogus code after export statement.
This makes the asm.js validator reject source with trailing expressions after the module exporting return statement. Most of the time trailing statements would not affect semantics, since they are unreachable. In some cases we might hide an expected ReferenceError tough. R=leszeks@chromium.org TEST=mjsunit/regress/regress-crbug-934138 BUG=chromium:934138 Change-Id: I790366204f5e9c943715a065b5229f2442e2c86e Reviewed-on: https://chromium-review.googlesource.com/c/1481216 Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#59766}
This commit is contained in:
parent
285519582b
commit
cc787e174e
@ -353,6 +353,8 @@ void AsmJsParser::ValidateModule() {
|
||||
RECURSE(ValidateFunctionTable());
|
||||
}
|
||||
RECURSE(ValidateExport());
|
||||
RECURSE(SkipSemicolon());
|
||||
EXPECT_TOKEN('}');
|
||||
|
||||
// Check that all functions were eventually defined.
|
||||
for (auto& info : global_var_info_) {
|
||||
|
@ -2,4 +2,4 @@
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
*%(basename)s:12: Invalid asm.js: Undefined function
|
||||
*%(basename)s:13: Invalid asm.js: Undefined function
|
||||
|
@ -2,4 +2,4 @@
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
*%(basename)s:13: Invalid asm.js: Undefined function table
|
||||
*%(basename)s:14: Invalid asm.js: Undefined function table
|
||||
|
@ -377,6 +377,7 @@
|
||||
'regress/regress-6700': [SKIP],
|
||||
'regress/regress-6838-2': [SKIP],
|
||||
'regress/regress-6838-3': [SKIP],
|
||||
'regress/regress-crbug-934138': [SKIP],
|
||||
|
||||
# Timeouts in lite / jitless mode.
|
||||
'asm/embenchen/*': [SKIP],
|
||||
|
38
test/mjsunit/regress/regress-crbug-934138.js
Normal file
38
test/mjsunit/regress/regress-crbug-934138.js
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright 2019 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Flags: --allow-natives-syntax
|
||||
|
||||
(function TestTrailingJunkAfterExport() {
|
||||
function Module() {
|
||||
"use asm";
|
||||
function f() {}
|
||||
return {f: f}
|
||||
%kaboom;
|
||||
}
|
||||
assertThrows(() => Module(), ReferenceError);
|
||||
assertFalse(%IsAsmWasmCode(Module));
|
||||
})();
|
||||
|
||||
(function TestExportWithSemicolon() {
|
||||
function Module() {
|
||||
"use asm";
|
||||
function f() {}
|
||||
return {f: f};
|
||||
// appreciate the semicolon
|
||||
}
|
||||
assertDoesNotThrow(() => Module());
|
||||
assertTrue(%IsAsmWasmCode(Module));
|
||||
})();
|
||||
|
||||
(function TestExportWithoutSemicolon() {
|
||||
function Module() {
|
||||
"use asm";
|
||||
function f() {}
|
||||
return {f: f}
|
||||
// appreciate the nothingness
|
||||
}
|
||||
assertDoesNotThrow(() => Module());
|
||||
assertTrue(%IsAsmWasmCode(Module));
|
||||
})();
|
Loading…
Reference in New Issue
Block a user