• Leszek Swirski's avatar
    [parser] Always mark shadowed vars maybe_assigned · e79751b3
    Leszek Swirski authored
    If there was an assignment to a maybe-shadowing dynamic variable,
    then the shadowing variable would be marked maybe_assigned, but the
    maybe-shadowed variable would stay unchanged. This meant that in
    non-shadowing cases, the not-actually-shadowed variable would have
    the wrong maybe_assigned state, and e.g. would break context
    specialization.
    
    This patch pessimistically unconditionally sets maybe_assigned on
    variables shadowed by a dynamic variable in a `with` scope. This
    marking can cause false positives and sub-optimal optimization for
    some functions with 'with' blocks, but it's also the simplest fix
    for this issue which doesn't affect performance in the common case
    of no 'with' blocks.
    
    Bug: v8:9394
    Change-Id: I6924bd7d48dda61232aa9d72c39df1c76c665c67
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1678365
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Auto-Submit: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#62407}
    e79751b3
scopes.cc 89.3 KB