X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=unittests%2FTransforms%2FUtils%2FCloning.cpp;h=e19ae5bc2fb4be6d6eb9f274189e935aa8b5d3f6;hb=71981ef040dd94438449aeca726cab5839d8ec3c;hp=9df57870282058902b33ae8a0605b72361141658;hpb=5a88dda4be791426ab4d20a6a6c9c65d66614a27;p=oota-llvm.git diff --git a/unittests/Transforms/Utils/Cloning.cpp b/unittests/Transforms/Utils/Cloning.cpp index 9df57870282..e19ae5bc2fb 100644 --- a/unittests/Transforms/Utils/Cloning.cpp +++ b/unittests/Transforms/Utils/Cloning.cpp @@ -7,12 +7,15 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Instructions.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/Argument.h" -#include "llvm/Constant.h" -#include "llvm/LLVMContext.h" +#include "llvm/IR/Argument.h" +#include "llvm/IR/Constant.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/Transforms/Utils/Cloning.h" #include "gtest/gtest.h" using namespace llvm; @@ -143,4 +146,31 @@ TEST_F(CloneInstruction, Exact) { EXPECT_TRUE(this->clone(SDiv)->isExact()); } +TEST_F(CloneInstruction, Attributes) { + Type *ArgTy1[] = { Type::getInt32PtrTy(context) }; + FunctionType *FT1 = FunctionType::get(Type::getVoidTy(context), ArgTy1, false); + + Function *F1 = Function::Create(FT1, Function::ExternalLinkage); + BasicBlock *BB = BasicBlock::Create(context, "", F1); + IRBuilder<> Builder(BB); + Builder.CreateRetVoid(); + + Function *F2 = Function::Create(FT1, Function::ExternalLinkage); + + Attribute::AttrKind AK[] = { Attribute::NoCapture }; + AttributeSet AS = AttributeSet::get(context, 0, AK); + Argument *A = F1->arg_begin(); + A->addAttr(AS); + + SmallVector Returns; + ValueToValueMapTy VMap; + VMap[A] = UndefValue::get(A->getType()); + + CloneFunctionInto(F2, F1, VMap, false, Returns); + EXPECT_FALSE(F2->arg_begin()->hasNoCaptureAttr()); + + delete F1; + delete F2; +} + }