Skip to content

Commit f9eb27d

Browse files
committed
Avoid NotImplementedError awaiting a Future[Nothing]
`gen.mkZero(NothingTpe)` gives the tree `Predef.???`. Instead, we should leave the `await` field uninitialized with `ValDef(..., rhs = EmptyTree)`. Fixes #66
1 parent f77d119 commit f9eb27d

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/main/scala/scala/async/internal/Lifter.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ trait Lifter {
113113
sym.setFlag(MUTABLE | STABLE | PRIVATE | LOCAL)
114114
sym.name = name.fresh(sym.name.toTermName)
115115
sym.modifyInfo(_.deconst)
116-
val zeroRhs = atPos(t.pos)(gen.mkZero(vd.symbol.info))
117-
treeCopy.ValDef(vd, Modifiers(sym.flags), sym.name, TypeTree(sym.tpe).setPos(t.pos), zeroRhs)
116+
treeCopy.ValDef(vd, Modifiers(sym.flags), sym.name, TypeTree(sym.tpe).setPos(t.pos), EmptyTree)
118117
case dd@DefDef(_, _, tparams, vparamss, tpt, rhs) =>
119118
sym.name = this.name.fresh(sym.name.toTermName)
120119
sym.setFlag(PRIVATE | LOCAL)

src/test/scala/scala/async/run/toughtype/ToughType.scala

+16
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,22 @@ class ToughTypeSpec {
211211
}(SomeExecutionContext)
212212
}
213213
}
214+
215+
}
216+
217+
@Test def ticket66Nothing() {
218+
import scala.concurrent.Future
219+
import scala.concurrent.ExecutionContext.Implicits.global
220+
val e = new Exception()
221+
val f: Future[Nothing] = Future.failed(e)
222+
val f1 = async {
223+
await(f)
224+
}
225+
try {
226+
Await.result(f1, 5.seconds)
227+
} catch {
228+
case `e` =>
229+
}
214230
}
215231
}
216232

0 commit comments

Comments
 (0)