mirror of
https://github.com/golang/go
synced 2024-11-17 09:44:48 -07:00
[dev.unified] cmd/compile/internal/typecheck: replace unreachable code with assert
Since the removal of -G=0 mode, IR is always well-typed. And in well-typed IR, convlit will always returns expressions having real types (i.e., not untyped). Change-Id: I1ac99a88c94777829852519347a716d19af7948c Reviewed-on: https://go-review.googlesource.com/c/go/+/413363 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
20e1d5ac8c
commit
c70e93ff3d
@ -301,24 +301,14 @@ func assignconvfn(n ir.Node, t *types.Type, context func() string) ir.Node {
|
||||
|
||||
n = convlit1(n, t, false, context)
|
||||
if n.Type() == nil {
|
||||
return n
|
||||
base.Fatalf("cannot assign %v to %v", n, t)
|
||||
}
|
||||
if n.Type().IsUntyped() {
|
||||
base.Fatalf("%L has untyped type", n)
|
||||
}
|
||||
if t.Kind() == types.TBLANK {
|
||||
return n
|
||||
}
|
||||
|
||||
// Convert ideal bool from comparison to plain bool
|
||||
// if the next step is non-bool (like interface{}).
|
||||
if n.Type() == types.UntypedBool && !t.IsBoolean() {
|
||||
if n.Op() == ir.ONAME || n.Op() == ir.OLITERAL {
|
||||
r := ir.NewConvExpr(base.Pos, ir.OCONVNOP, nil, n)
|
||||
r.SetType(types.Types[types.TBOOL])
|
||||
r.SetTypecheck(1)
|
||||
r.SetImplicit(true)
|
||||
n = r
|
||||
}
|
||||
}
|
||||
|
||||
if types.Identical(n.Type(), t) {
|
||||
return n
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user