• Seth Brenith's avatar
    [torque] Strict verification of abstract types · 50d474a2
    Seth Brenith authored
    Originally, the Torque-generated verifier for a field with type
    Undefined|Zero|NonNullForeign would check `f.IsUndefined() || f.IsZero()
    || f.IsNonNullForeign()`. At some point, we changed Torque so that it
    now generates the much weaker `f.IsOddball() || f.IsSmi() ||
    f.IsForeign()`. This change returns the verifiers to their initial
    precision. Mostly we can use the names of abstract types to build up the
    correct type check expression, but a few abstract types like
    PodArrayOfWasmValueType have no way that we can tell them apart from
    their parent type at runtime. It would be confusing to have a function
    Object::IsPodArrayOfWasmValueType which actually just checks whether the
    object is a ByteArray, so this change introduces a new annotation which
    allows abstract type declarations to state that they should use their
    parent type during verification.
    
    This change also adds new test cases to help avoid future regressions of
    this logic.
    
    Bug: v8:7793
    Change-Id: Ie5046d742fd45e0e0f6c2ba387d909e9f2ac6df1
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2469960Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
    Cr-Commit-Position: refs/heads/master@{#70698}
    50d474a2
types.cc 42.9 KB