Skip to content

Commit a991cac

Browse files
Merge pull request #6787 from dotty-staging/fix-#6679
Fix #6679: Handle wildcards in PCP check
2 parents 1cec6a9 + 555eed4 commit a991cac

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

compiler/src/dotty/tools/dotc/transform/PCPCheckAndHeal.scala

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,14 @@ class PCPCheckAndHeal(@constructorOnly ictx: Context) extends TreeMapWithStages(
9898
case _: This =>
9999
assert(checkSymLevel(tree.symbol, tree.tpe, tree.sourcePos).isEmpty)
100100
tree
101-
case _: Ident =>
102-
checkSymLevel(tree.symbol, tree.tpe, tree.sourcePos) match {
103-
case Some(tpRef) => tpRef
104-
case _ => tree
101+
case Ident(name) =>
102+
if (name == nme.WILDCARD) {
103+
untpd.Ident(name).withType(checkType(tree.sourcePos).apply(tree.tpe)).withSpan(tree.span)
104+
} else {
105+
checkSymLevel(tree.symbol, tree.tpe, tree.sourcePos) match {
106+
case Some(tpRef) => tpRef
107+
case _ => tree
108+
}
105109
}
106110
case _: TypeTree | _: AppliedTypeTree | _: Apply | _: TypeApply | _: UnApply | Select(_, OuterSelectName(_, _)) =>
107111
tree.withType(checkTp(tree.tpe))

tests/run-macros/i6679.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Ok

tests/run-macros/i6679/Macro_1.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import scala.quoted._
2+
3+
def makeMatch[A: Type](head : Expr[A]) given (qctx : QuoteContext) : Expr[Unit] = {
4+
import qctx.tasty._
5+
6+
val sacrifice = '{ $head match { case _ => ??? } }
7+
sacrifice.unseal
8+
9+
'{ println("Ok") }
10+
}
11+
12+
def mm(implicit qctx : QuoteContext) = makeMatch('{42})
13+
14+
inline def f = ${ mm }

tests/run-macros/i6679/Test_2.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import scala.quoted._
2+
3+
object Test {
4+
5+
def main(args: Array[String]): Unit = {
6+
f
7+
}
8+
}

0 commit comments

Comments
 (0)