• Caitlin Potter's avatar
    [runtime] perform type conversion earlier in IntegerIndexedElementSet · 6c585ef0
    Caitlin Potter authored
    When storing an indexed property in a typed array, it's necessary to
    convert the value to a Number (or to a Bigint) before performing the
    bounds check, per
    https://tc39.github.io/ecma262/#sec-integerindexedelementset.
    
    This CL adds appropriate type conversions in
    Object::SetPropertyInternal (which technically is reached after the
    bounds check has already occurred, but this isn't observable yet ---
    In the future, once OOB accesses on TypedArrays actually throw, this
    will need to be refactored again), and in StoreFastElementStub, and
    ElementsTransitionAndStoreStub (via CSA::EmitElementStore).
    
    The change was not necessary in TurboFan, as
    JSNativeContextSpecialization already performs the value conversion
    before the boundscheck.
    
    The result is some fixed test262 tests, and some new test coverage
    for this behaviour in mjsunit.
    
    BUG=v8:7896, v8:5327
    R=neis@chromium.org, jkummerow@chromium.org, gsathya@chromium.org
    
    Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng
    Change-Id: Ibe6bec24c72ef6a4fd3e77d5bcafa03737f4c5e3
    Reviewed-on: https://chromium-review.googlesource.com/1117372
    Commit-Queue: Caitlin Potter <caitp@igalia.com>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#54096}
    6c585ef0
Name
Last commit
Last update
..
debug-promises Loading commit data...
regress Loading commit data...
arguments-iterator.js Loading commit data...
array-concat-revoked-proxy-1.js Loading commit data...
array-concat-revoked-proxy-2.js Loading commit data...
array-concat.js Loading commit data...
array-copywithin.js Loading commit data...
array-fill.js Loading commit data...
array-find.js Loading commit data...
array-findindex.js Loading commit data...
array-from.js Loading commit data...
array-iterator-detached.js Loading commit data...
array-iterator-turbo.js Loading commit data...
array-iterator.js Loading commit data...
array-length.js Loading commit data...
array-of.js Loading commit data...
array-prototype-values.js Loading commit data...
array-reverse-order.js Loading commit data...
array-species-constructor-accessor.js Loading commit data...
array-species-constructor-delete.js Loading commit data...
array-species-constructor.js Loading commit data...
array-species-delete.js Loading commit data...
array-species-modified.js Loading commit data...
array-species-neg-zero.js Loading commit data...
array-species-parent-constructor.js Loading commit data...
array-species-proto.js Loading commit data...
array-species.js Loading commit data...
array-tostring.js Loading commit data...
arraybuffer-species.js Loading commit data...
arrow-functions-lexical-arguments.js Loading commit data...
arrow-functions-this.js Loading commit data...
arrow-functions.js Loading commit data...
arrow-rest-params-lazy-parsing.js Loading commit data...
arrow-rest-params.js Loading commit data...
block-conflicts-sloppy.js Loading commit data...
block-conflicts.js Loading commit data...
block-const-assign-sloppy.js Loading commit data...
block-const-assign.js Loading commit data...
block-eval-var-over-let.js Loading commit data...
block-for-sloppy.js Loading commit data...
block-for.js Loading commit data...
block-leave-sloppy.js Loading commit data...
block-leave.js Loading commit data...
block-let-contextual-sloppy.js Loading commit data...
block-let-crankshaft-sloppy.js Loading commit data...
block-let-crankshaft.js Loading commit data...
block-let-declaration-sloppy.js Loading commit data...
block-let-declaration.js Loading commit data...
block-let-semantics-sloppy.js Loading commit data...
block-let-semantics.js Loading commit data...
block-scope-class.js Loading commit data...
block-scoping-sloppy.js Loading commit data...
block-scoping-top-level-sloppy.js Loading commit data...
block-scoping-top-level.js Loading commit data...
block-scoping.js Loading commit data...
block-sloppy-function.js Loading commit data...
built-in-accessor-names.js Loading commit data...
call-with-spread-modify-array-iterator.js Loading commit data...
call-with-spread-modify-next.js Loading commit data...
call-with-spread.js Loading commit data...
catch-parameter-redeclaration.js Loading commit data...
class-computed-property-names-super.js Loading commit data...
class-property-name-eval-arguments.js Loading commit data...
classes-derived-return-type.js Loading commit data...
classes-experimental.js Loading commit data...
classes-lazy-parsing.js Loading commit data...
classes-maps.js Loading commit data...
classes-proxy.js Loading commit data...
classes-subclass-arrays.js Loading commit data...
classes-subclass-builtins.js Loading commit data...
classes-super.js Loading commit data...
classes.js Loading commit data...
collection-iterator.js Loading commit data...
collections-constructor-custom-iterator.js Loading commit data...
collections-constructor-iterator-side-effect.js Loading commit data...
collections-constructor-with-modified-array-prototype.js Loading commit data...
collections-constructor-with-modified-protoype.js Loading commit data...
collections.js Loading commit data...
completion.js Loading commit data...
computed-property-names-classes.js Loading commit data...
computed-property-names-deopt.js Loading commit data...
computed-property-names-object-literals-methods.js Loading commit data...
computed-property-names-super.js Loading commit data...
computed-property-names.js Loading commit data...
dataview-length.js Loading commit data...
default-parameters-destructuring.js Loading commit data...
default-parameters.js Loading commit data...
destructuring-assignment-lazy.js Loading commit data...
destructuring-assignment.js Loading commit data...
destructuring-parameters-literalcount-nolazy.js Loading commit data...
destructuring-parameters-literalcount.js Loading commit data...
destructuring.js Loading commit data...
empty-for.js Loading commit data...
for-each-in-catch.js Loading commit data...
for-of.js Loading commit data...
function-length-configurable.js Loading commit data...
function-name-configurable.js Loading commit data...
function-name.js Loading commit data...
function-prototype-name.js Loading commit data...
generator-destructuring.js Loading commit data...
generators-iteration.js Loading commit data...
generators-objects.js Loading commit data...
generators-parsing.js Loading commit data...
generators-poisoned-properties.js Loading commit data...
generators-runtime.js Loading commit data...
generators-states.js Loading commit data...
global-proto-proxy.js Loading commit data...
hasinstance-symbol.js Loading commit data...
indexed-integer-exotics.js Loading commit data...
instanceof-proxies.js Loading commit data...
instanceof.js Loading commit data...
iteration-semantics.js Loading commit data...
iteration-syntax.js Loading commit data...
iterator-close.js Loading commit data...
iterator-prototype.js Loading commit data...
json.js Loading commit data...
map-constructor-entry-side-effect.js Loading commit data...
map-constructor-entry-side-effect2.js Loading commit data...
map-constructor-entry-side-effect3.js Loading commit data...
map-constructor-entry-side-effect4.js Loading commit data...
map-minus-zero.js Loading commit data...
math-cbrt.js Loading commit data...
math-clz32.js Loading commit data...
math-expm1.js Loading commit data...
math-fround.js Loading commit data...
math-hyperbolic.js Loading commit data...
math-hypot.js Loading commit data...
math-log1p.js Loading commit data...
math-log2-log10.js Loading commit data...
math-sign.js Loading commit data...
math-trunc.js Loading commit data...
math.js Loading commit data...
method-name-eval-arguments.js Loading commit data...
microtask-delivery.js Loading commit data...
new-target.js Loading commit data...
numeric-literals.js Loading commit data...
object-assign.js Loading commit data...
object-literals-method.js Loading commit data...
object-literals-property-shorthand.js Loading commit data...
object-literals-super.js Loading commit data...
object-tostring.js Loading commit data...
pattern-brand-check.js Loading commit data...
promise-all-overflow-1.js Loading commit data...
promise-all-overflow-2.js Loading commit data...
promise-all.js Loading commit data...
promise-internal-setter.js Loading commit data...
promise-lookup-getter-setter.js Loading commit data...
promise-resolve-thenable-job.js Loading commit data...
promise-species.js Loading commit data...
promise-thenable-proxy.js Loading commit data...
promises.js Loading commit data...
prototype-ordinary-objects.js Loading commit data...
proxies-accesschecks.js Loading commit data...
proxies-apply.js Loading commit data...
proxies-bind.js Loading commit data...
proxies-construct.js Loading commit data...
proxies-constructor.js Loading commit data...
proxies-cross-realm-exception.js Loading commit data...
proxies-define-property.js Loading commit data...
proxies-delete-property.js Loading commit data...
proxies-example-membrane.js Loading commit data...
proxies-for.js Loading commit data...
proxies-function.js Loading commit data...
proxies-get-own-property-descriptor.js Loading commit data...
proxies-get-prototype-of.js Loading commit data...
proxies-get.js Loading commit data...
proxies-global-reference.js Loading commit data...
proxies-has-own-property.js Loading commit data...
proxies-has.js Loading commit data...
proxies-hash.js Loading commit data...
proxies-integrity.js Loading commit data...
proxies-is-extensible.js Loading commit data...
proxies-json.js Loading commit data...
proxies-keys.js Loading commit data...
proxies-object-assign.js Loading commit data...
proxies-ownkeys.js Loading commit data...
proxies-prevent-extensions.js Loading commit data...
proxies-property-is-enumerable.js Loading commit data...
proxies-prototype-handler-stackoverflow.js Loading commit data...
proxies-prototype-target-stackoverflow.js Loading commit data...
proxies-revocable.js Loading commit data...
proxies-set-prototype-of.js Loading commit data...
proxies-set.js Loading commit data...
proxies-with-unscopables.js Loading commit data...
proxies-with.js Loading commit data...
proxies.js Loading commit data...
proxy-function-tostring.js Loading commit data...
reflect-apply.js Loading commit data...
reflect-construct.js Loading commit data...
reflect-define-property.js Loading commit data...
reflect-get-own-property-descriptor.js Loading commit data...
reflect-get-prototype-of.js Loading commit data...
reflect-own-keys.js Loading commit data...
reflect-prevent-extensions.js Loading commit data...
reflect-set-prototype-of.js Loading commit data...
reflect.js Loading commit data...
regexp-constructor.js Loading commit data...
regexp-flags.js Loading commit data...
regexp-match-lastindex.js Loading commit data...
regexp-prototype.js Loading commit data...
regexp-replace-lastindex.js Loading commit data...
regexp-sticky.js Loading commit data...
regexp-tolength.js Loading commit data...
regexp-tostring.js Loading commit data...
rest-params-lazy-parsing.js Loading commit data...
rest-params.js Loading commit data...
set-minus-zero.js Loading commit data...
sloppy-no-duplicate-generators.js Loading commit data...
sloppy-restrictive-block-function.js Loading commit data...
species.js Loading commit data...
spread-array-misc.js Loading commit data...
spread-array-mutated-prototype.js Loading commit data...
spread-array-pristine-prototype.js Loading commit data...
spread-array-prototype-proxy.js Loading commit data...
spread-array-prototype-setter1.js Loading commit data...
spread-array-prototype-setter2.js Loading commit data...
spread-call-new-class.js Loading commit data...
spread-call-new.js Loading commit data...
spread-call-super-property.js Loading commit data...
spread-call.js Loading commit data...
string-codepointat.js Loading commit data...
string-endswith.js Loading commit data...
string-fromcodepoint.js Loading commit data...
string-html.js Loading commit data...
string-includes.js Loading commit data...
string-iterator.js Loading commit data...
string-match.js Loading commit data...
string-raw.js Loading commit data...
string-repeat.js Loading commit data...
string-replace.js Loading commit data...
string-search.js Loading commit data...
string-split.js Loading commit data...
string-startswith.js Loading commit data...
super-with-spread-modify-array-iterator.js Loading commit data...
super-with-spread-modify-next.js Loading commit data...
super-with-spread.js Loading commit data...
super.js Loading commit data...
symbols.js Loading commit data...
templates.js Loading commit data...
throw-type-error-function-restrictions.js Loading commit data...
typed-array-iterator.js Loading commit data...
typedarray-construct-by-array-like-prototype-element-added.js Loading commit data...
typedarray-construct-by-array-like.js Loading commit data...
typedarray-construct-by-buffer-ordering.js Loading commit data...
typedarray-construct-offset-not-smi.js Loading commit data...
typedarray-copywithin.js Loading commit data...
typedarray-every.js Loading commit data...
typedarray-fill.js Loading commit data...
typedarray-filter.js Loading commit data...
typedarray-find.js Loading commit data...
typedarray-findindex.js Loading commit data...
typedarray-foreach.js Loading commit data...
typedarray-from.js Loading commit data...
typedarray-indexing.js Loading commit data...
typedarray-iteration.js Loading commit data...
typedarray-keyedstore-tonumber.js Loading commit data...
typedarray-map.js Loading commit data...
typedarray-neutered.js Loading commit data...
typedarray-of.js Loading commit data...
typedarray-proto.js Loading commit data...
typedarray-reduce.js Loading commit data...
typedarray-reverse.js Loading commit data...
typedarray-set-bytelength-not-smi.js Loading commit data...
typedarray-set-length-internal.js Loading commit data...
typedarray-set-length.js Loading commit data...
typedarray-slice.js Loading commit data...
typedarray-sort.js Loading commit data...
typedarray-species.js Loading commit data...
typedarray-tostring.js Loading commit data...
typedarray.js Loading commit data...
unicode-character-ranges.js Loading commit data...
unicode-escapes-in-regexps.js Loading commit data...
unicode-escapes.js Loading commit data...
unicode-regexp-backrefs.js Loading commit data...
unicode-regexp-ignore-case-noi18n.js Loading commit data...
unicode-regexp-ignore-case.js Loading commit data...
unicode-regexp-last-index.js Loading commit data...
unicode-regexp-restricted-syntax.js Loading commit data...
unicode-regexp-unanchored-advance.js Loading commit data...
unicode-regexp-zero-length.js Loading commit data...
unscopables.js Loading commit data...