| 227 | } |
| 228 | |
| 229 | void FuzzInputGenerator::updateFuzzInputMapAndArrayGroups( |
| 230 | std::map<unsigned, std::shared_ptr<FuzzInput>> &FuzzInputMap, |
| 231 | std::map<unsigned, std::shared_ptr<FuzzNoInput>> &FuzzNoInputMap, |
| 232 | std::vector<std::set<unsigned>> &ArrayGroups) const { |
| 233 | |
| 234 | std::set<std::shared_ptr<FuzzNoInput>> TemporalFuzzNoInputs; |
| 235 | |
| 236 | for (auto NIMIter : FuzzNoInputMap) { |
| 237 | auto NoInputDefID = NIMIter.first; |
| 238 | auto GroupIter = |
| 239 | std::find_if(ArrayGroups.begin(), ArrayGroups.end(), |
| 240 | [NoInputDefID](const std::set<unsigned> &Group) { |
| 241 | return Group.find(NoInputDefID) != Group.end(); |
| 242 | }); |
| 243 | if (GroupIter == ArrayGroups.end()) |
| 244 | continue; |
| 245 | |
| 246 | for (auto Member : *GroupIter) { |
| 247 | auto IMIter = FuzzInputMap.find(Member); |
| 248 | if (IMIter == FuzzInputMap.end()) |
| 249 | continue; |
| 250 | |
| 251 | assert(IMIter->second && "Unexpected Program State"); |
| 252 | auto NoInput = FuzzNoInputFactory().generate(IMIter->second->getDefPtr(), |
| 253 | NIMIter.first); |
| 254 | TemporalFuzzNoInputs.insert(NoInput); |
| 255 | FuzzInputMap.erase(IMIter); |
| 256 | } |
| 257 | ArrayGroups.erase(GroupIter); |
| 258 | } |
| 259 | |
| 260 | for (auto &NoInput : TemporalFuzzNoInputs) { |
| 261 | assert(NoInput && "Unexpected Program State"); |
| 262 | auto Insert = FuzzNoInputMap.emplace(NoInput->getDefID(), NoInput); |
| 263 | assert(Insert.second && "Unexpected Program State"); |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | void FuzzInputGenerator::applyArrayPolicies( |
| 268 | std::map<unsigned, std::shared_ptr<FuzzInput>> &FuzzInputMap, |