================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits