File tree 3 files changed +23
-0
lines changed
compiler/src/dotty/tools/dotc/typer
3 files changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -2130,6 +2130,11 @@ class Namer { typer: Typer =>
2130
2130
val pt = inherited.orElse(expectedDefaultArgType).orElse(fallbackProto).widenExpr
2131
2131
val tp = typedAheadRhs(pt).tpe
2132
2132
if (defaultTp eq pt) && (tp frozen_<:< defaultTp) then
2133
+ // See i21558, the default argument new A(1.0) is of type A[?T]
2134
+ // With an uninterpolated, invariant ?T type variable.
2135
+ // So before we return the default getter parameter type (A[? <: Double])
2136
+ // we want to force ?T to instantiate, so it's poly is removed from the constraint
2137
+ isFullyDefined(tp, ForceDegree .all)
2133
2138
// When possible, widen to the default getter parameter type to permit a
2134
2139
// larger choice of overrides (see `default-getter.scala`).
2135
2140
// For justification on the use of `@uncheckedVariance`, see
Original file line number Diff line number Diff line change
1
+ class Base
2
+ class A [T <: Float ](val f : T ) extends Base
3
+
4
+ def test () = {
5
+ m1(new A (m2()));
6
+
7
+ }
8
+
9
+ def m1 (x : Base ) = {}
10
+ def m2 (p : A [? <: Float ] = new A (1.0f )): Int = 1
Original file line number Diff line number Diff line change
1
+ class Base
2
+ class A [T <: Double ](val f : T ) extends Base
3
+
4
+ class Test :
5
+ def test () = m1(new A (m2()))
6
+
7
+ def m1 (x : Base ): Unit = {}
8
+ def m2 (p : A [? <: Double ] = new A (1.0 )): Int = 2
You can’t perform that action at this time.
0 commit comments