|  | // 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) | 
|  | } |