[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