Skip to content

Compiler inserting ??? with inline and erased terms #11996

Closed
@japgolly

Description

@japgolly

Compiler version

3.0.1-RC1-bin-20210402-775d881-NIGHTLY

Minimized code

final class UnivEq[A]

object UnivEq:
  erased def force[A]: UnivEq[A] =
    compiletime.erasedValue

extension [A](a: A)
  inline def ==*[B >: A](b: B)(using erased UnivEq[B]): Boolean = a == b
  inline def !=*[B >: A](b: B)(using erased UnivEq[B]): Boolean = a != b

case class I(i: Int)

@main def main = {
  def test[A](a: A, b: A): Unit = {
    erased given UnivEq[A] = UnivEq.force[A]
    assert(a ==* a)
    assert(a !=* b)
  }
  println("Test starting...")
  test(I(1), I(2)) // error
  test(1, 2)
  test(true, false)
}

Output

> sbt run

[info] compiling 1 Scala source to ~/scala3bug/sbt/target/scala-3.0.1-RC1/classes ...
[info] done compiling
[info] running main 
Test starting...
[error] (run-main-c) scala.NotImplementedError: an implementation is missing
[error] scala.NotImplementedError: an implementation is missing
[error] 	at scala.Predef$.$qmark$qmark$qmark(Predef.scala:345)
[error] 	at BUG$package$.test$1(BUG.scala:16)
[error] 	at BUG$package$.main(BUG.scala:20)
[error] 	at main.main(BUG.scala:13)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] Nonzero exit code: 1
[error] (Compile / run) Nonzero exit code: 1
[error] Total time: 0 s, completed 6 Apr. 2021, 12:04:35 pm

Expectation

No runtime exception should be thrown. The compiler has inserted a ??? somewhere.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions