diff --git a/compiler/src/dotty/tools/dotc/transform/PCPCheckAndHeal.scala b/compiler/src/dotty/tools/dotc/transform/PCPCheckAndHeal.scala index f999be7d2e29..a356c270ea8c 100644 --- a/compiler/src/dotty/tools/dotc/transform/PCPCheckAndHeal.scala +++ b/compiler/src/dotty/tools/dotc/transform/PCPCheckAndHeal.scala @@ -93,6 +93,8 @@ class PCPCheckAndHeal(@constructorOnly ictx: Context) extends TreeMapWithStages( checkAnnotations(tree) healInfo(tree, tree.srcPos) super.transform(tree) + case tree: UnApply => + super.transform(tree).withType(healTypeOfTerm(tree.srcPos)(tree.tpe)) case tree: TypeDef if tree.symbol.is(Case) && level > 0 => report.error(reporting.CaseClassInInlinedCode(tree), tree) super.transform(tree) diff --git a/tests/pos-macros/i11211.scala b/tests/pos-macros/i11211.scala new file mode 100644 index 000000000000..2650fa754193 --- /dev/null +++ b/tests/pos-macros/i11211.scala @@ -0,0 +1,19 @@ +import scala.quoted._ +def takeOptionImpl1[T](using Quotes, Type[T]): Unit = '{ + (??? : Option[T]) match + case Some(t) => ??? +} + +def takeOptionImpl2[T](using Quotes, Type[T]): Unit = '{ + (??? : Option[T]) match + case Some(_) | None => ??? +} + +def takeOptionImpl[T](o: Expr[Option[T]], default: Expr[T])(using Quotes, Type[T]): Expr[T] = '{ + $o match { + case Some(t1) => t1 + case None: Option[T] => $default + } +} + +inline def takeOption[T](inline o: Option[T], inline default: T) = ${takeOptionImpl('o, 'default)}