diff --git a/src/cmd/compile/internal/reflectdata/alg.go b/src/cmd/compile/internal/reflectdata/alg.go
index 9201a19..e793d49 100644
--- a/src/cmd/compile/internal/reflectdata/alg.go
+++ b/src/cmd/compile/internal/reflectdata/alg.go
@@ -134,6 +134,11 @@
 }
 
 func hashFunc(t *types.Type) *ir.Func {
+	sym := TypeSymPrefix(".hash", t)
+	if sym.Def != nil {
+		return sym.Def.(*ir.Name).Func
+	}
+
 	base.Pos = base.AutogeneratedPos // less confusing than end of input
 	typecheck.DeclContext = ir.PEXTERN
 
@@ -144,8 +149,8 @@
 	}
 	results := []*ir.Field{ir.NewField(base.Pos, nil, types.Types[types.TUINTPTR])}
 
-	sym := TypeSymPrefix(".hash", t)
 	fn := typecheck.DeclFunc(sym, nil, args, results)
+	sym.Def = fn.Nname
 	np := ir.AsNode(fn.Type().Params().Field(0).Nname)
 	nh := ir.AsNode(fn.Type().Params().Field(1).Nname)
 
@@ -231,9 +236,9 @@
 	fn.SetDupok(true)
 	typecheck.Func(fn)
 
-	ir.CurFunc = fn
-	typecheck.Stmts(fn.Body)
-	ir.CurFunc = nil
+	ir.WithFunc(fn, func() {
+		typecheck.Stmts(fn.Body)
+	})
 
 	fn.SetNilCheckDisabled(true)
 	typecheck.Target.Decls = append(typecheck.Target.Decls, fn)
@@ -249,8 +254,6 @@
 
 // hashfor returns the function to compute the hash of a value of type t.
 func hashfor(t *types.Type) *ir.Name {
-	var sym *types.Sym
-
 	switch a, _ := types.AlgType(t); a {
 	case types.AMEM:
 		base.Fatalf("hashfor with AMEM type")
@@ -268,22 +271,10 @@
 		return runtimeHashFor("c64hash", t)
 	case types.ACPLX128:
 		return runtimeHashFor("c128hash", t)
-	default:
-		// Note: the caller of hashfor ensured that this symbol
-		// exists and has a body by calling genhash for t.
-		sym = TypeSymPrefix(".hash", t)
 	}
 
-	// TODO(austin): This creates an ir.Name with a nil Func.
-	n := typecheck.NewName(sym)
-	ir.MarkFunc(n)
-	n.SetType(types.NewSignature(nil, []*types.Field{
-		types.NewField(base.Pos, nil, types.NewPtr(t)),
-		types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),
-	}, []*types.Field{
-		types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),
-	}))
-	return n
+	fn := hashFunc(t)
+	return fn.Nname
 }
 
 // sysClosure returns a closure which will call the
