diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2018-01-11 14:43:05 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2018-01-11 14:43:05 +0000 |
commit | 06fe558246e6b089f251c92fa83fc7b49a667358 (patch) | |
tree | 842855ba3e3646f58bf90ac1418c164129a1ebe1 /llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp | |
parent | 6e6da3f449ae631cd1812ec045a44c6015c0fcdb (diff) | |
download | bcm5719-llvm-06fe558246e6b089f251c92fa83fc7b49a667358.tar.gz bcm5719-llvm-06fe558246e6b089f251c92fa83fc7b49a667358.zip |
[FuzzMutate] Avoid using swifterror as a source operand
Differential Revision: https://reviews.llvm.org/D41107
llvm-svn: 322280
Diffstat (limited to 'llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp')
-rw-r--r-- | llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp b/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp index b60da6cbf9f..d6ad07d0053 100644 --- a/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp +++ b/llvm/unittests/FuzzMutate/RandomIRBuilderTest.cpp @@ -266,4 +266,34 @@ TEST(RandomIRBuilderTest, FirstClassTypes) { } } +TEST(RandomIRBuilderTest, SwiftError) { + // Check that we never pick swifterror value as a source for operation + // other than load, store and call. + + LLVMContext Ctx; + const char *SourceCode = "declare void @use(i8** swifterror %err)" + "define void @test() {\n" + "entry:\n" + " %err = alloca swifterror i8*, align 8\n" + " call void @use(i8** swifterror %err)\n" + " ret void\n" + "}"; + auto M = parseAssembly(SourceCode, Ctx); + + std::vector<Type *> Types = {Type::getInt8Ty(Ctx)}; + RandomIRBuilder IB(Seed, Types); + + // Get first basic block of the test function + Function &F = *M->getFunction("test"); + BasicBlock &BB = *F.begin(); + Instruction *Alloca = &*BB.begin(); + + fuzzerop::OpDescriptor Descr = fuzzerop::gepDescriptor(1); + + for (int i = 0; i < 10; ++i) { + Value *V = IB.findOrCreateSource(BB, {Alloca}, {}, Descr.SourcePreds[0]); + ASSERT_FALSE(isa<AllocaInst>(V)); + } +} + } |