diff --git a/go/ssa/sanity.go b/go/ssa/sanity.go index 0d13beb952..6eb6432849 100644 --- a/go/ssa/sanity.go +++ b/go/ssa/sanity.go @@ -446,6 +446,17 @@ func (s *sanity) checkFunction(fn *Function) bool { if p.Parent() != fn { s.errorf("Param %s at index %d has wrong parent", p.Name(), i) } + // Check common suffix of Signature and Params match type. + if sig := fn.Signature; sig != nil { + j := i - len(fn.Params) + sig.Params().Len() // index within sig.Params + if j < 0 { + continue + } + if !types.Identical(p.Type(), sig.Params().At(j).Type()) { + s.errorf("Param %s at index %d has wrong type (%s, versus %s in Signature)", p.Name(), i, p.Type(), sig.Params().At(j).Type()) + + } + } s.checkReferrerList(p) } for i, fv := range fn.FreeVars { diff --git a/go/ssa/wrappers.go b/go/ssa/wrappers.go index 701dd90d7d..a4ae71d8cf 100644 --- a/go/ssa/wrappers.go +++ b/go/ssa/wrappers.go @@ -141,13 +141,9 @@ func makeWrapper(prog *Program, sel *types.Selection) *Function { // start is the index of the first regular parameter to use. // func createParams(fn *Function, start int) { - var last *Parameter tparams := fn.Signature.Params() for i, n := start, tparams.Len(); i < n; i++ { - last = fn.addParamObj(tparams.At(i)) - } - if fn.Signature.Variadic() { - last.typ = types.NewSlice(last.typ) + fn.addParamObj(tparams.At(i)) } }