Zhang via llvm-dev
2018-Jun-12 04:59 UTC
[llvm-dev] Proper method to initialize all LLVM Internal Data Structures?
Hi: I'm building a small tool on top of LLVM Core Library. ``` LLVMContext context; SMDiagnostic diag; Module *M = parseIRFile(InputIR, diag, context).get(); if (M == nullptr) { diag.print("LLVM", errs()); exit(-1); } assert(M->isMaterialized() && "Module not materialized!"); PointerType *ArrayPtrTy M->getTypeByName("struct._Array")->getPointerTo(); ``` However this piece of code crashes at Module::getTypeByName because getContext().pImpl is NULL pointer. Other similar issues include Module::getTypeByName results in a NULL pointer dereference because TheTable in StringMap is not allocated/initialized. It would be great if someone could show me what's the correct way to initialize all this kind of internal data structures so I could focus on my tool's logic -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180612/8afd272d/attachment.html>
mayuyu.io via llvm-dev
2018-Jun-12 05:04 UTC
[llvm-dev] Proper method to initialize all LLVM Internal Data Structures?
I’m using LLVM6.0 Release version on macOS Zhang> 在 2018年6月12日,12:59,Zhang via llvm-dev <llvm-dev at lists.llvm.org> 写道: > > Hi: > I'm building a small tool on top of LLVM Core Library. > > ``` > LLVMContext context; > SMDiagnostic diag; > Module *M = parseIRFile(InputIR, diag, context).get(); > if (M == nullptr) { > diag.print("LLVM", errs()); > exit(-1); > } > assert(M->isMaterialized() && "Module not materialized!"); > PointerType *ArrayPtrTy > M->getTypeByName("struct._Array")->getPointerTo(); > ``` > > However this piece of code crashes at Module::getTypeByName because getContext().pImpl is NULL pointer. Other similar issues include Module::getTypeByName results in a NULL pointer dereference because TheTable in StringMap is not allocated/initialized. > > It would be great if someone could show me what's the correct way to initialize all this kind of internal data structures so I could focus on my tool's logic > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Craig Topper via llvm-dev
2018-Jun-12 05:21 UTC
[llvm-dev] Proper method to initialize all LLVM Internal Data Structures?
This line looks incorrect Module *M = parseIRFile(InputIR, diag, context).get(); parseIRFile returns a unique_ptr, you called "get()" on it and captured the value of the ptr, but the temporary unique_ptr was not invalidated. So its destructor still ran and deleted the module out from under you. You should use std::unique_ptr<Module> M to maintain ownership. ~Craig On Mon, Jun 11, 2018 at 10:04 PM mayuyu.io via llvm-dev < llvm-dev at lists.llvm.org> wrote:> I’m using LLVM6.0 Release version on macOS > > Zhang > > > 在 2018年6月12日,12:59,Zhang via llvm-dev <llvm-dev at lists.llvm.org> 写道: > > > > Hi: > > I'm building a small tool on top of LLVM Core Library. > > > > ``` > > LLVMContext context; > > SMDiagnostic diag; > > Module *M = parseIRFile(InputIR, diag, context).get(); > > if (M == nullptr) { > > diag.print("LLVM", errs()); > > exit(-1); > > } > > assert(M->isMaterialized() && "Module not materialized!"); > > PointerType *ArrayPtrTy > > M->getTypeByName("struct._Array")->getPointerTo(); > > ``` > > > > However this piece of code crashes at Module::getTypeByName because > getContext().pImpl is NULL pointer. Other similar issues include > Module::getTypeByName results in a NULL pointer dereference because > TheTable in StringMap is not allocated/initialized. > > > > It would be great if someone could show me what's the correct way to > initialize all this kind of internal data structures so I could focus on my > tool's logic > > > > _______________________________________________ > > LLVM Developers mailing list > > llvm-dev at lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180611/d9f6ec95/attachment.html>