aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/scala/async/internal/AsyncAnalysis.scala3
-rw-r--r--src/test/scala/scala/async/neg/NakedAwait.scala10
2 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncAnalysis.scala b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
index 62842c9..122109e 100644
--- a/src/main/scala/scala/async/internal/AsyncAnalysis.scala
+++ b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
@@ -63,6 +63,9 @@ trait AsyncAnalysis {
case ValDef(mods, _, _, _) if mods.hasFlag(Flag.LAZY) =>
// TODO lift this restriction
abort(tree.pos, "lazy vals are illegal within an async block")
+ case CaseDef(_, guard, _) if guard exists isAwait =>
+ // TODO lift this restriction
+ reportUnsupportedAwait(tree, "pattern guard")
case _ =>
super.traverse(tree)
}
diff --git a/src/test/scala/scala/async/neg/NakedAwait.scala b/src/test/scala/scala/async/neg/NakedAwait.scala
index aa62d37..ba388c5 100644
--- a/src/test/scala/scala/async/neg/NakedAwait.scala
+++ b/src/test/scala/scala/async/neg/NakedAwait.scala
@@ -133,6 +133,16 @@ class NakedAwait {
}
@Test
+ def guard() {
+ expectError("await must not be used under a pattern guard.") {
+ """
+ | import _root_.scala.async.internal.AsyncId._
+ | async { 1 match { case _ if await(true) => } }
+ """.stripMargin
+ }
+ }
+
+ @Test
def nestedMethod() {
expectError("await must not be used under a nested method.") {
"""