From: David Chase Date: Thu, 11 Sep 2025 10:51:20 +0000 (-0400) Subject: [dev.simd] cmd/compile: widen index for simd intrinsics jumptable X-Git-Tag: go1.26rc1~147^2~69 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=31b664d40b823259fc96253b7e6e4a0aba093dca;p=gostls13.git [dev.simd] cmd/compile: widen index for simd intrinsics jumptable Feeding an unconverted uint8 to the jumptable can cause problems either in constant propagation or later at runtime, depending on details of the input code. Change-Id: I5fa2299a77a73172349a165f773cf9d1198212bc Reviewed-on: https://go-review.googlesource.com/c/go/+/702755 LUCI-TryBot-Result: Go LUCI Reviewed-by: Junyang Shao --- diff --git a/src/cmd/compile/internal/ssagen/intrinsics.go b/src/cmd/compile/internal/ssagen/intrinsics.go index 95da078bba..ce9a76f6b8 100644 --- a/src/cmd/compile/internal/ssagen/intrinsics.go +++ b/src/cmd/compile/internal/ssagen/intrinsics.go @@ -1697,11 +1697,13 @@ func immJumpTable(s *state, idx *ssa.Value, intrinsicCall *ir.CallExpr, genOp fu // Make blocks we'll need. bEnd := s.f.NewBlock(ssa.BlockPlain) - t := types.Types[types.TUINT8] if !idx.Type.IsKind(types.TUINT8) { panic("immJumpTable expects uint8 value") } + // We will exhaust 0-255, so no need to check the bounds. + t := types.Types[types.TUINTPTR] + idx = s.conv(nil, idx, idx.Type, t) b := s.curBlock b.Kind = ssa.BlockJumpTable