]> granicus.if.org Git - clang/commitdiff
Refactoring of copy ctor ir-gen. No change in functionality.
authorFariborz Jahanian <fjahanian@apple.com>
Sat, 8 Aug 2009 19:31:03 +0000 (19:31 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Sat, 8 Aug 2009 19:31:03 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78489 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCXX.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/CodeGen/CodeGenFunction.h

index 3e828bf9ac2e363baf486956b869fd889716e450..a1ea6bf76a475498e00d1676b237db2071efc266 100644 (file)
@@ -699,7 +699,7 @@ void CodeGenFunction::EmitClassMemberwiseCopy(
   }
 }
   
-/// EmitCopyCtorBody - This routine implicitly defines body of a copy
+/// SynthesizeCXXCopyConstructor - This routine implicitly defines body of a copy
 /// constructor, in accordance with section 12.8 (p7 and p8) of C++03
 /// The implicitly-defined copy constructor for class X performs a memberwise 
 /// copy of its subobjects. The order of copying is the same as the order 
@@ -714,11 +714,14 @@ void CodeGenFunction::EmitClassMemberwiseCopy(
 /// Virtual base class subobjects shall be copied only once by the 
 /// implicitly-defined copy constructor 
 
-void CodeGenFunction::EmitCopyCtorBody(const CXXConstructorDecl *CD,
+void CodeGenFunction::SynthesizeCXXCopyConstructor(const CXXConstructorDecl *CD,
+                                       const FunctionDecl *FD,
+                                       llvm::Function *Fn,
                                        const FunctionArgList &Args) {
   const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(CD->getDeclContext());
   assert(!ClassDecl->hasUserDeclaredCopyConstructor() &&
-         "EmitCopyCtorBody - copy constructor has definition already");
+         "SynthesizeCXXCopyConstructor - copy constructor has definition already");
+  StartFunction(FD, FD->getResultType(), Fn, Args, SourceLocation());
  
   FunctionArgList::const_iterator i = Args.begin();
   const VarDecl *ThisArg = i->first;
@@ -759,6 +762,7 @@ void CodeGenFunction::EmitCopyCtorBody(const CXXConstructorDecl *CD,
     }
     // FIXME. Do a built-in assignment of scalar data members.
   }
+  FinishFunction();
 }  
 
 
index 0a3d9d4be9b45898657bae7dc3d299f6ce5a2732..eae6161e8e138be6c7eb430e236e0c515fb31791 100644 (file)
@@ -246,9 +246,7 @@ void CodeGenFunction::GenerateCode(const FunctionDecl *FD,
       if (CD->isCopyConstructor(getContext())) {
         assert(!ClassDecl->hasUserDeclaredCopyConstructor() &&
                "bogus constructor is being synthesize");
-        StartFunction(FD, FD->getResultType(), Fn, Args, SourceLocation());
-        EmitCopyCtorBody(CD, Args);
-        FinishFunction();
+        SynthesizeCXXCopyConstructor(CD, FD, Fn, Args);
       }
       else {
         assert(!ClassDecl->hasUserDeclaredConstructor() &&
index 383f844e93200dbb3c126989c05af2950a96d26f..6e4d9ec891981d6137fc6abc207970c81166c0c7 100644 (file)
@@ -369,8 +369,10 @@ public:
 
   void EmitCtorPrologue(const CXXConstructorDecl *CD);
   
-  void EmitCopyCtorBody(const CXXConstructorDecl *CD,
-                        const FunctionArgList &Args);
+  void SynthesizeCXXCopyConstructor(const CXXConstructorDecl *CD,
+                                    const FunctionDecl *FD,
+                                    llvm::Function *Fn,
+                                    const FunctionArgList &Args);
   
   /// EmitDtorEpilogue - Emit all code that comes at the end of class's
   /// destructor. This is to call destructors on members and base classes