@@ -89,30 +89,32 @@ void IterateOnSource(StringRef Source, IRMutator &Mutator) {
8989 }
9090}
9191
92+ using ModuleVerifier = std::function<void (Module &)>;
93+
9294static void
9395mutateAndVerifyModule (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
109111template <class Strategy >
110112static void
111113mutateAndVerifyModule (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
118120TEST (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