[cfe-commits] r80701 - in /cfe/trunk: lib/CodeGen/CGCXX.cpp test/CodeGenCXX/destructors.cpp

Fariborz Jahanian fjahanian at apple.com
Tue Sep 1 11:48:59 PDT 2009


We have test cases for these. See default-destructor-synthesis.cpp
as an example.

- Fariborz

On Sep 1, 2009, at 11:33 AM, Anders Carlsson wrote:

> Author: andersca
> Date: Tue Sep  1 13:33:46 2009
> New Revision: 80701
>
> URL: http://llvm.org/viewvc/llvm-project?rev=80701&view=rev
> Log:
> We can generate constructors/destructors with base classes and non- 
> trivial fields just fine now.
>
> Added:
>    cfe/trunk/test/CodeGenCXX/destructors.cpp
> Modified:
>    cfe/trunk/lib/CodeGen/CGCXX.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXX.cpp?rev=80701&r1=80700&r2=80701&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/CodeGen/CGCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGCXX.cpp Tue Sep  1 13:33:46 2009
> @@ -719,28 +719,7 @@
>   EmitBlock(DeleteEnd);
> }
>
> -static bool canGenerateCXXstructor(const CXXRecordDecl *RD,
> -                                   ASTContext &Context) {
> -  // The class has base classes - we don't support that right now.
> -  if (RD->getNumBases() > 0)
> -    return false;
> -
> -  for (CXXRecordDecl::field_iterator I = RD->field_begin(), E = RD- 
> >field_end();
> -         I != E; ++I) {
> -    // We don't support ctors for fields that aren't POD.
> -    if (!I->getType()->isPODType())
> -      return false;
> -  }
> -
> -  return true;
> -}
> -
> void CodeGenModule::EmitCXXConstructors(const CXXConstructorDecl *D) {
> -  if (!canGenerateCXXstructor(D->getParent(), getContext())) {
> -    ErrorUnsupported(D, "C++ constructor", true);
> -    return;
> -  }
> -
>   EmitGlobal(GlobalDecl(D, Ctor_Complete));
>   EmitGlobal(GlobalDecl(D, Ctor_Base));
> }
> @@ -778,11 +757,6 @@
> }
>
> void CodeGenModule::EmitCXXDestructors(const CXXDestructorDecl *D) {
> -  if (!canGenerateCXXstructor(D->getParent(), getContext())) {
> -    ErrorUnsupported(D, "C++ destructor", true);
> -    return;
> -  }
> -
>   EmitCXXDestructor(D, Dtor_Complete);
>   EmitCXXDestructor(D, Dtor_Base);
> }
> @@ -1613,6 +1587,7 @@
>
> /// EmitCtorPrologue - This routine generates necessary code to  
> initialize
> /// base classes and non-static data members belonging to this  
> constructor.
> +/// FIXME: This needs to take a CXXCtorType.
> void CodeGenFunction::EmitCtorPrologue(const CXXConstructorDecl *CD) {
>   const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(CD- 
> >getDeclContext());
>   // FIXME: Add vbase initialization
> @@ -1766,6 +1741,7 @@
> /// EmitDtorEpilogue - Emit all code that comes at the end of class's
> /// destructor. This is to call destructors on members and base  
> classes
> /// in reverse order of their construction.
> +/// FIXME: This needs to take a CXXDtorType.
> void CodeGenFunction::EmitDtorEpilogue(const CXXDestructorDecl *DD) {
>   const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(DD- 
> >getDeclContext());
>   assert(!ClassDecl->isPolymorphic() &&
>
> Added: cfe/trunk/test/CodeGenCXX/destructors.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/destructors.cpp?rev=80701&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/test/CodeGenCXX/destructors.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/destructors.cpp Tue Sep  1 13:33:46 2009
> @@ -0,0 +1,22 @@
> +// RUN: clang-cc %s -emit-llvm -o -
> +struct A {
> +  int a;
> +
> +  ~A();
> +};
> +
> +// Base with non-trivial destructor
> +struct B : A {
> +  ~B();
> +};
> +
> +B::~B() { }
> +
> +// Field with non-trivial destructor
> +struct C {
> +  A a;
> +
> +  ~C();
> +};
> +
> +C::~C() { }
> \ No newline at end of file
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list