Move the complex address expression out of DIVariable and into an extra
[oota-llvm.git] / unittests / Transforms / Utils / Cloning.cpp
index 63585b82ae730b481e959efe0a920dc7055fffe5..c7799795d9be94a1f56649853c402c528b8a5cc9 100644 (file)
@@ -32,7 +32,7 @@ namespace {
 class CloneInstruction : public ::testing::Test {
 protected:
   virtual void SetUp() {
-    V = NULL;
+    V = nullptr;
   }
 
   template <typename T>
@@ -180,6 +180,29 @@ TEST_F(CloneInstruction, Attributes) {
   delete F2;
 }
 
+TEST_F(CloneInstruction, CallingConvention) {
+  Type *ArgTy1[] = { Type::getInt32PtrTy(context) };
+  FunctionType *FT1 =  FunctionType::get(Type::getVoidTy(context), ArgTy1, false);
+
+  Function *F1 = Function::Create(FT1, Function::ExternalLinkage);
+  F1->setCallingConv(CallingConv::Cold);
+  BasicBlock *BB = BasicBlock::Create(context, "", F1);
+  IRBuilder<> Builder(BB);
+  Builder.CreateRetVoid();
+
+  Function *F2 = Function::Create(FT1, Function::ExternalLinkage);
+
+  SmallVector<ReturnInst*, 4> Returns;
+  ValueToValueMapTy VMap;
+  VMap[F1->arg_begin()] = F2->arg_begin();
+
+  CloneFunctionInto(F2, F1, VMap, false, Returns);
+  EXPECT_EQ(CallingConv::Cold, F2->getCallingConv());
+
+  delete F1;
+  delete F2;
+}
+
 class CloneFunc : public ::testing::Test {
 protected:
   virtual void SetUp() {
@@ -209,7 +232,7 @@ protected:
 
     // Function DI
     DIFile File = DBuilder.createFile("filename.c", "/file/dir/");
-    DIArray ParamTypes = DBuilder.getOrCreateArray(ArrayRef<Value*>());
+    DITypeArray ParamTypes = DBuilder.getOrCreateTypeArray(None);
     DICompositeType FuncType = DBuilder.createSubroutineType(File, ParamTypes);
     DICompileUnit CU = DBuilder.createCompileUnit(dwarf::DW_LANG_C99,
         "filename.c", "/file/dir", "CloneFunc", false, "", 0);
@@ -232,10 +255,11 @@ protected:
     // Create a local variable around the alloca
     DIType IntType = DBuilder.createBasicType("int", 32, 0,
         dwarf::DW_ATE_signed);
+    DIExpression E = DBuilder.createExpression();
     DIVariable Variable = DBuilder.createLocalVariable(
       dwarf::DW_TAG_auto_variable, Subprogram, "x", File, 5, IntType, true);
-    DBuilder.insertDeclare(Alloca, Variable, Store);
-    DBuilder.insertDbgValueIntrinsic(AllocaContent, 0, Variable, Terminator);
+    DBuilder.insertDeclare(Alloca, Variable, E, Store);
+    DBuilder.insertDbgValueIntrinsic(AllocaContent, 0, Variable, E, Terminator);
     // Finalize the debug info
     DBuilder.finalize();
 
@@ -249,7 +273,7 @@ protected:
 
   void CreateNewFunc() {
     ValueToValueMapTy VMap;
-    NewFunc = CloneFunction(OldFunc, VMap, true, NULL);
+    NewFunc = CloneFunction(OldFunc, VMap, true, nullptr);
     M->getFunctionList().push_back(NewFunc);
   }
 
@@ -276,7 +300,7 @@ TEST_F(CloneFunc, Subprogram) {
   unsigned SubprogramCount = Finder->subprogram_count();
   EXPECT_EQ(2U, SubprogramCount);
 
-  DebugInfoFinder::iterator Iter = Finder->subprogram_begin();
+  auto Iter = Finder->subprograms().begin();
   DISubprogram Sub1(*Iter);
   EXPECT_TRUE(Sub1.Verify());
   Iter++;
@@ -292,7 +316,7 @@ TEST_F(CloneFunc, Subprogram) {
 TEST_F(CloneFunc, SubprogramInRightCU) {
   EXPECT_EQ(2U, Finder->compile_unit_count());
 
-  DebugInfoFinder::iterator Iter = Finder->compile_unit_begin();
+  auto Iter = Finder->compile_units().begin();
   DICompileUnit CU1(*Iter);
   EXPECT_TRUE(CU1.Verify());
   Iter++;