go/types handles parameter passing to built-ins essentially the same as for regular functions and so this should not be restricted to the built-in append, but also user-defined functions (see below). Furthermore, gccgo also accepts this code. In fact, both, go/types and gccgo accept his code:
$ gccgo x.go && ./a.out
[1 2 3 4 5]
x = [1 2]
y = [3 4 5]
That is, it's not obviously clear that this is a go/types issue.
Per the spec:
"As a special case, if the return values of a function or method g are equal in number and individually assignable to the parameters of another function or method f, then the call f(g(parameters_of_g)) will invoke f after binding the return values of g to the parameters of f in order. The call of f must contain no parameters other than the call of g, and g must have at least one return value. If f has a final ... parameter, it is assigned the return values of g that remain after assignment of regular parameters." (http://golang.org/ref/spec#Calls)
Thus, if 2) is done after 1), one might argue that the final argument after 1) is indeed a slice of the form T and thus ... is applicable.
This is indeed what go/types does: it first "unpacks" f() and treats the results of f() as a sequence of individual results. The ... application to the last argument happens afterwards. I suspect gccgo does something analogous.
The spec is not specific enough in this case as evidenced by the different interpretations of it by go/types and gccco, vs gc, and we should clarify it. Permitting the code above could be an unintended consequence of the spec as written, or we can disallow it.
As your example shows, there is nothing special about append here.
Although gccgo supports this kind of code, I'm inclined to think that it should not. The rule about ... in a call applies to the final argument. When the argument is a function call that returns multiple results, there is no clear final argument for ... to apply to. Applying it to the final function call result makes logical sense, but it is quite obscure, and I think better prohibited.