aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/scala/async/internal/AnfTransform.scala6
-rw-r--r--src/test/scala/scala/async/run/match0/Match0.scala21
2 files changed, 24 insertions, 3 deletions
diff --git a/src/main/scala/scala/async/internal/AnfTransform.scala b/src/main/scala/scala/async/internal/AnfTransform.scala
index 80f8161..c6e5bcb 100644
--- a/src/main/scala/scala/async/internal/AnfTransform.scala
+++ b/src/main/scala/scala/async/internal/AnfTransform.scala
@@ -87,7 +87,7 @@ private[async] trait AnfTransform {
case _ => Assign(Ident(varDef.symbol), cast(orig))
}
}.setType(orig.tpe)
- val ifWithAssign = treeCopy.If(tree, cond, branchWithAssign(thenp), branchWithAssign(elsep))
+ val ifWithAssign = treeCopy.If(tree, cond, branchWithAssign(thenp), branchWithAssign(elsep)).setType(definitions.UnitTpe)
stats :+ varDef :+ ifWithAssign :+ gen.mkAttributedStableRef(varDef.symbol)
}
@@ -107,9 +107,9 @@ private[async] trait AnfTransform {
case b@Block(caseStats, caseExpr) => treeCopy.Block(b, caseStats, typedAssign(caseExpr))
case _ => typedAssign(body)
}
- treeCopy.CaseDef(cd, pat, guard, newBody)
+ treeCopy.CaseDef(cd, pat, guard, newBody).setType(definitions.UnitTpe)
}
- val matchWithAssign = treeCopy.Match(tree, scrut, casesWithAssign)
+ val matchWithAssign = treeCopy.Match(tree, scrut, casesWithAssign).setType(definitions.UnitTpe)
require(matchWithAssign.tpe != null, matchWithAssign)
stats :+ varDef :+ matchWithAssign :+ gen.mkAttributedStableRef(varDef.symbol)
}
diff --git a/src/test/scala/scala/async/run/match0/Match0.scala b/src/test/scala/scala/async/run/match0/Match0.scala
index 49a3a69..7c392ab 100644
--- a/src/test/scala/scala/async/run/match0/Match0.scala
+++ b/src/test/scala/scala/async/run/match0/Match0.scala
@@ -125,4 +125,25 @@ class MatchSpec {
}
m4("") mustBe 0
}
+
+ @Test def bugCastBoxedUnitToStringMatch() {
+ import scala.async.internal.AsyncId.{async, await}
+ def foo = async {
+ val p2 = await(5)
+ "foo" match {
+ case p3: String =>
+ p2.toString
+ }
+ }
+ foo mustBe "5"
+ }
+
+ @Test def bugCastBoxedUnitToStringIf() {
+ import scala.async.internal.AsyncId.{async, await}
+ def foo = async {
+ val p2 = await(5)
+ if (true) p2.toString else p2.toString
+ }
+ foo mustBe "5"
+ }
}