diff --git a/src/cmd/compile/internal/bloop/bloop.go b/src/cmd/compile/internal/bloop/bloop.go
index d5f001a..abb6838 100644
--- a/src/cmd/compile/internal/bloop/bloop.go
+++ b/src/cmd/compile/internal/bloop/bloop.go
@@ -325,7 +325,6 @@
case *ir.BlockStmt:
preserveStmts(e.curFn, n.List)
case *ir.CaseClause:
- preserveStmts(e.curFn, n.List)
preserveStmts(e.curFn, n.Body)
case *ir.CommClause:
preserveStmts(e.curFn, n.Body)
diff --git a/test/bloop.go b/test/bloop.go
index d718425..c53a17e 100644
--- a/test/bloop.go
+++ b/test/bloop.go
@@ -56,6 +56,10 @@
case 2:
caninline(1) // ERROR "inlining call to caninline" "function result will be kept alive"
}
+ // Case expressions are not statements and should not be rewritten by the bloop pass.
+ switch cond {
+ case caninline(2): // ERROR "inlining call to caninline"
+ }
{
caninline(1) // ERROR "inlining call to caninline" "function result will be kept alive"
}