[llvm-dev] CloneFunction during LTO leads to seg fault?

Scott A. Carr via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 9 10:24:58 PST 2016


Hello,

I'm writing an LTO pass and I'd like to be able to duplicate a function 
(with debugging info).  I'm trying to accomplish this with CloneFunction 
but it's leading to a seg fault in ld.

I've whittled down my problem so that it occurs in this small pass [1].

If I run this pass with opt, I get the expected result (i.e. a valid 
program that calls main twice).  If I run the pass during LTO, ld seg 
faults.  Here is a pastebin of when ld seg faults in lldb [2].

If I set the third parameter of CloneFunction (ModuleLevelChanges) to 
false, then then compilation will complete -- but I lose debugging 
information in the cloned function.  I really want to preserve the debug 
info.

Any idea what is wrong?  Is this a bug?  Usually when I screw up the 
module the verifier catches the problem.  This is getting to I think 
CodeGen then crashing.

I've found that the module itself needs to be non-trivial to cause the 
crash.  Here is the module I'm testing with [3].

In case it is relevant: to get my pass to run during LTO I added 
"PM.add(createHelloPass())" to 
PassMangerBuilder::populateLTOPassManager.  I'm using binutils-gold on 
Linux (Ubuntu 14.04 LTS).

Thank you,
Scott A. Carr
PhD Candidate
Purdue University

[1] http://pastebin.com/uL6QMtcT

[2] http://pastebin.com/i1gd0gE6

[3] http://pastebin.com/GEG0F8kU


More information about the llvm-dev mailing list