| // compile |
| |
| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Issue 57955: ARM assembler fails to handle certain cases. |
| |
| package main |
| |
| func main() { |
| Decode[int16](nil) |
| Decode[uint16](nil) |
| Decode[float64](nil) |
| } |
| |
| func DecodeInt16(b []byte) (int16, int) { |
| return 0, 0 |
| } |
| |
| func DecodeUint16(b []byte) (uint16, int) { |
| return 0, 0 |
| } |
| |
| func DecodeFloat64(b []byte) (float64, int) { |
| return 0, 0 |
| } |
| |
| func Decode[T any](b []byte) (T, int) { |
| switch any(*new(T)).(type) { |
| case int16: |
| v, n := DecodeInt16(b) |
| return any(v).(T), n |
| case uint16: |
| v, n := DecodeUint16(b) |
| return any(v).(T), n |
| case float64: |
| v, n := DecodeFloat64(b) |
| return any(v).(T), n |
| default: |
| panic("") |
| } |
| } |