]> Cypherpunks.ru repositories - gostls13.git/blob - test/fixedbugs/issue59411.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / fixedbugs / issue59411.go
1 // run
2
3 // Copyright 2023 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 package main
8
9 import (
10         "math"
11         "reflect"
12 )
13
14 func main() {
15         for i := 0; i < 100; i++ {
16                 f()
17                 g()
18         }
19 }
20
21 func f() {
22         // Allocate map.
23         m := map[float64]int{}
24         // Fill to just before a growth trigger.
25         const N = 13 << 4 // 6.5 * 2 * 2^k
26         for i := 0; i < N; i++ {
27                 m[math.NaN()] = i
28         }
29         // Trigger growth.
30         m[math.NaN()] = N
31
32         // Iterate through map.
33         i := 0
34         for range m {
35                 if i == 6 {
36                         // Partway through iteration, clear the map.
37                         clear(m)
38                 } else if i > 6 {
39                         // If we advance to the next iteration, that's a bug.
40                         panic("BAD")
41                 }
42                 i++
43         }
44         if len(m) != 0 {
45                 panic("clear did not empty the map")
46         }
47 }
48
49 func g() {
50         // Allocate map.
51         m := map[float64]int{}
52         // Fill to just before a growth trigger.
53         const N = 13 << 4 // 6.5 * 2 * 2^k
54         for i := 0; i < N; i++ {
55                 m[math.NaN()] = i
56         }
57         // Trigger growth.
58         m[math.NaN()] = N
59
60         // Iterate through map.
61         i := 0
62         v := reflect.ValueOf(m)
63         iter := v.MapRange()
64         for iter.Next() {
65                 if i == 6 {
66                         // Partway through iteration, clear the map.
67                         v.Clear()
68                 } else if i > 6 {
69                         // If we advance to the next iteration, that's a bug.
70                         panic("BAD")
71                 }
72                 i++
73         }
74         if v.Len() != 0 {
75                 panic("clear did not empty the map")
76         }
77 }