r249328 - Undo the unique_ptr'fication of CodeGenABITypes::CGM introduced in r248762.

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 5 11:43:54 PDT 2015


On Mon, Oct 5, 2015 at 10:41 AM, Adrian Prantl via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: adrian
> Date: Mon Oct  5 12:41:16 2015
> New Revision: 249328
>
> URL: http://llvm.org/viewvc/llvm-project?rev=249328&view=rev
> Log:
> Undo the unique_ptr'fication of CodeGenABITypes::CGM introduced in r248762.
> include/clang/CodeGenABITypes.h is in meant to be included by external
> users, but using a unique_ptr on the private CodeGenModule introduces a

dependency on the type definition that prevents such a use.
>

If you just make the CodeGenABITypes dtor out of line (but still defaulted)
this will address the issue without needing to use raw pointers/manual
delete:

foo.h:

struct bar;
struct foo {
  unique_ptr<bar> b;
  foo();
  ~foo();
};

foo.cpp:
struct bar {
};
foo::~foo() = default;


We have similar code in a variety of parts of LLVM/Clang to cope with
calling dtors of types that are implementation details, etc.


>
> NFC
>
> Modified:
>     cfe/trunk/include/clang/CodeGen/CodeGenABITypes.h
>     cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp
>
> Modified: cfe/trunk/include/clang/CodeGen/CodeGenABITypes.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CodeGenABITypes.h?rev=249328&r1=249327&r2=249328&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/CodeGen/CodeGenABITypes.h (original)
> +++ cfe/trunk/include/clang/CodeGen/CodeGenABITypes.h Mon Oct  5 12:41:16
> 2015
> @@ -52,6 +52,7 @@ class CodeGenABITypes
>  public:
>    CodeGenABITypes(ASTContext &C, llvm::Module &M,
>                    CoverageSourceInfo *CoverageInfo = nullptr);
> +  ~CodeGenABITypes();
>
>    /// These methods all forward to methods in the private implementation
> class
>    /// CodeGenTypes.
> @@ -79,7 +80,7 @@ private:
>    std::unique_ptr<PreprocessorOptions> PPO;
>
>    /// The CodeGenModule we use get to the CodeGenTypes object.
> -  std::unique_ptr<CodeGen::CodeGenModule> CGM;
> +  CodeGen::CodeGenModule *CGM;
>  };
>
>  }  // end namespace CodeGen
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp?rev=249328&r1=249327&r2=249328&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenABITypes.cpp Mon Oct  5 12:41:16 2015
> @@ -33,6 +33,11 @@ CodeGenABITypes::CodeGenABITypes(ASTCont
>        CGM(new CodeGen::CodeGenModule(C, *HSO, *PPO, *CGO, M,
> C.getDiagnostics(),
>                                       CoverageInfo)) {}
>
> +CodeGenABITypes::~CodeGenABITypes()
> +{
> +  delete CGM;
> +}
> +
>  const CGFunctionInfo &
>  CodeGenABITypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
>                                                   QualType receiverType) {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151005/ed80070d/attachment.html>


More information about the cfe-commits mailing list