================
@@ -44,7 +44,7 @@ class CIRGenerator : public clang::ASTConsumer {
   const clang::CodeGenOptions &codeGenOpts;
 
 protected:
-  std::unique_ptr<mlir::MLIRContext> mlirContext;
+  std::shared_ptr<mlir::MLIRContext> mlirContext;
----------------
andykaylor wrote:

Sorry, I thought shared pointer was what you were suggesting.

Here's what I'm seeing. CIRGenerator::Initialize creates the mlirContext and 
uses it. That function also passes it, as a raw pointer, to CIRGenModule, which 
keeps a copy of the pointer throughout its lifetime. CIRGenerator doesn't use 
it again, and was previously handing it off in 
CIRGenConsumer::handleTranslationUnit() via takeContext(). 
CIRGenConsumer::handleTranslationUnit(), in turn, passes it to a few calls as a 
raw pointer (in the incubator, not yet here) before handing it off, as a unique 
pointer, to lowerFromCIRToLLVMIR() which hands it, as a unique pointer, to 
lowerFromCIRToMLIRToLLVMIR() in the incubator implementation. There it is used 
as a raw pointer.

All of the uses after the call to takeContext() have lifetimes that should be 
limited to the scope of CIRGenConsumer::handleTranslationUnit(), so I think we 
should be able to just use it as a raw pointer here instead of taking it and 
leaving CIRGenerator with a null pointer, but CIRGenerator shouldn't need it 
again either.

@bcardosolopes Have I misunderstood anything here? What's your recommendation?

https://github.com/llvm/llvm-project/pull/124650
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to