summaryrefslogtreecommitdiff
path: root/unittests/FuzzMutate/StrategiesTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/FuzzMutate/StrategiesTest.cpp')
-rw-r--r--unittests/FuzzMutate/StrategiesTest.cpp47
1 files changed, 38 insertions, 9 deletions
diff --git a/unittests/FuzzMutate/StrategiesTest.cpp b/unittests/FuzzMutate/StrategiesTest.cpp
index 4fcd45692714..320a4e950f3d 100644
--- a/unittests/FuzzMutate/StrategiesTest.cpp
+++ b/unittests/FuzzMutate/StrategiesTest.cpp
@@ -64,6 +64,18 @@ std::unique_ptr<Module> parseAssembly(
return M;
}
+void IterateOnSource(StringRef Source, IRMutator &Mutator) {
+ LLVMContext Ctx;
+
+ for (int i = 0; i < 10; ++i) {
+ auto M = parseAssembly(Source.data(), Ctx);
+ ASSERT_TRUE(M && !verifyModule(*M, &errs()));
+
+ Mutator.mutateModule(*M, Seed, Source.size(), Source.size() + 100);
+ EXPECT_TRUE(!verifyModule(*M, &errs()));
+ }
+}
+
TEST(InjectorIRStrategyTest, EmptyModule) {
// Test that we can inject into empty module
@@ -81,7 +93,6 @@ TEST(InjectorIRStrategyTest, EmptyModule) {
TEST(InstDeleterIRStrategyTest, EmptyFunction) {
// Test that we don't crash even if we can't remove from one of the functions.
- LLVMContext Ctx;
StringRef Source = ""
"define <8 x i32> @func1() {\n"
"ret <8 x i32> undef\n"
@@ -96,15 +107,33 @@ TEST(InstDeleterIRStrategyTest, EmptyFunction) {
auto Mutator = createDeleterMutator();
ASSERT_TRUE(Mutator);
- // We need to choose 'func1' in order for the crash to appear.
- // Loop 10 times and assume we are lucky.
- for (int i = 0; i < 10; ++i) {
- auto M = parseAssembly(Source.data(), Ctx);
- ASSERT_TRUE(M && !verifyModule(*M, &errs()));
+ IterateOnSource(Source, *Mutator);
+}
- Mutator->mutateModule(*M, Seed, Source.size(), Source.size() + 100);
- EXPECT_TRUE(!verifyModule(*M, &errs()));
- }
+TEST(InstDeleterIRStrategyTest, PhiNodes) {
+ // Test that inst deleter works correctly with the phi nodes.
+
+ LLVMContext Ctx;
+ StringRef Source = "\n\
+ define i32 @earlyreturncrash(i32 %x) {\n\
+ entry:\n\
+ switch i32 %x, label %sw.epilog [\n\
+ i32 1, label %sw.bb1\n\
+ ]\n\
+ \n\
+ sw.bb1:\n\
+ br label %sw.epilog\n\
+ \n\
+ sw.epilog:\n\
+ %a.0 = phi i32 [ 7, %entry ], [ 9, %sw.bb1 ]\n\
+ %b.0 = phi i32 [ 10, %entry ], [ 4, %sw.bb1 ]\n\
+ ret i32 %a.0\n\
+ }";
+
+ auto Mutator = createDeleterMutator();
+ ASSERT_TRUE(Mutator);
+
+ IterateOnSource(Source, *Mutator);
}
}