diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2017-12-13 11:45:53 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2017-12-13 11:45:53 +0000 |
commit | 541f9707a51f9b4046928739130cb4853e8e09f4 (patch) | |
tree | 047df176b7850bc035437eef26fdb549cebcdac7 /llvm/unittests/FuzzMutate/OperationsTest.cpp | |
parent | f51f4d3623dab619d52a8cac4a8d0d69d38e3a81 (diff) | |
download | bcm5719-llvm-541f9707a51f9b4046928739130cb4853e8e09f4.tar.gz bcm5719-llvm-541f9707a51f9b4046928739130cb4853e8e09f4.zip |
[FuzzMutate] Correctly split landingpad blocks
Differential Revision: https://reviews.llvm.org/D41112
llvm-svn: 320571
Diffstat (limited to 'llvm/unittests/FuzzMutate/OperationsTest.cpp')
-rw-r--r-- | llvm/unittests/FuzzMutate/OperationsTest.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/unittests/FuzzMutate/OperationsTest.cpp b/llvm/unittests/FuzzMutate/OperationsTest.cpp index d18291e3df5..be1789e9475 100644 --- a/llvm/unittests/FuzzMutate/OperationsTest.cpp +++ b/llvm/unittests/FuzzMutate/OperationsTest.cpp @@ -211,6 +211,35 @@ TEST(OperationsTest, SplitBlock) { EXPECT_FALSE(verifyModule(M, &errs())); } +TEST(OperationsTest, SplitEHBlock) { + // Check that we will not try to branch back to the landingpad block using + // regular branch instruction + + LLVMContext Ctx; + const char *SourceCode = + "declare i32* @f()" + "declare i32 @personality_function()" + "define i32* @test() personality i32 ()* @personality_function {\n" + "entry:\n" + " %val = invoke i32* @f()\n" + " to label %normal unwind label %exceptional\n" + "normal:\n" + " ret i32* %val\n" + "exceptional:\n" + " %landing_pad4 = landingpad token cleanup\n" + " ret i32* undef\n" + "}"; + auto M = parseAssembly(SourceCode, Ctx); + + // Get the landingpad block + BasicBlock &BB = *std::next(M->getFunction("test")->begin(), 2); + + fuzzerop::OpDescriptor Descr = fuzzerop::splitBlockDescriptor(1); + + Descr.BuilderFunc({ConstantInt::getTrue(Ctx)},&*BB.getFirstInsertionPt()); + ASSERT_TRUE(!verifyModule(*M, &errs())); +} + TEST(OperationsTest, SplitBlockWithPhis) { LLVMContext Ctx; |