From 5a50e003067672ff13bc2ea0464f0cf83a943b2d Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 17 Feb 2016 13:43:19 -0500 Subject: [PATCH] runtime: improve comment on selectgo In particular, document that *sel is on the stack no matter what. Change-Id: I1c264215e026c27721b13eedae73ec845066cdec Reviewed-on: https://go-review.googlesource.com/20032 Reviewed-by: Rick Hudson --- src/runtime/select.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/runtime/select.go b/src/runtime/select.go index 4e87dba3e7..ddc3d81638 100644 --- a/src/runtime/select.go +++ b/src/runtime/select.go @@ -208,8 +208,15 @@ func block() { gopark(nil, nil, "select (no cases)", traceEvGoStop, 1) // forever } -// overwrites return pc on stack to signal which case of the select -// to run, so cannot appear at the top of a split stack. +// selectgo implements the select statement. +// +// *sel is on the current goroutine's stack (regardless of any +// escaping in selectgo). +// +// selectgo does not return. Instead, it overwrites its return PC and +// returns directly to the triggered select case. Because of this, it +// cannot appear at the top of a split stack. +// //go:nosplit func selectgo(sel *hselect) { pc, offset := selectgoImpl(sel) -- 2.48.1