Improve refineLocation a little
commitf68eac45d28c4ec009c5b54f9797b4ab76146fa2
authorMark Williams <mwilliams@fb.com>
Fri, 8 Jun 2018 20:03:44 +0000 (8 13:03 -0700)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Mon, 11 Jun 2018 16:29:34 +0000 (11 09:29 -0700)
tree7c91023ed82e3226a02dc248dde486baf663cc39
parenta8d04e51d372155a994d05c79e8275106abe3f32
Improve refineLocation a little

Summary:
It's possible for locals to be on the equivLocs list, but have
different types. This mostly comes about because of Uninit becoming
InitNull when you load the value of a local (so eg $a = $b will
convert an Uninit $b to an InitNull).

In extreme cases we can have TCell in one local, but eg TOptObj in
another. As a result, IsTypeC; JmpZ might think that both targets are
reachable (since its just looking at a TCell), when in fact exactly
one is.

Reviewed By: jano

Differential Revision: D8290389

fbshipit-source-id: 50eda6cf92acde6a9d9b6519d919e2eb0371456d
hphp/hhbbc/interp-internal.h
hphp/hhbbc/interp.cpp