X7ROOT File Manager
Current Path:
/opt/golang/1.19.4/src/cmd/compile/internal/types2/testdata/fixedbugs
opt
/
golang
/
1.19.4
/
src
/
cmd
/
compile
/
internal
/
types2
/
testdata
/
fixedbugs
/
📁
..
📄
issue20583.go
(410 B)
📄
issue23203a.go
(306 B)
📄
issue23203b.go
(306 B)
📄
issue25838.go
(301 B)
📄
issue26390.go
(241 B)
📄
issue28251.go
(1.25 KB)
📄
issue39634.go
(3.03 KB)
📄
issue39664.go
(296 B)
📄
issue39680.go
(533 B)
📄
issue39693.go
(424 B)
📄
issue39699.go
(500 B)
📄
issue39711.go
(496 B)
📄
issue39723.go
(350 B)
📄
issue39725.go
(523 B)
📄
issue39754.go
(579 B)
📄
issue39755.go
(507 B)
📄
issue39768.go
(572 B)
📄
issue39938.go
(915 B)
📄
issue39948.go
(242 B)
📄
issue39976.go
(430 B)
📄
issue39982.go
(539 B)
📄
issue40038.go
(270 B)
📄
issue40056.go
(336 B)
📄
issue40057.go
(328 B)
📄
issue40301.go
(256 B)
📄
issue40350.go
(367 B)
📄
issue40684.go
(372 B)
📄
issue40789.go
(614 B)
📄
issue41124.go
(1.99 KB)
📄
issue42695.go
(533 B)
📄
issue42758.go
(645 B)
📄
issue42881.go
(565 B)
📄
issue42987.go
(294 B)
📄
issue43056.go
(478 B)
📄
issue43087.go
(715 B)
📄
issue43109.go
(324 B)
📄
issue43110.go
(785 B)
📄
issue43124.go
(385 B)
📄
issue43125.go
(253 B)
📄
issue43190.go
(456 B)
📄
issue43527.go
(371 B)
📄
issue43671.go
(1.11 KB)
📄
issue44688.go
(1.01 KB)
📄
issue44799.go
(530 B)
📄
issue45114.go
(254 B)
📄
issue45548.go
(302 B)
📄
issue45550.go
(303 B)
📄
issue45635.go
(600 B)
📄
issue45639.go
(619 B)
📄
issue45920.go
(590 B)
📄
issue45985.go
(315 B)
📄
issue46090.go
(305 B)
📄
issue46275.go
(450 B)
📄
issue46461.go
(510 B)
📄
issue46583.go
(576 B)
📄
issue47031.go
(337 B)
📄
issue47115.go
(830 B)
📄
issue47127.go
(1.93 KB)
📄
issue47411.go
(988 B)
📄
issue47747.go
(1.72 KB)
📄
issue47796.go
(1.05 KB)
📄
issue47818.go
(2.4 KB)
📄
issue47887.go
(554 B)
📄
issue47968.go
(664 B)
📄
issue47996.go
(312 B)
📄
issue48008.go
(1.39 KB)
📄
issue48018.go
(394 B)
📄
issue48048.go
(356 B)
📄
issue48082.go
(260 B)
📄
issue48083.go
(258 B)
📄
issue48136.go
(912 B)
📄
issue48234.go
(239 B)
📄
issue48312.go
(475 B)
📄
issue48472.go
(436 B)
📄
issue48529.go
(283 B)
📄
issue48582.go
(486 B)
📄
issue48619.go
(571 B)
📄
issue48656.go
(287 B)
📄
issue48695.go
(264 B)
📄
issue48703.go
(767 B)
📄
issue48712.go
(1.03 KB)
📄
issue48819.go
(340 B)
📄
issue48951.go
(754 B)
📄
issue48962.go
(258 B)
📄
issue48974.go
(455 B)
📄
issue49003.go
(238 B)
📄
issue49005.go
(710 B)
📄
issue49043.go
(517 B)
📄
issue49112.go
(366 B)
📄
issue49179.go
(1009 B)
📄
issue49242.go
(752 B)
📄
issue49247.go
(550 B)
📄
issue49276.go
(975 B)
📄
issue49296.go
(535 B)
📄
issue49439.go
(695 B)
📄
issue49482.go
(912 B)
📄
issue49541.go
(811 B)
📄
issue49579.go
(442 B)
📄
issue49592.go
(235 B)
📄
issue49602.go
(484 B)
📄
issue49705.go
(347 B)
📄
issue49735.go
(439 B)
📄
issue49739.go
(579 B)
📄
issue49864.go
(240 B)
📄
issue50259.go
(347 B)
📄
issue50276.go
(880 B)
📄
issue50281.go
(554 B)
📄
issue50321.go
(248 B)
📄
issue50372.go
(949 B)
📄
issue50417.go
(1.43 KB)
📄
issue50426.go
(1.13 KB)
📄
issue50450.go
(219 B)
📄
issue50516.go
(360 B)
📄
issue50646.go
(732 B)
📄
issue50729.go
(340 B)
📄
issue50755.go
(1.03 KB)
📄
issue50779.go
(392 B)
📄
issue50782.go
(1.73 KB)
📄
issue50816.go
(621 B)
📄
issue50833.go
(369 B)
📄
issue50912.go
(493 B)
📄
issue50918.go
(453 B)
📄
issue50929.go
(1.38 KB)
📄
issue50965.go
(431 B)
📄
issue51048.go
(221 B)
📄
issue51145.go
(439 B)
📄
issue51158.go
(463 B)
📄
issue51229.go
(4.81 KB)
📄
issue51232.go
(780 B)
📄
issue51233.go
(657 B)
📄
issue51257.go
(903 B)
📄
issue51335.go
(414 B)
📄
issue51339.go
(720 B)
📄
issue51360.go
(415 B)
📄
issue51376.go
(658 B)
📄
issue51386.go
(318 B)
📄
issue51437.go
(373 B)
📄
issue51472.go
(1.35 KB)
📄
issue51509.go
(208 B)
📄
issue51525.go
(357 B)
📄
issue51533.go
(390 B)
📄
issue51578.go
(425 B)
📄
issue51593.go
(327 B)
📄
issue51607.go
(1.99 KB)
📄
issue51610.go
(321 B)
📄
issue51616.go
(497 B)
📄
issue51658.go
(775 B)
📄
issue51877.go
(524 B)
📄
issue52031.go
(732 B)
📄
issue52401.go
(273 B)
📄
issue52529.go
(277 B)
📄
issue52698.go
(812 B)
📄
issue52915.go
(569 B)
📄
issue6977.go
(2.33 KB)
Editing: issue51229.go
// Copyright 2022 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. package p // Constraint type inference should be independent of the // ordering of the type parameter declarations. Try all // permutations in the test case below. // Permutations produced by https://go.dev/play/p/PHcZNGJTEBZ. func f00[S1 ~[]E1, S2 ~[]E2, E1 ~byte, E2 ~byte](S1, S2) {} func f01[S2 ~[]E2, S1 ~[]E1, E1 ~byte, E2 ~byte](S1, S2) {} func f02[E1 ~byte, S1 ~[]E1, S2 ~[]E2, E2 ~byte](S1, S2) {} func f03[S1 ~[]E1, E1 ~byte, S2 ~[]E2, E2 ~byte](S1, S2) {} func f04[S2 ~[]E2, E1 ~byte, S1 ~[]E1, E2 ~byte](S1, S2) {} func f05[E1 ~byte, S2 ~[]E2, S1 ~[]E1, E2 ~byte](S1, S2) {} func f06[E2 ~byte, S2 ~[]E2, S1 ~[]E1, E1 ~byte](S1, S2) {} func f07[S2 ~[]E2, E2 ~byte, S1 ~[]E1, E1 ~byte](S1, S2) {} func f08[S1 ~[]E1, E2 ~byte, S2 ~[]E2, E1 ~byte](S1, S2) {} func f09[E2 ~byte, S1 ~[]E1, S2 ~[]E2, E1 ~byte](S1, S2) {} func f10[S2 ~[]E2, S1 ~[]E1, E2 ~byte, E1 ~byte](S1, S2) {} func f11[S1 ~[]E1, S2 ~[]E2, E2 ~byte, E1 ~byte](S1, S2) {} func f12[S1 ~[]E1, E1 ~byte, E2 ~byte, S2 ~[]E2](S1, S2) {} func f13[E1 ~byte, S1 ~[]E1, E2 ~byte, S2 ~[]E2](S1, S2) {} func f14[E2 ~byte, S1 ~[]E1, E1 ~byte, S2 ~[]E2](S1, S2) {} func f15[S1 ~[]E1, E2 ~byte, E1 ~byte, S2 ~[]E2](S1, S2) {} func f16[E1 ~byte, E2 ~byte, S1 ~[]E1, S2 ~[]E2](S1, S2) {} func f17[E2 ~byte, E1 ~byte, S1 ~[]E1, S2 ~[]E2](S1, S2) {} func f18[E2 ~byte, E1 ~byte, S2 ~[]E2, S1 ~[]E1](S1, S2) {} func f19[E1 ~byte, E2 ~byte, S2 ~[]E2, S1 ~[]E1](S1, S2) {} func f20[S2 ~[]E2, E2 ~byte, E1 ~byte, S1 ~[]E1](S1, S2) {} func f21[E2 ~byte, S2 ~[]E2, E1 ~byte, S1 ~[]E1](S1, S2) {} func f22[E1 ~byte, S2 ~[]E2, E2 ~byte, S1 ~[]E1](S1, S2) {} func f23[S2 ~[]E2, E1 ~byte, E2 ~byte, S1 ~[]E1](S1, S2) {} type myByte byte func _(a []byte, b []myByte) { f00(a, b) f01(a, b) f02(a, b) f03(a, b) f04(a, b) f05(a, b) f06(a, b) f07(a, b) f08(a, b) f09(a, b) f10(a, b) f11(a, b) f12(a, b) f13(a, b) f14(a, b) f15(a, b) f16(a, b) f17(a, b) f18(a, b) f19(a, b) f20(a, b) f21(a, b) f22(a, b) f23(a, b) } // Constraint type inference may have to iterate. // Again, the order of the type parameters shouldn't matter. func g0[S ~[]E, M ~map[string]S, E any](m M) {} func g1[M ~map[string]S, S ~[]E, E any](m M) {} func g2[E any, S ~[]E, M ~map[string]S](m M) {} func g3[S ~[]E, E any, M ~map[string]S](m M) {} func g4[M ~map[string]S, E any, S ~[]E](m M) {} func g5[E any, M ~map[string]S, S ~[]E](m M) {} func _(m map[string][]byte) { g0(m) g1(m) g2(m) g3(m) g4(m) g5(m) } // Worst-case scenario. // There are 10 unknown type parameters. In each iteration of // constraint type inference we infer one more, from right to left. // Each iteration looks repeatedly at all 11 type parameters, // requiring a total of 10*11 = 110 iterations with the current // implementation. Pathological case. func h[K any, J ~*K, I ~*J, H ~*I, G ~*H, F ~*G, E ~*F, D ~*E, C ~*D, B ~*C, A ~*B](x A) {} func _(x **********int) { h(x) } // Examples with channel constraints and tilde. func ch1[P chan<- int]() (_ P) { return } // core(P) == chan<- int (single type, no tilde) func ch2[P ~chan int]() { return } // core(P) == ~chan<- int (tilde) func ch3[P chan E, E any](E) { return } // core(P) == chan<- E (single type, no tilde) func ch4[P chan E | ~chan<- E, E any](E) { return } // core(P) == ~chan<- E (tilde) func ch5[P chan int | chan<- int]() { return } // core(P) == chan<- int (not a single type) func _() { // P can be inferred as there's a single specific type and no tilde. var _ chan int = ch1 /* ERROR cannot use ch1.*value of type chan<- int */ () var _ chan<- int = ch1() // P cannot be inferred as there's a tilde. ch2( /* ERROR cannot infer P */ ) type myChan chan int ch2[myChan]() // P can be inferred as there's a single specific type and no tilde. var e int ch3(e) // P cannot be inferred as there's more than one specific type and a tilde. ch4( /* ERROR cannot infer P */ e) _ = ch4[chan int] // P cannot be inferred as there's more than one specific type. ch5( /* ERROR cannot infer P */ ) ch5[chan<- int]() } // test case from issue func equal[M1 ~map[K1]V1, M2 ~map[K2]V2, K1, K2 ~uint32, V1, V2 ~string](m1 M1, m2 M2) bool { if len(m1) != len(m2) { return false } for k, v1 := range m1 { if v2, ok := m2[K2(k)]; !ok || V2(v1) != v2 { return false } } return true } func equalFixed[K1, K2 ~uint32, V1, V2 ~string](m1 map[K1]V1, m2 map[K2]V2) bool { if len(m1) != len(m2) { return false } for k, v1 := range m1 { if v2, ok := m2[K2(k)]; !ok || v1 != V1(v2) { return false } } return true } type ( someNumericID uint32 someStringID string ) func _() { foo := map[uint32]string{10: "bar"} bar := map[someNumericID]someStringID{10: "bar"} equal(foo, bar) }
Upload File
Create Folder