diff options
| author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2024-07-04 00:17:05 +0700 |
|---|---|---|
| committer | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2024-07-23 23:49:48 +0000 |
| commit | 3f9360345cc1e3286abbb7bf5fbce50481a0bbbd (patch) | |
| tree | ee82f36bf60292a187fc5f9b4f3ac2c139a9e822 /src/cmd | |
| parent | d55253f5ddfc38bd45846583e07b5e4a97719931 (diff) | |
| download | go-3f9360345cc1e3286abbb7bf5fbce50481a0bbbd.tar.xz | |
cmd/compile: prevent un-necessary wrapping in switch statement
Follow up discussion in CL 594575.
The wrapping in "any" is only necessary if either casType or tagType is
an interface, as "==" in this situation is implemented by upconverting
to an interface anyway.
Change-Id: I73da771d25685a23eec612ac696965c892db4764
Reviewed-on: https://go-review.googlesource.com/c/go/+/596555
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 8fed138a4a..c1560941b8 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -1665,7 +1665,7 @@ func (w *writer) switchStmt(stmt *syntax.SwitchStmt) { Outer: for _, clause := range stmt.Body { for _, cas := range syntax.UnpackListExpr(clause.Cases) { - if casType := w.p.typeOf(cas); !types2.AssignableTo(casType, tagType) { + if casType := w.p.typeOf(cas); !types2.AssignableTo(casType, tagType) && (types2.IsInterface(casType) || types2.IsInterface(tagType)) { tagType = types2.NewInterfaceType(nil, nil) break Outer } |
