File tree Expand file tree Collapse file tree 2 files changed +18
-2
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -41,7 +41,9 @@ object ProtoTypes {
4141 /** Test compatibility after normalization in a fresh typerstate. */
4242 def normalizedCompatible (tp : Type , pt : Type )(implicit ctx : Context ) = ctx.typerState.test {
4343 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
4547 }
4648
4749 private def disregardProto (pt : Type )(implicit ctx : Context ): Boolean = pt.dealias match {
@@ -101,7 +103,8 @@ object ProtoTypes {
101103 val mbr = if (privateOK) tp1.member(name) else tp1.nonPrivateMember(name)
102104 def qualifies (m : SingleDenotation ) =
103105 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
105108 mbr match { // hasAltWith inlined for performance
106109 case mbr : SingleDenotation => mbr.exists && qualifies(mbr)
107110 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