From: Rongrong Date: Thu, 12 Feb 2026 06:56:43 +0000 (+0800) Subject: [release-branch.go1.26] cmd/compile: rewriteFixedLoad: ensure AuxInt is sign-extended X-Git-Tag: go1.26.1~17 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=167ef716baab4dcb4b2e74e9a963f9db3a68380d;p=gostls13.git [release-branch.go1.26] cmd/compile: rewriteFixedLoad: ensure AuxInt is sign-extended CL 701297 accidentailly broke the type casting behavior for Hash. Previously, the generated rules for Hash shared a common pattern: v.AuxInt = int32ToAuxInt(fixed32(config, sym, off)) which inherently equaled to a signed-extend: v.AuxInt = int64(int32(types.TypeHash(...))) The pattern in CL 701297 was however: v.AuxInt = int64(types.TypeHash(t)) Since types.TypeHash() returns a uint32, casting it to a wider integer implies zero-extend. This diverges from the definition of AuxInt, in which "Unused portions are filled by sign-extending the used portion, even if the represented value is unsigned." As a result, ssa.checkFunc(), where AuxInt is checked against the mentioned rule, is unhappy and shouts: internal compiler error: 'typeAsserts': bad int32 AuxInt value for v1317 Reproduce it with: GOARCH=mips go tool compile -m -d=ssa/check/on test/devirtualization.go This is only reproducible with GOARCH=mips/mipsle (cross and native). Probably the rewrite rules of other architectures prevent Hash from running into rewriteFixedLoad. Fix it by emit sign-extend properly. Additionally, do the same for Kind_ as reflectdata.ABIKindOfType() also returns a fragile unsigned interger (uint8). Updates #67304 Fixes #77786 Change-Id: Ib4f3c94c0e3908698868449db2fdcdf4541f2e7e Reviewed-on: https://go-review.googlesource.com/c/go/+/744860 Reviewed-by: Cherry Mui Reviewed-by: Jake Bailey Reviewed-by: Keith Randall Auto-Submit: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI (cherry picked from commit a78df5aa0afcd64935f89577c0da0ed2315014ea) Reviewed-on: https://go-review.googlesource.com/c/go/+/748780 Reviewed-by: David Chase --- diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 032915f701..29222ffc89 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -2169,11 +2169,11 @@ func rewriteFixedLoad(v *Value, sym Sym, sb *Value, off int64) *Value { return v case "Hash": v.reset(OpConst32) - v.AuxInt = int64(types.TypeHash(t)) + v.AuxInt = int64(int32(types.TypeHash(t))) return v case "Kind_": v.reset(OpConst8) - v.AuxInt = int64(reflectdata.ABIKindOfType(t)) + v.AuxInt = int64(int8(reflectdata.ABIKindOfType(t))) return v case "GCData": gcdata, _ := reflectdata.GCSym(t, true)