Skip to content

Commit 00e5314

Browse files
alexmarkovCommit Queue
authored andcommitted
[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 <[email protected]> Commit-Queue: Alexander Markov <[email protected]>
1 parent 938d9c0 commit 00e5314

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2817,7 +2817,10 @@ Fragment StreamingFlowGraphBuilder::BuildMethodInvocation(TokenPosition* p,
28172817

28182818
// read flags.
28192819
const uint8_t flags = ReadFlags();
2820-
const bool is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0;
2820+
bool is_invariant = false;
2821+
if (!is_dynamic) {
2822+
is_invariant = (flags & kInstanceInvocationFlagInvariant) != 0;
2823+
}
28212824

28222825
const TokenPosition position = ReadPosition(); // read position.
28232826
if (p != nullptr) *p = position;

0 commit comments

Comments
 (0)