mirror of
https://github.com/golang/go
synced 2024-11-24 01:20:08 -07:00
a34fddf46c
The table of rewrites in ssa/cse is not sized appropriately for ssa IDs that are created during copying of selects into new blocks. Fixes #17918 Change-Id: I65fe86c6aab5efa679aa473aadc4ee6ea882cd41 Reviewed-on: https://go-review.googlesource.com/33240 Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
42 lines
619 B
Go
42 lines
619 B
Go
// compile
|
|
|
|
// Copyright 2016 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 17918: slice out-of-bounds in ssa/cse
|
|
|
|
package dead
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
units = []struct {
|
|
divisor time.Duration
|
|
unit rune
|
|
}{
|
|
{1000000, 's'},
|
|
{60, 'm'},
|
|
{60, 'h'},
|
|
{24, 'd'},
|
|
{7, 'w'},
|
|
}
|
|
)
|
|
|
|
func foobar(d time.Duration) string {
|
|
d /= time.Microsecond
|
|
unit := 'u'
|
|
|
|
for _, f := range units {
|
|
if d%f.divisor != 0 {
|
|
break
|
|
}
|
|
d /= f.divisor
|
|
unit = f.unit
|
|
}
|
|
return fmt.Sprintf("%d%c", d, unit)
|
|
}
|