Skip to content

Commit 0daba8d

Browse files
committed
[llvm][FuzzMutate] Generalize test function to receive multiple module verifiers.
1 parent c5b2a5b commit 0daba8d

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

llvm/unittests/FuzzMutate/StrategiesTest.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,30 +89,32 @@ void IterateOnSource(StringRef Source, IRMutator &Mutator) {
8989
}
9090
}
9191

92+
using ModuleVerifier = std::function<void(Module &)>;
93+
9294
static void
9395
mutateAndVerifyModule(StringRef Source, std::unique_ptr<IRMutator> &Mutator,
9496
int repeat = 100,
95-
const std::function<void(Module &)> *Check = nullptr) {
97+
ArrayRef<ModuleVerifier> ExtraModuleVerifiers = {}) {
9698
LLVMContext Ctx;
9799
auto M = parseAssembly(Source.data(), Ctx);
98100
std::mt19937 mt(Seed);
99101
std::uniform_int_distribution<int> RandInt(INT_MIN, INT_MAX);
100102
for (int i = 0; i < repeat; i++) {
101103
Mutator->mutateModule(*M, RandInt(mt), IRMutator::getModuleSize(*M) + 1024);
102104
ASSERT_FALSE(verifyModule(*M, &errs()));
103-
if (Check) {
104-
(*Check)(*M);
105+
for (auto &ModuleVerifier : ExtraModuleVerifiers) {
106+
ModuleVerifier(*M);
105107
}
106108
}
107109
}
108110

109111
template <class Strategy>
110112
static void
111113
mutateAndVerifyModule(StringRef Source, int repeat = 100,
112-
const std::function<void(Module &)> *Check = nullptr) {
114+
ArrayRef<ModuleVerifier> ExtraModuleVerifiers = {}) {
113115
auto Mutator = createMutator<Strategy>();
114116
ASSERT_TRUE(Mutator);
115-
mutateAndVerifyModule(Source, Mutator, repeat, Check);
117+
mutateAndVerifyModule(Source, Mutator, repeat, ExtraModuleVerifiers);
116118
}
117119

118120
TEST(InjectorIRStrategyTest, EmptyModule) {
@@ -782,7 +784,7 @@ TEST(AllStrategies, AMDGCNLegalAddrspace) {
782784
}\n\
783785
";
784786

785-
std::function<void(Module &)> AddrSpaceCheck = [](Module &M) {
787+
ModuleVerifier AddrSpaceVerifier = [](Module &M) {
786788
Function *F = M.getFunction("strict_wwm_amdgpu_cs_main");
787789
EXPECT_TRUE(F != nullptr);
788790
for (BasicBlock &BB : *F) {
@@ -798,7 +800,7 @@ TEST(AllStrategies, AMDGCNLegalAddrspace) {
798800

799801
int Repeat = 100;
800802
mutateAndVerifyModule<SinkInstructionStrategy>(Source, Repeat,
801-
&AddrSpaceCheck);
803+
{AddrSpaceVerifier});
802804
}
803805

804806
} // namespace

0 commit comments

Comments
 (0)