Skip to content
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

Crash when typing applied polyfunction after match #13950

Closed
KacperFKorban opened this issue Nov 14, 2021 · 1 comment · Fixed by #14075
Closed

Crash when typing applied polyfunction after match #13950

KacperFKorban opened this issue Nov 14, 2021 · 1 comment · Fixed by #14075
Labels
area:typer itype:bug itype:crash regression This worked in a previous version but doesn't anymore
Milestone

Comments

@KacperFKorban
Copy link
Member

Compiler version

master- commit 16f9b22
the crash doesn't happen on the latest nightly 3.1.2-RC1-bin-20211102-82172ed-NIGHTLY

Minimized code

def example =
  (1,2).map[[_] =>> Int]([C] => (x1: C) => x1 match {
    case x2: ([V] => () => Int) =>
      x2[Int]()
  })

Output (click arrow to expand)

-- Unchecked Warning: tests/pos/i13934.scala:3:9 -------------------------------
3 |    case x2: ([V] => () => Int) =>
  |         ^
  |         the type test for [V] => () => Int cannot be checked at runtime
exception while typing x2.apply of class class dotty.tools.dotc.ast.Trees$Select # -1
exception while typing x2.apply[Int] of class class dotty.tools.dotc.ast.Trees$TypeApply # -1
exception while typing x2.apply[Int]() of class class dotty.tools.dotc.ast.Trees$Apply # -1
exception while typing {
  x2.apply[Int]()
} of class class dotty.tools.dotc.ast.Trees$Block # -1
exception while typing return[matchResult1] 
  {
    x2.apply[Int]()
  } of class class dotty.tools.dotc.ast.Trees$Return # -1
exception while typing {
  case val x2: C & ([V] => () => Int) = 
    x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[C & ([V] => () => Int)]
  return[matchResult1] 
    {
      x2.apply[Int]()
    }
} of class class dotty.tools.dotc.ast.Trees$Block # -1
exception while typing if x1.$isInstanceOf[[V] => () => Int] then 
  {
    case val x2: C & ([V] => () => Int) = 
      x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[C & ([V] => () => Int)]
    return[matchResult1] 
      {
        x2.apply[Int]()
      }
  }
 else () of class class dotty.tools.dotc.ast.Trees$If # -1
exception while typing {
  case val x1: (x1 : Object) = x1
  if x1.$isInstanceOf[[V] => () => Int] then 
    {
      case val x2: C & ([V] => () => Int) = 
        x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[C & ([V] => () => Int)]
      return[matchResult1] 
        {
          x2.apply[Int]()
        }
    }
   else ()
  throw new MatchError(x1)
} of class class dotty.tools.dotc.ast.Trees$Block # -1
exception while typing matchResult1[Int]: 
  {
    case val x1: (x1 : Object) = x1
    if x1.$isInstanceOf[[V] => () => Int] then 
      {
        case val x2: C & ([V] => () => Int) = 
          x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
            C & ([V] => () => Int)
          ]
        return[matchResult1] 
          {
            x2.apply[Int]()
          }
      }
     else ()
    throw new MatchError(x1)
  } of class class dotty.tools.dotc.ast.Trees$Labeled # -1
exception while typing def apply[C](x1: C): Int = 
  matchResult1[Int]: 
    {
      case val x1: (x1 : Object) = x1
      if x1.$isInstanceOf[[V] => () => Int] then 
        {
          case val x2: C & ([V] => () => Int) = 
            x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
              C & ([V] => () => Int)
            ]
          return[matchResult1] 
            {
              x2.apply[Int]()
            }
        }
       else ()
      throw new MatchError(x1)
    } of class class dotty.tools.dotc.ast.Trees$DefDef # -1
exception while typing final class $anon() extends Object(), PolyFunction {
  def apply[C](x1: C): Int = 
    matchResult1[Int]: 
      {
        case val x1: (x1 : Object) = x1
        if x1.$isInstanceOf[[V] => () => Int] then 
          {
            case val x2: C & ([V] => () => Int) = 
              x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                C & ([V] => () => Int)
              ]
            return[matchResult1] 
              {
                x2.apply[Int]()
              }
          }
         else ()
        throw new MatchError(x1)
      }
} of class class dotty.tools.dotc.ast.Trees$TypeDef # -1
exception while typing {
  final class $anon() extends Object(), PolyFunction {
    def apply[C](x1: C): Int = 
      matchResult1[Int]: 
        {
          case val x1: (x1 : Object) = x1
          if x1.$isInstanceOf[[V] => () => Int] then 
            {
              case val x2: C & ([V] => () => Int) = 
                x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                  C & ([V] => () => Int)
                ]
              return[matchResult1] 
                {
                  x2.apply[Int]()
                }
            }
           else ()
          throw new MatchError(x1)
        }
  }
  new Object with PolyFunction {...}():([C] => (C) => Int)
} of class class dotty.tools.dotc.ast.Trees$Block # -1
exception while typing val f$proxy1: [C] => (C) => Int = 
  {
    final class $anon() extends Object(), PolyFunction {
      def apply[C](x1: C): Int = 
        matchResult1[Int]: 
          {
            case val x1: (x1 : Object) = x1
            if x1.$isInstanceOf[[V] => () => Int] then 
              {
                case val x2: C & ([V] => () => Int) = 
                  x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                    C & ([V] => () => Int)
                  ]
                return[matchResult1] 
                  {
                    x2.apply[Int]()
                  }
              }
             else ()
            throw new MatchError(x1)
          }
    }
    new Object with PolyFunction {...}():([C] => (C) => Int)
  } of class class dotty.tools.dotc.ast.Trees$ValDef # -1
exception while typing {
  val Tuple_this: (Int, Int) = Tuple2.apply[Int, Int](1, 2)
  val f$proxy1: [C] => (C) => Int = 
    {
      final class $anon() extends Object(), PolyFunction {
        def apply[C](x1: C): Int = 
          matchResult1[Int]: 
            {
              case val x1: (x1 : Object) = x1
              if x1.$isInstanceOf[[V] => () => Int] then 
                {
                  case val x2: C & ([V] => () => Int) = 
                    x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                      C & ([V] => () => Int)
                    ]
                  return[matchResult1] 
                    {
                      x2.apply[Int]()
                    }
                }
               else ()
              throw new MatchError(x1)
            }
      }
      new Object with PolyFunction {...}():([C] => (C) => Int)
    }
  runtime.Tuples.map[[_] =>> Int](Tuple_this, f$proxy1).asInstanceOf[
    Int *: Int *: EmptyTuple
  ]:Int *: Int *: EmptyTuple
} of class class dotty.tools.dotc.ast.Trees$Inlined # -1
exception while typing def example: Int *: Int *: EmptyTuple = 
  {
    val Tuple_this: (Int, Int) = Tuple2.apply[Int, Int](1, 2)
    val f$proxy1: [C] => (C) => Int = 
      {
        final class $anon() extends Object(), PolyFunction {
          def apply[C](x1: C): Int = 
            matchResult1[Int]: 
              {
                case val x1: (x1 : Object) = x1
                if x1.$isInstanceOf[[V] => () => Int] then 
                  {
                    case val x2: C & ([V] => () => Int) = 
                      x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                        C & ([V] => () => Int)
                      ]
                    return[matchResult1] 
                      {
                        x2.apply[Int]()
                      }
                  }
                 else ()
                throw new MatchError(x1)
              }
        }
        new Object with PolyFunction {...}():([C] => (C) => Int)
      }
    runtime.Tuples.map[[_] =>> Int](Tuple_this, f$proxy1).asInstanceOf[
      Int *: Int *: EmptyTuple
    ]:Int *: Int *: EmptyTuple
  } of class class dotty.tools.dotc.ast.Trees$DefDef # -1
exception while typing @SourceFile("tests/pos/i13934.scala") final module class i13934$package()
   extends
 Object() {
  private def writeReplace(): AnyRef = 
    new scala.runtime.ModuleSerializationProxy(classOf[i13934$package.type])
  def example: Int *: Int *: EmptyTuple = 
    {
      val Tuple_this: (Int, Int) = Tuple2.apply[Int, Int](1, 2)
      val f$proxy1: [C] => (C) => Int = 
        {
          final class $anon() extends Object(), PolyFunction {
            def apply[C](x1: C): Int = 
              matchResult1[Int]: 
                {
                  case val x1: (x1 : Object) = x1
                  if x1.$isInstanceOf[[V] => () => Int] then 
                    {
                      case val x2: C & ([V] => () => Int) = 
                        x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                          C & ([V] => () => Int)
                        ]
                      return[matchResult1] 
                        {
                          x2.apply[Int]()
                        }
                    }
                   else ()
                  throw new MatchError(x1)
                }
          }
          new Object with PolyFunction {...}():([C] => (C) => Int)
        }
      runtime.Tuples.map[[_] =>> Int](Tuple_this, f$proxy1).asInstanceOf[
        Int *: Int *: EmptyTuple
      ]:Int *: Int *: EmptyTuple
    }
} of class class dotty.tools.dotc.ast.Trees$TypeDef # -1
exception while typing package <empty> {
  final lazy module val i13934$package: i13934$package = new i13934$package()
  @SourceFile("tests/pos/i13934.scala") final module class i13934$package()
     extends
   Object() {
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[i13934$package.type])
    def example: Int *: Int *: EmptyTuple = 
      {
        val Tuple_this: (Int, Int) = Tuple2.apply[Int, Int](1, 2)
        val f$proxy1: [C] => (C) => Int = 
          {
            final class $anon() extends Object(), PolyFunction {
              def apply[C](x1: C): Int = 
                matchResult1[Int]: 
                  {
                    case val x1: (x1 : Object) = x1
                    if x1.$isInstanceOf[[V] => () => Int] then 
                      {
                        case val x2: C & ([V] => () => Int) = 
                          x1.$asInstanceOf[[V] => () => Int].$asInstanceOf[
                            C & ([V] => () => Int)
                          ]
                        return[matchResult1] 
                          {
                            x2.apply[Int]()
                          }
                      }
                     else ()
                    throw new MatchError(x1)
                  }
            }
            new Object with PolyFunction {...}():([C] => (C) => Int)
          }
        runtime.Tuples.map[[_] =>> Int](Tuple_this, f$proxy1).asInstanceOf[
          Int *: Int *: EmptyTuple
        ]:Int *: Int *: EmptyTuple
      }
  }
} of class class dotty.tools.dotc.ast.Trees$PackageDef # -1
exception occurred while compiling tests/pos/i13934.scala
java.lang.AssertionError: assertion failed:  <none> while compiling tests/pos/i13934.scala
Exception in thread "main" java.lang.AssertionError: assertion failed:  <none>
	at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
	at dotty.tools.dotc.transform.Erasure$Typer.typedSelect(Erasure.scala:734)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2739)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.transform.Erasure$Typer.typedTypeApply(Erasure.scala:828)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2788)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.transform.Erasure$Typer.typedApply(Erasure.scala:850)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2769)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1054)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2777)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.typedReturn(Typer.scala:1725)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2784)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1054)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2777)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.$anonfun$13(Typer.scala:1119)
	at dotty.tools.dotc.typer.Applications.harmonic(Applications.scala:2186)
	at dotty.tools.dotc.typer.Applications.harmonic$(Applications.scala:317)
	at dotty.tools.dotc.typer.Typer.harmonic(Typer.scala:107)
	at dotty.tools.dotc.typer.Typer.typedIf(Typer.scala:1122)
	at dotty.tools.dotc.transform.Erasure$Typer.typedIf(Erasure.scala:897)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2778)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2950)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:1048)
	at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1052)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2777)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedLabeled(Typer.scala:1679)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2762)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.$anonfun$46(Typer.scala:2216)
	at dotty.tools.dotc.typer.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:238)
	at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:2216)
	at dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:968)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2746)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2923)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2414)
	at dotty.tools.dotc.transform.Erasure$Typer.typedClassDef(Erasure.scala:1056)
	at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$1(Typer.scala:2757)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2761)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2923)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:1048)
	at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1052)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2777)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.typedValDef(Typer.scala:2152)
	at dotty.tools.dotc.transform.Erasure$Typer.typedValDef(Erasure.scala:921)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2743)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2923)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:1048)
	at dotty.tools.dotc.typer.Typer.typedInlined(Typer.scala:1815)
	at dotty.tools.dotc.transform.Erasure$Typer.typedInlined(Erasure.scala:912)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2791)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.typer.Typer.$anonfun$46(Typer.scala:2216)
	at dotty.tools.dotc.typer.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:238)
	at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:2216)
	at dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:968)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2746)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2923)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2414)
	at dotty.tools.dotc.transform.Erasure$Typer.typedClassDef(Erasure.scala:1056)
	at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$1(Typer.scala:2757)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2761)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2831)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2923)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2973)
	at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:1066)
	at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:2541)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2802)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2832)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:121)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2897)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2901)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3017)
	at dotty.tools.dotc.transform.Erasure.run(Erasure.scala:132)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:308)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:309)
	at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:261)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
	at dotty.tools.dotc.Run.runPhases$1(Run.scala:272)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:280)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:68)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:289)
	at dotty.tools.dotc.Run.compileSources(Run.scala:222)
	at dotty.tools.dotc.Run.compile(Run.scala:206)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
	at dotty.tools.dotc.Driver.process(Driver.scala:199)
	at dotty.tools.dotc.Driver.process(Driver.scala:167)
	at dotty.tools.dotc.Driver.process(Driver.scala:179)
	at dotty.tools.dotc.Driver.main(Driver.scala:209)
	at dotty.tools.dotc.Main.main(Main.scala)
@KacperFKorban KacperFKorban added itype:bug area:typer itype:crash regression This worked in a previous version but doesn't anymore labels Nov 14, 2021
@KacperFKorban
Copy link
Member Author

Found this issue when looking into #13934
So this one should be fixed so that the other one could be addressed.
I'm pretty sure that the crash started with PR #13881

odersky added a commit to dotty-staging/dotty that referenced this issue Dec 8, 2021
Fix in case qualifier is an intersection with a PolyFunction type.

Fixes scala#13950
olsdavis pushed a commit to olsdavis/dotty that referenced this issue Apr 4, 2022
Fix in case qualifier is an intersection with a PolyFunction type.

Fixes scala#13950
@Kordyjan Kordyjan added this to the 3.1.2 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:typer itype:bug itype:crash regression This worked in a previous version but doesn't anymore
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants