diff --git a/pkg/compiler/codegen.go b/pkg/compiler/codegen.go index ae6be05ad..c2a513d91 100644 --- a/pkg/compiler/codegen.go +++ b/pkg/compiler/codegen.go @@ -555,9 +555,11 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { vs := spec.(*ast.ValueSpec) for i := range vs.Names { obj := c.currPkg.Types.Scope().Lookup(vs.Names[i].Name) - c.constMap[c.getIdentName("", vs.Names[i].Name)] = types.TypeAndValue{ - Type: obj.Type(), - Value: obj.(*types.Const).Val(), + if obj != nil { // can be nil if unused + c.constMap[c.getIdentName("", vs.Names[i].Name)] = types.TypeAndValue{ + Type: obj.Type(), + Value: obj.(*types.Const).Val(), + } } } } diff --git a/pkg/compiler/global_test.go b/pkg/compiler/global_test.go index c4a444932..1d910797a 100644 --- a/pkg/compiler/global_test.go +++ b/pkg/compiler/global_test.go @@ -12,6 +12,18 @@ import ( "github.com/stretchr/testify/require" ) +func TestUnusedGlobal(t *testing.T) { + src := `package foo + const ( + _ int = iota + a + ) + func Main() int { + return 1 + }` + eval(t, src, big.NewInt(1)) +} + func TestChangeGlobal(t *testing.T) { src := `package foo var a int