[vm,compiler] Do not treat unrelated DynamicInvocation flag as InstanceInvocation.FlagInvariant StreamingFlowGraphBuilder::BuildMethodInvocation handles both DynamicInvocation and InstanceInvocation nodes. BuildMethodInvocation has been reading flags field and testing kInstanceInvocationFlagInvariant bit without checking if node is InstanceInvocation, so it has been handling an unrelated DynamicInvocation flag (FlagImplicitCall) as FlagInvariant. TEST=ci Change-Id: I1e2ecbb0023bfdb393fc24c29cc8263e05198277 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407081 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc index 4f5bf18..1a227cf 100644 --- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc +++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -2817,7 +2817,10 @@ // read flags. const uint8_t flags = ReadFlags(); - const bool is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0; + bool is_invariant = false; + if (!is_dynamic) { + is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0; + } const TokenPosition position = ReadPosition(); // read position. if (p != nullptr) *p = position;