Skip to content

Commit b3c01ac

Browse files
sygV8 LUCI CQ
authored andcommitted
[compiler] 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}
1 parent 473318d commit b3c01ac

2 files changed

Lines changed: 29 additions & 12 deletions

File tree

src/compiler/access-info.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,14 @@ PropertyAccessInfo AccessorAccessInfoHelper(
527527
Cell::cast(module_namespace->module()->exports()->Lookup(
528528
isolate, name.object(),
529529
Smi::ToInt(Object::GetHash(*name.object())))));
530+
if (IsAnyStore(access_mode)) {
531+
// ES#sec-module-namespace-exotic-objects-set-p-v-receiver
532+
// ES#sec-module-namespace-exotic-objects-defineownproperty-p-desc
533+
//
534+
// Storing to a module namespace object is always an error or a no-op in
535+
// JS.
536+
return PropertyAccessInfo::Invalid(zone);
537+
}
530538
if (IsTheHole(cell->value(kRelaxedLoad), isolate)) {
531539
// This module has not been fully initialized yet.
532540
return PropertyAccessInfo::Invalid(zone);

src/maglev/maglev-graph-builder.cc

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4169,19 +4169,28 @@ ReduceResult MaglevGraphBuilder::TryBuildPropertyStore(
41694169
access_info.holder().value());
41704170
}
41714171

4172-
if (access_info.IsFastAccessorConstant()) {
4173-
return TryBuildPropertySetterCall(access_info, receiver,
4174-
GetAccumulatorTagged());
4175-
} else {
4176-
DCHECK(access_info.IsDataField() || access_info.IsFastDataConstant());
4177-
ReduceResult res = TryBuildStoreField(access_info, receiver, access_mode);
4178-
if (res.IsDone()) {
4179-
RecordKnownProperty(receiver, name,
4180-
current_interpreter_frame_.accumulator(),
4181-
AccessInfoGuaranteedConst(access_info), access_mode);
4182-
return res;
4172+
switch (access_info.kind()) {
4173+
case compiler::PropertyAccessInfo::kFastAccessorConstant:
4174+
return TryBuildPropertySetterCall(access_info, receiver,
4175+
GetAccumulatorTagged());
4176+
case compiler::PropertyAccessInfo::kDataField:
4177+
case compiler::PropertyAccessInfo::kFastDataConstant: {
4178+
ReduceResult res = TryBuildStoreField(access_info, receiver, access_mode);
4179+
if (res.IsDone()) {
4180+
RecordKnownProperty(
4181+
receiver, name, current_interpreter_frame_.accumulator(),
4182+
AccessInfoGuaranteedConst(access_info), access_mode);
4183+
return res;
4184+
}
4185+
return ReduceResult::Fail();
41834186
}
4184-
return ReduceResult::Fail();
4187+
case compiler::PropertyAccessInfo::kInvalid:
4188+
case compiler::PropertyAccessInfo::kNotFound:
4189+
case compiler::PropertyAccessInfo::kDictionaryProtoDataConstant:
4190+
case compiler::PropertyAccessInfo::kDictionaryProtoAccessorConstant:
4191+
case compiler::PropertyAccessInfo::kModuleExport:
4192+
case compiler::PropertyAccessInfo::kStringLength:
4193+
UNREACHABLE();
41854194
}
41864195
}
41874196

0 commit comments

Comments
 (0)