Skip to content

Commit 5c7ef22

Browse files
authored
Merge pull request #1997 from dotty-staging/fix-#1992
Fix off-by-one error in forward reference checking
2 parents 3552326 + 815e426 commit 5c7ef22

File tree

4 files changed

+18
-2
lines changed

4 files changed

+18
-2
lines changed

compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,7 +1062,7 @@ object messages {
10621062
|
10631063
|Define `${definition.name}` before it is used,
10641064
|or move the definition of `${value.name}` so it does not appear between
1065-
|the declartion of `${definition.name}` and its use,
1065+
|the declaration of `${definition.name}` and its use,
10661066
|or define `${value.name}` as lazy.
10671067
|""".stripMargin
10681068
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,7 @@ class RefChecks extends MiniPhase { thisTransformer =>
789789
val sym = tree.symbol
790790
if (sym.exists && sym.owner.isTerm && !sym.is(Lazy))
791791
currentLevel.levelAndIndex.get(sym) match {
792-
case Some((level, symIdx)) if symIdx < level.maxIndex =>
792+
case Some((level, symIdx)) if symIdx <= level.maxIndex =>
793793
ctx.error(ForwardReferenceExtendsOverDefinition(sym, level.refSym), level.refPos)
794794
case _ =>
795795
}

tests/neg/i1992.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
object Test {
2+
def main(args: Array[String]) = {
3+
val x: Int => Unit =
4+
y => println(x) // error: `x` is a forward reference
5+
implicit val z: String => Unit =
6+
y => println(implicitly[String => Unit]) // error: `z` is a forward reference
7+
}
8+
}
9+

tests/neg/i2005.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
object Test {
3+
val a = 42
4+
def main(args: Array[String]) = {
5+
val a: Int = a // error
6+
}
7+
}

0 commit comments

Comments
 (0)