[llvm-dev] Error while iterating over callee nodes in CallGraph
Doerfert, Johannes via llvm-dev
llvm-dev at lists.llvm.org
Sun Dec 15 20:24:34 PST 2019
On 12/16, Niddodi, Chaitra wrote:
> Despite making sure, it is not NULL, I still get a segmentation fault.
>
> Code:
> if((cgn->getFunction())==NULL)
> continue;
> errs()<<cgn->getFunction()->getName()<<"\n";
>
> Error:
> 0 opt 0x00000000011d2302 llvm::sys::PrintStackTrace(_IO_FILE*) + 34
> 1 opt 0x00000000011d1eb4
> 2 libpthread.so.0 0x00007fea1847c330
> 3 libcgwalk.so 0x00007fea1767f596
> 4 opt 0x00000000010ddb45 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 709
> 5 opt 0x0000000000552724 main + 2452
> 6 libc.so.6 0x00007fea178a4f45 __libc_start_main + 245
> 7 opt 0x000000000056d865
> Stack dump:
> 0. Program arguments: opt -load build/proj/libcgwalk.so -cgwalk
> 1. Running pass 'Cgwalk' on module '<stdin>'.
> Segmentation fault (core dumped)
>
>
> Also, using getName() on the main function prints out an empty string - errs()<<cg[M.getFunction("main")]->getFunction()->getName()<<"\n";
> There seems to be some issue with CallGraph generation.
Given that your LLVM version is pretty old I'm not sure this will work:
The old/legacy pass manager is historically problematic when you cross
IR unit boundaries. I would just create the call graph from scratch. I
mean, use the CallGraph class but not the PM interface. That should work
in modern LLVM just fine, e.g., via llvm::CallGraph(Module &M).
To debug your segfault you might want to use a debug build of LLVM, even
for the stack dump hat would probably help a lot.
> ________________________________
> From: Doerfert, Johannes
> Sent: Sunday, December 15, 2019 8:38 PM
> To: Niddodi, Chaitra
> Cc: llvm-dev at lists.llvm.org
> Subject: Re: [llvm-dev] Error while iterating over callee nodes in CallGraph
>
> On 12/15, Niddodi, Chaitra via llvm-dev wrote:
> > for (CallGraphNode::iterator ti = cgm->begin(); ti != cgm->end(); ++ti)
> > {
> > CallGraphNode * cgn = ti->second;
> > if(cgn==NULL)
> > continue;
> > errs()<<cgn->getFunction()<<"\n";
> > errs()<<cgn->getFunction()->getName()<<"\n";
>
> I think the function (cgn->getFunction()) can be NULL (to indicate
> special edges). Make sure it isn't.
--
Johannes Doerfert
Researcher
Argonne National Laboratory
Lemont, IL 60439, USA
jdoerfert at anl.gov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191216/6e71e3a6/attachment.sig>
More information about the llvm-dev
mailing list