diff options
Diffstat (limited to 'compiler/optimizing/graph_checker.cc')
| -rw-r--r-- | compiler/optimizing/graph_checker.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc index ef10428c0f..a7f1f74e27 100644 --- a/compiler/optimizing/graph_checker.cc +++ b/compiler/optimizing/graph_checker.cc @@ -160,6 +160,22 @@ void GraphChecker::VisitInstruction(HInstruction* instruction) { instruction->GetId())); } } + + // Ensure 'instruction' has pointers to its inputs' use entries. + for (size_t i = 0, e = instruction->InputCount(); i < e; ++i) { + HUserRecord<HInstruction*> input_record = instruction->InputRecordAt(i); + HInstruction* input = input_record.GetInstruction(); + HUseListNode<HInstruction*>* use_node = input_record.GetUseNode(); + if (use_node == nullptr || !input->GetUses().Contains(use_node)) { + AddError(StringPrintf("Instruction %s:%d has an invalid pointer to use entry " + "at input %u (%s:%d).", + instruction->DebugName(), + instruction->GetId(), + static_cast<unsigned>(i), + input->DebugName(), + input->GetId())); + } + } } void SSAChecker::VisitBasicBlock(HBasicBlock* block) { |