From 87dd1a1fe546e8079d641fca79f574cd64039db8 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Wed, 5 Sep 2018 16:41:34 +0200 Subject: [PATCH] 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. --- compiler.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/compiler.go b/compiler.go index eeaf40e9..8d8969ed 100644 --- a/compiler.go +++ b/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)