File tree Expand file tree Collapse file tree 2 files changed +41
-0
lines changed Expand file tree Collapse file tree 2 files changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -148,6 +148,7 @@ class tests extends CompilerTest {
148
148
@ Test def neg_boundspropagation = compileFile(negDir, " boundspropagation" , xerrors = 5 )
149
149
@ Test def neg_refinedSubtyping = compileFile(negDir, " refinedSubtyping" , xerrors = 2 )
150
150
@ Test def neg_hklower = compileFile(negDir, " hklower" , xerrors = 3 )
151
+ @ Test def neg_Iter2 = compileFile(negDir, " Iter2" , xerrors = 2 )
151
152
@ Test def neg_i0091_infpaths = compileFile(negDir, " i0091-infpaths" , xerrors = 3 )
152
153
@ Test def neg_i0248_inherit_refined = compileFile(negDir, " i0248-inherit-refined" , xerrors = 4 )
153
154
@ Test def neg_i0281 = compileFile(negDir, " i0281-null-primitive-conforms" , xerrors = 3 )
Original file line number Diff line number Diff line change
1
+ // NOTE: this test case is very fragile, removing seemingly unrelated code like
2
+ // the "Dummy" trait somehow changes how the types of cget and dget are inferred
3
+ // and avoids the bug.
4
+
5
+ object Test {
6
+ trait Dummy {
7
+ def foo : Unit = {
8
+ var i = 0
9
+ i += 1
10
+ }
11
+ }
12
+
13
+ trait FromIterator [+ C [X ] <: Iterable [X ]] {
14
+ def get (): C [Int ]
15
+ }
16
+
17
+ trait Iterable [+ IA ] extends FromIterator [Iterable ]
18
+ trait SubIterable [+ IA ] extends Iterable [IA ] with FromIterator [SubIterable ]
19
+
20
+ class IterableC extends Iterable [Int ] { def get () = this }
21
+ class SubIterableC extends SubIterable [Int ] { def get () = this }
22
+
23
+
24
+ implicit class IterableTransforms [A , C [X ] <: Iterable [X ], D [X ] <: SubIterable [X ]]
25
+ (val dummy : Unit ) {
26
+ def foo (c : Iterable [A ] with FromIterator [C ], d : Iterable [A ] with FromIterator [D ]): Unit = {
27
+ var cget = c.get()
28
+ var dget = d.get()
29
+ dget = cget // error
30
+ cget = dget // error
31
+ }
32
+ }
33
+
34
+ def main (args : Array [String ]): Unit = {
35
+ new IterableTransforms (()).foo(new IterableC , new SubIterableC )
36
+ // java.lang.ClassCastException: Test$IterableC cannot be cast to Test$SubIterable
37
+ }
38
+ }
39
+
40
+
You can’t perform that action at this time.
0 commit comments