diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2018-01-25 09:22:18 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2018-01-25 09:22:18 +0000 |
commit | 7a43f26dc8416eb09e660ea29ccfc943d1e08557 (patch) | |
tree | c4f6b13a73e698c99176770cd093630a662055fd /llvm/unittests/FuzzMutate/StrategiesTest.cpp | |
parent | 48b486568353e90ebc92ecc57436c0c609be7004 (diff) | |
download | bcm5719-llvm-7a43f26dc8416eb09e660ea29ccfc943d1e08557.tar.gz bcm5719-llvm-7a43f26dc8416eb09e660ea29ccfc943d1e08557.zip |
[FuzzMutate] Inst deleter doesn't work with PhiNodes
Differential Revision: https://reviews.llvm.org/D42412
llvm-svn: 323409
Diffstat (limited to 'llvm/unittests/FuzzMutate/StrategiesTest.cpp')
-rw-r--r-- | llvm/unittests/FuzzMutate/StrategiesTest.cpp | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/llvm/unittests/FuzzMutate/StrategiesTest.cpp b/llvm/unittests/FuzzMutate/StrategiesTest.cpp index 4fcd4569271..320a4e950f3 100644 --- a/llvm/unittests/FuzzMutate/StrategiesTest.cpp +++ b/llvm/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); } } |