Skip to content

Commit 9b3c727

Browse files
committed
Survive class of errors in implicit search
An `C.this` term with erroneous class `C` will get a `NoPrefix` type. A subsequent implicit search on this crashed. This is fixed now. Fixes #324.
1 parent 13b6165 commit 9b3c727

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

src/dotty/tools/dotc/typer/Implicits.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,8 @@ trait Implicits { self: Typer =>
402402
|| (to isRef defn.ObjectClass)
403403
|| (to isRef defn.UnitClass)
404404
|| (from.tpe isRef defn.NothingClass)
405-
|| (from.tpe isRef defn.NullClass)) NoImplicitMatches
405+
|| (from.tpe isRef defn.NullClass)
406+
|| (from.tpe eq NoPrefix)) NoImplicitMatches
406407
else
407408
try inferImplicit(to.stripTypeVar.widenExpr, from, from.pos)
408409
catch {

test/dotc/tests.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ class tests extends CompilerTest {
155155
@Test def neg_i0091_infpaths = compileFile(negDir, "i0091-infpaths", xerrors = 3)
156156
@Test def neg_i0248_inherit_refined = compileFile(negDir, "i0248-inherit-refined", xerrors = 4)
157157
@Test def neg_i0281 = compileFile(negDir, "i0281-null-primitive-conforms", xerrors = 3)
158+
@Test def neg_i324 = compileFile(negDir, "i324", xerrors = 2)
158159
@Test def neg_i583 = compileFile(negDir, "i0583-skolemize", xerrors = 2)
159160
@Test def neg_i941 = compileFile(negDir, "i941", xerrors = 3)
160161
@Test def neg_finalSealed = compileFile(negDir, "final-sealed", xerrors = 2)

tests/neg/i324.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class O
2+
object O {
3+
val x: this.type = OO.this
4+
val y: O = OO.this
5+
}

0 commit comments

Comments
 (0)