]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.simd] cmd/compile: widen index for simd intrinsics jumptable
authorDavid Chase <drchase@google.com>
Thu, 11 Sep 2025 10:51:20 +0000 (06:51 -0400)
committerDavid Chase <drchase@google.com>
Thu, 18 Sep 2025 19:35:38 +0000 (12:35 -0700)
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
src/cmd/compile/internal/ssagen/intrinsics.go

index 95da078bba7ef622b1b510084c0b61d5b1f6ad47..ce9a76f6b848f6f43ecb8c6c871551c75fecc99b 100644 (file)
@@ -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