File tree 2 files changed +18
-2
lines changed
compiler/src/dotty/tools/dotc/typer 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -41,7 +41,9 @@ object ProtoTypes {
41
41
/** Test compatibility after normalization in a fresh typerstate. */
42
42
def normalizedCompatible (tp : Type , pt : Type )(implicit ctx : Context ) = ctx.typerState.test {
43
43
val normTp = normalize(tp, pt)
44
- isCompatible(normTp, pt) || pt.isRef(defn.UnitClass ) && normTp.isParameterless
44
+ isCompatible(normTp, pt) ||
45
+ pt.isRef(defn.UnitClass ) && normTp.isParameterless ||
46
+ pt.isInstanceOf [ApplyingProto ] && isCompatible(tp, pt) // check i3352
45
47
}
46
48
47
49
private def disregardProto (pt : Type )(implicit ctx : Context ): Boolean = pt.dealias match {
@@ -101,7 +103,8 @@ object ProtoTypes {
101
103
val mbr = if (privateOK) tp1.member(name) else tp1.nonPrivateMember(name)
102
104
def qualifies (m : SingleDenotation ) =
103
105
memberProto.isRef(defn.UnitClass ) ||
104
- compat.normalizedCompatible(m.info, memberProto)
106
+ compat.normalizedCompatible(m.info, memberProto) ||
107
+ memberProto.isInstanceOf [ApplyingProto ] && compat.normalizedCompatible(m.namedType, memberProto) // check i3352
105
108
mbr match { // hasAltWith inlined for performance
106
109
case mbr : SingleDenotation => mbr.exists && qualifies(mbr)
107
110
case _ => mbr hasAltWith qualifies
Original file line number Diff line number Diff line change
1
+ class Test {
2
+ class Foo {
3
+ def bar (x : String ): Int = 1
4
+ }
5
+
6
+ implicit class FooOps (foo : Foo ) {
7
+ def bar (x : Int , y : Int = 2 ): Int = 2 // compiles with no default argument
8
+ }
9
+
10
+ def test (foo : Foo ): Unit = {
11
+ foo.bar(1 )
12
+ }
13
+ }
You can’t perform that action at this time.
0 commit comments