Skip to content

Implicit search assertion failed in macro, in combination with implicits defined in Scala 2 #11628

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
jodersky opened this issue Mar 6, 2021 · 0 comments · Fixed by #11629
Closed

Comments

@jodersky
Copy link
Contributor

jodersky commented Mar 6, 2021

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
odersky added a commit to dotty-staging/dotty that referenced this issue Mar 6, 2021
nicolasstucki added a commit to dotty-staging/dotty that referenced this issue Mar 8, 2021
Was failing in non-bootrapped
nicolasstucki added a commit that referenced this issue Mar 8, 2021
@Kordyjan Kordyjan added this to the 3.0.0 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants