In
  {{$x := . | foo}}
  {{$x}}
the first action is a variable assignment that contributes
nothing to the output while the first is a use that needs
to be escaped.
This CL fixes escapeAction to distinguish assignments from
interpolations and to only modify interpolations.
R=nigeltao, r
CC=golang-dev
https://golang.org/cl/
5143048
 
 // escapeAction escapes an action template node.
 func (e *escaper) escapeAction(c context, n *parse.ActionNode) context {
+       if len(n.Pipe.Decl) != 0 {
+               // A local variable assignment, not an interpolation.
+               return c
+       }
        c = nudge(c)
        s := make([]string, 0, 3)
        switch c.state {
 
                        "<Goodbye>!",
                },
                {
-                       "overescaping",
+                       "overescaping1",
                        "Hello, {{.C | html}}!",
                        "Hello, <Cincinatti>!",
                },
+               {
+                       "overescaping2",
+                       "Hello, {{html .C}}!",
+                       "Hello, <Cincinatti>!",
+               },
+               {
+                       "overescaping3",
+                       "{{with .C}}{{$msg := .}}Hello, {{$msg}}!{{end}}",
+                       "Hello, <Cincinatti>!",
+               },
                {
                        "assignment",
                        "{{if $x := .H}}{{$x}}{{end}}",