void checkReadValuesImpl(Result expected_result, ReadSet expected, Result result, ReadSet* rs) { TS_ASSERT_EQUALS(expected_result, result); if ((result != OH::Storage::SUCCESS) || (expected_result != OH::Storage::SUCCESS)) return; if (!rs) { TS_ASSERT_EQUALS(expected.size(), 0); return; } TS_ASSERT_EQUALS(expected.size(), rs->size()); for(ReadSet::iterator it = expected.begin(); it != expected.end(); it++) { String key = it->first; String value = it->second; TS_ASSERT(rs->find(key) != rs->end()); TS_ASSERT_EQUALS((*rs)[key], value); } }
static void removeWrittenTo(AliasAnalysis *AA, ReadSet &Reads, SILInstruction *ByInst) { // We can ignore retains, cond_fails, and dealloc_stacks. if (isa<StrongRetainInst>(ByInst) || isa<RetainValueInst>(ByInst) || isa<CondFailInst>(ByInst) || isa<DeallocStackInst>(ByInst)) return; SmallVector<SILInstruction *, 8> RS(Reads.begin(), Reads.end()); for (auto R : RS) { auto *LI = dyn_cast<LoadInst>(R); if (LI && !AA->mayWriteToMemory(ByInst, LI->getOperand())) continue; DEBUG(llvm::dbgs() << " mayWriteTo\n" << *ByInst << " to " << *R << "\n"); Reads.erase(R); } }