summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/FuzzMutate/OperationsTest.cpp
diff options
context:
space:
mode:
authorIgor Laevsky <igmyrj@gmail.com>2017-12-13 11:45:53 +0000
committerIgor Laevsky <igmyrj@gmail.com>2017-12-13 11:45:53 +0000
commit541f9707a51f9b4046928739130cb4853e8e09f4 (patch)
tree047df176b7850bc035437eef26fdb549cebcdac7 /llvm/unittests/FuzzMutate/OperationsTest.cpp
parentf51f4d3623dab619d52a8cac4a8d0d69d38e3a81 (diff)
downloadbcm5719-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.cpp29
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;
OpenPOWER on IntegriCloud