Tweak liveness analysis for return statements
diff --git a/internal/cgen/liveness.go b/internal/cgen/liveness.go
index 893c665..444f975 100644
--- a/internal/cgen/liveness.go
+++ b/internal/cgen/liveness.go
@@ -133,6 +133,7 @@
 	tm    *t.Map
 	vars  map[t.ID]int // Maps from local variable name to livenesses index.
 	loops map[a.Loop]*loopLivenesses
+	final livenesses
 }
 
 func (g *gen) findVars() error {
@@ -152,14 +153,16 @@
 	}
 
 	if f.Effect().Coroutine() {
+		h.final = make(livenesses, len(h.vars))
 		r := make(livenesses, len(h.vars))
 		if err := h.doBlock(r, f.Body(), 0); err != nil {
 			return err
 		}
+		h.final.reconcile(r)
 
 		g.currFunk.varResumables = map[t.ID]bool{}
 		for i, v := range g.currFunk.varList {
-			g.currFunk.varResumables[v.Name()] = r[i] == livenessStrong
+			g.currFunk.varResumables[v.Name()] = h.final[i] == livenessStrong
 		}
 	}
 
@@ -401,7 +404,7 @@
 
 	switch n.Keyword() {
 	case t.IDReturn:
-		// No-op.
+		h.final.reconcile(r)
 	case t.IDYield:
 		r.raiseNoneToWeak()
 	default: