Closed
Description
Compiler version
3.0.0-RC1 (also happens on dotty master, which as of this writing is 3.0.0-RC2-bin-SNAPSHOT-nonbootstrapped-git-086d1a8)
Minimized code
macros.scala:
// assume that this conversion utility is defined in Scala 2
class Scala2Conversion[T, V](val f: T => V)
object Scala2Conversion{
implicit def create[T, V](implicit f: T => V): Scala2Conversion[T, V] = new Scala2Conversion(f)
}
// assume this utility in Scala 3, to summon a conversion within a macro
import quoted._
def summonConversionImpl(using qctx: Quotes): Expr[Any] = {
import qctx.reflect._
// hardcoded in this example to look for String to Int
val conversionTpe = TypeRepr.of[Scala2Conversion[String, Int]]
Implicits.search(conversionTpe) match {
case iss: ImplicitSearchSuccess =>
iss.tree.asExpr
case isf: ImplicitSearchFailure =>
report.error(s"can't find conversion")
'{???}
}
}
inline def summonConversion() = ${summonConversionImpl}
main.scala:
implicit def s2i(x: String): Int = x.toInt
def main() = {
summonConversion()
}
Output (click arrow to expand)
[error] 5 | summonConversion()
[error] | ^^^^^^^^^^^^^^^^^^
[error] |Exception occurred while executing macro expansion.
[error] |java.lang.AssertionError: assertion failed
[error] | at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
[error] | at dotty.tools.dotc.typer.EtaExpansion$.etaExpand(EtaExpansion.scala:226)
[error] | at dotty.tools.dotc.typer.Typer.adaptNoArgsUnappliedMethod$2(Typer.scala:3379)
[error] | at dotty.tools.dotc.typer.Typer.adaptNoArgs$1(Typer.scala:3524)
[error] | at dotty.tools.dotc.typer.Typer.adapt1(Typer.scala:3747)
[error] | at dotty.tools.dotc.typer.Typer.adapt(Typer.scala:3054)
[error] | at dotty.tools.dotc.typer.Implicits.typedImplicit(Implicits.scala:1013)
[error] | at dotty.tools.dotc.typer.Implicits.typedImplicit$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.typedImplicit(Typer.scala:102)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.tryImplicit(Implicits.scala:1108)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.rank$1(Implicits.scala:1180)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1289)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1296)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1329)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicit(Implicits.scala:965)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicit$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.inferImplicit(Typer.scala:102)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicitArg(Implicits.scala:834)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicitArg$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.inferImplicitArg(Typer.scala:102)
[error] | at dotty.tools.dotc.typer.Typer.implicitArgs$1(Typer.scala:3214)
[error] | at dotty.tools.dotc.typer.Typer.addImplicitArgs$3(Typer.scala:3250)
[error] | at dotty.tools.dotc.typer.Typer.adaptNoArgsImplicitMethod$2(Typer.scala:3326)
[error] | at dotty.tools.dotc.typer.Typer.adaptNoArgs$1(Typer.scala:3504)
[error] | at dotty.tools.dotc.typer.Typer.adapt1(Typer.scala:3747)
[error] | at dotty.tools.dotc.typer.Typer.adapt(Typer.scala:3054)
[error] | at dotty.tools.dotc.typer.Typer.readapt$1(Typer.scala:3065)
[error] | at dotty.tools.dotc.typer.Typer.adapt1(Typer.scala:3734)
[error] | at dotty.tools.dotc.typer.Typer.adapt(Typer.scala:3054)
[error] | at dotty.tools.dotc.typer.Implicits.typedImplicit(Implicits.scala:1013)
[error] | at dotty.tools.dotc.typer.Implicits.typedImplicit$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.typedImplicit(Typer.scala:102)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.tryImplicit(Implicits.scala:1108)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.rank$1(Implicits.scala:1180)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1289)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1296)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1304)
[error] | at dotty.tools.dotc.typer.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1329)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicit(Implicits.scala:965)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicit$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.inferImplicit(Typer.scala:102)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicitArg(Implicits.scala:834)
[error] | at dotty.tools.dotc.typer.Implicits.inferImplicitArg$(Implicits.scala:760)
[error] | at dotty.tools.dotc.typer.Typer.inferImplicitArg(Typer.scala:102)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$Implicits$.search(QuotesImpl.scala:2332)
[error] | at scala.quoted.runtime.impl.QuotesImpl$reflect$Implicits$.search(QuotesImpl.scala:2331)
[error] | at macros$package$.summonConversionImpl(macros.scala:16)
[error] |
[error] | This location contains code that was inlined from main.scala:5