|
@@ -1,76 +0,0 @@
|
|
|
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
-From: Shu-yu Guo <[email protected]>
|
|
|
-Date: Mon, 13 May 2024 11:23:20 -0700
|
|
|
-Subject: Don't build AccessInfo for storing to module exports
|
|
|
-
|
|
|
-Bug: 340221135
|
|
|
-Change-Id: I5af35be6ebf6a69db1c4687107503575b23973c4
|
|
|
-Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5534518
|
|
|
-Reviewed-by: Adam Klein <[email protected]>
|
|
|
-Commit-Queue: Shu-yu Guo <[email protected]>
|
|
|
-Cr-Commit-Position: refs/heads/main@{#93872}
|
|
|
-
|
|
|
-diff --git a/src/compiler/access-info.cc b/src/compiler/access-info.cc
|
|
|
-index 7cff878839c85cd9c6571ee48f1a0fce081f4471..9d022ba402d7bfdd5ca745a4193ee0de0e3d755e 100644
|
|
|
---- a/src/compiler/access-info.cc
|
|
|
-+++ b/src/compiler/access-info.cc
|
|
|
-@@ -526,6 +526,14 @@ PropertyAccessInfo AccessorAccessInfoHelper(
|
|
|
- Cell::cast(module_namespace->module()->exports()->Lookup(
|
|
|
- isolate, name.object(),
|
|
|
- Smi::ToInt(Object::GetHash(*name.object())))));
|
|
|
-+ if (IsAnyStore(access_mode)) {
|
|
|
-+ // ES#sec-module-namespace-exotic-objects-set-p-v-receiver
|
|
|
-+ // ES#sec-module-namespace-exotic-objects-defineownproperty-p-desc
|
|
|
-+ //
|
|
|
-+ // Storing to a module namespace object is always an error or a no-op in
|
|
|
-+ // JS.
|
|
|
-+ return PropertyAccessInfo::Invalid(zone);
|
|
|
-+ }
|
|
|
- if (IsTheHole(cell->value(kRelaxedLoad), isolate)) {
|
|
|
- // This module has not been fully initialized yet.
|
|
|
- return PropertyAccessInfo::Invalid(zone);
|
|
|
-diff --git a/src/maglev/maglev-graph-builder.cc b/src/maglev/maglev-graph-builder.cc
|
|
|
-index 73ead492da3ee56a80ee088d9440abb2d9ae8cdd..efcdd6d2028a5e0f0ec1149925ab2e1fe5f90412 100644
|
|
|
---- a/src/maglev/maglev-graph-builder.cc
|
|
|
-+++ b/src/maglev/maglev-graph-builder.cc
|
|
|
-@@ -4001,19 +4001,28 @@ ReduceResult MaglevGraphBuilder::TryBuildPropertyStore(
|
|
|
- access_info.holder().value());
|
|
|
- }
|
|
|
-
|
|
|
-- if (access_info.IsFastAccessorConstant()) {
|
|
|
-- return TryBuildPropertySetterCall(access_info, receiver,
|
|
|
-- GetAccumulatorTagged());
|
|
|
-- } else {
|
|
|
-- DCHECK(access_info.IsDataField() || access_info.IsFastDataConstant());
|
|
|
-- ReduceResult res = TryBuildStoreField(access_info, receiver, access_mode);
|
|
|
-- if (res.IsDone()) {
|
|
|
-- RecordKnownProperty(receiver, name,
|
|
|
-- current_interpreter_frame_.accumulator(),
|
|
|
-- AccessInfoGuaranteedConst(access_info), access_mode);
|
|
|
-- return res;
|
|
|
-+ switch (access_info.kind()) {
|
|
|
-+ case compiler::PropertyAccessInfo::kFastAccessorConstant:
|
|
|
-+ return TryBuildPropertySetterCall(access_info, receiver,
|
|
|
-+ GetAccumulatorTagged());
|
|
|
-+ case compiler::PropertyAccessInfo::kDataField:
|
|
|
-+ case compiler::PropertyAccessInfo::kFastDataConstant: {
|
|
|
-+ ReduceResult res = TryBuildStoreField(access_info, receiver, access_mode);
|
|
|
-+ if (res.IsDone()) {
|
|
|
-+ RecordKnownProperty(
|
|
|
-+ receiver, name, current_interpreter_frame_.accumulator(),
|
|
|
-+ AccessInfoGuaranteedConst(access_info), access_mode);
|
|
|
-+ return res;
|
|
|
-+ }
|
|
|
-+ return ReduceResult::Fail();
|
|
|
- }
|
|
|
-- return ReduceResult::Fail();
|
|
|
-+ case compiler::PropertyAccessInfo::kInvalid:
|
|
|
-+ case compiler::PropertyAccessInfo::kNotFound:
|
|
|
-+ case compiler::PropertyAccessInfo::kDictionaryProtoDataConstant:
|
|
|
-+ case compiler::PropertyAccessInfo::kDictionaryProtoAccessorConstant:
|
|
|
-+ case compiler::PropertyAccessInfo::kModuleExport:
|
|
|
-+ case compiler::PropertyAccessInfo::kStringLength:
|
|
|
-+ UNREACHABLE();
|
|
|
- }
|
|
|
- }
|
|
|
-
|