[vm/interpreter] Cleanup stack slot in Interpreter::InterfaceCall

The stack slot in question may contain a stale value, but it could
be scanned by GC, so the fix is to clean it up even if it looks
unused.

While debugging I saw bytecode PCs in that stack slot.
So it is likely that compact bytecode instructions (68de4775351d0e3e1ec8b5860068733c342f7f4e)
increased the probability of these crashes, as with compact bytecodes
PCs could be unaligned and treated as Dart objects by GC, while
previously PCs were always aligned and treated as Smis by GC,
effectively masking the failure.

Fixes https://github.com/dart-lang/sdk/issues/36909

Change-Id: I82ccaa2bd87aca4ca4b44c9db69b0efd18dad955
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102061
Reviewed-by: RĂ©gis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index e8f1419..3307d3e 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -743,6 +743,7 @@
   RawFunction* target;
   if (UNLIKELY(!lookup_cache_.Lookup(receiver_cid, target_name, &target))) {
     // Table lookup miss.
+    top[0] = 0;  // Clean up slot as it may be visited by GC.
     top[1] = call_base[receiver_idx];
     top[2] = target_name;
     top[3] = argdesc_;