diff options
Diffstat (limited to 'compiler/optimizing/graph_checker.cc')
-rw-r--r-- | compiler/optimizing/graph_checker.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc index e4203fe492..3d80de0e04 100644 --- a/compiler/optimizing/graph_checker.cc +++ b/compiler/optimizing/graph_checker.cc @@ -1064,6 +1064,21 @@ void GraphChecker::VisitNeg(HNeg* instruction) { } } +void GraphChecker::VisitArraySet(HArraySet* instruction) { + VisitInstruction(instruction); + + if (instruction->NeedsTypeCheck() != + instruction->GetSideEffects().Includes(SideEffects::CanTriggerGC())) { + AddError(StringPrintf( + "%s %d has a flag mismatch. An ArraySet instruction can trigger a GC iff it " + "needs a type check. Needs type check: %s, Can trigger GC: %s", + instruction->DebugName(), + instruction->GetId(), + instruction->NeedsTypeCheck() ? "true" : "false", + instruction->GetSideEffects().Includes(SideEffects::CanTriggerGC()) ? "true" : "false")); + } +} + void GraphChecker::VisitBinaryOperation(HBinaryOperation* op) { VisitInstruction(op); DataType::Type lhs_type = op->InputAt(0)->GetType(); |