Skip to content

Commit e7c9fce

Browse files
committed
Fix #5044: guard against forward references in the TypeTree of New trees
1 parent 19cdeb4 commit e7c9fce

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

compiler/src/dotty/tools/dotc/typer/RefChecks.scala

+6-2
Original file line numberDiff line numberDiff line change
@@ -1010,9 +1010,14 @@ class RefChecks extends MiniPhase { thisPhase =>
10101010
}
10111011

10121012
override def transformNew(tree: New)(implicit ctx: Context) = {
1013-
val sym = tree.tpe.typeSymbol
1013+
val tpe = tree.tpe
1014+
val sym = tpe.typeSymbol
10141015
checkUndesiredProperties(sym, tree.pos)
10151016
currentLevel.enterReference(sym, tree.pos)
1017+
tpe.dealias.foreachPart {
1018+
case TermRef(_, s: Symbol) => currentLevel.enterReference(s, tree.pos)
1019+
case _ =>
1020+
}
10161021
tree
10171022
}
10181023
}
@@ -1643,4 +1648,3 @@ class RefChecks extends MiniPhase { thisPhase =>
16431648
}
16441649
}
16451650
*/
1646-

tests/neg/i5044a.scala

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class I0 {
2+
class I1
3+
def i3 = {
4+
val i4 = new i5.I1 // error: `i5` is a forward reference extending over the definition of `i4`
5+
val i5 = new I0
6+
}
7+
}

tests/neg/i5044b.scala

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class I0 {
2+
class I1
3+
def i3 = {
4+
type T = i5.I1
5+
val i4 = new T // error: `i5` is a forward reference extending over the definition of `i4`
6+
val i5 = new I0
7+
}
8+
}

0 commit comments

Comments
 (0)