From 1cb702ac4cb30449cdf9541718dff1e4c5fbbde6 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sun, 5 Mar 2023 20:02:05 +0100 Subject: [PATCH] compiler: try harder to find source locations for constants If there is no source location, at least use the file (but not line) for debug information. This attributes almost 1kB of string data for ./testdata/stdlib.go when compiling for WASI. --- compiler/compiler.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler/compiler.go b/compiler/compiler.go index 902885c8..15cdab9f 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -1863,6 +1863,14 @@ func (b *builder) createFunctionCall(instr *ssa.CallCommon) (llvm.Value, error) func (b *builder) getValue(expr ssa.Value, pos token.Pos) llvm.Value { switch expr := expr.(type) { case *ssa.Const: + if pos == token.NoPos { + // If the position isn't known, at least try to find in which file + // it is defined. + file := b.program.Fset.File(b.fn.Pos()) + if file != nil { + pos = file.Pos(0) + } + } return b.createConst(expr, pos) case *ssa.Function: if b.getFunctionInfo(expr).exported {