Browse Source

compiler: fix debug metadata

Not setting the correct debug location at function entry leads to
instructions getting the address of the previously emitted function,
which is of course wrong. LLVM complains about it when validating a
module.
pull/6/head
Ayke van Laethem 6 years ago
parent
commit
87dd1a1fe5
No known key found for this signature in database GPG Key ID: E97FF5335DFDFDED
  1. 5
      compiler.go

5
compiler.go

@ -1103,6 +1103,11 @@ func (c *Compiler) parseFunc(frame *Frame) error {
frame.fn.llvmFn.SetLinkage(llvm.InternalLinkage)
}
if c.debug {
pos := c.ir.program.Fset.Position(frame.fn.fn.Pos())
c.builder.SetCurrentDebugLocation(uint(pos.Line), uint(pos.Column), frame.difunc, llvm.Metadata{})
}
// Pre-create all basic blocks in the function.
for _, block := range frame.fn.fn.DomPreorder() {
llvmBlock := c.ctx.AddBasicBlock(frame.fn.llvmFn, block.Comment)

Loading…
Cancel
Save