Skip to content

Stackoverflow in eta-expanding an implicit conversion with an implicit parameter #10299

@dwijnand

Description

@dwijnand
object T {
  implicit def foo(implicit x: Int): Int = x
  def bar = foo _
}
$ scalac T.scala
error: java.lang.StackOverflowError
	at scala.reflect.internal.Types.isRawIfWithoutArgs(Types.scala:3887)
	at scala.reflect.internal.Types.isRawIfWithoutArgs$(Types.scala:3887)
	at scala.reflect.internal.SymbolTable.isRawIfWithoutArgs(SymbolTable.scala:16)
	at scala.reflect.internal.Types.isRawType(Types.scala:3892)
	at scala.reflect.internal.Types.isRawType$(Types.scala:3891)
	at scala.reflect.internal.SymbolTable.isRawType(SymbolTable.scala:16)
	at scala.reflect.internal.Types.normalizePlus(Types.scala:4026)
	at scala.reflect.internal.Types.normalizePlus$(Types.scala:4025)
	at scala.reflect.internal.SymbolTable.normalizePlus(SymbolTable.scala:16)
	at scala.reflect.internal.tpe.TypeComparers.fourthTry$1(TypeComparers.scala:539)
	at scala.reflect.internal.tpe.TypeComparers.classOnRight$1(TypeComparers.scala:462)
	at scala.reflect.internal.tpe.TypeComparers.thirdTryRef$1(TypeComparers.scala:466)
	at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:411)
	at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:548)
	at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:320)
	at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:278)
	at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:240)
	at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:16)
	at scala.reflect.internal.tpe.TypeComparers.retry$3(TypeComparers.scala:522)
	at scala.reflect.internal.tpe.TypeComparers.fourthTry$1(TypeComparers.scala:539)
	at scala.reflect.internal.tpe.TypeComparers.classOnRight$1(TypeComparers.scala:462)
	at scala.reflect.internal.tpe.TypeComparers.thirdTryRef$1(TypeComparers.scala:466)
	at scala.reflect.internal.tpe.TypeComparers.firstTry$1(TypeComparers.scala:411)
	at scala.reflect.internal.tpe.TypeComparers.isSubType2(TypeComparers.scala:548)
	at scala.reflect.internal.tpe.TypeComparers.isSubType1(TypeComparers.scala:320)
	at scala.reflect.internal.tpe.TypeComparers.isSubType(TypeComparers.scala:278)
	at scala.reflect.internal.tpe.TypeComparers.isSubType$(TypeComparers.scala:240)
	at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:16)
	at scala.reflect.internal.Types$Type.$less$colon$less(Types.scala:794)
	at scala.tools.nsc.typechecker.TypeDiagnostics.explainAnyVsAnyRef(TypeDiagnostics.scala:277)
	at scala.tools.nsc.typechecker.TypeDiagnostics.explainAnyVsAnyRef$(TypeDiagnostics.scala:276)
	at scala.tools.nsc.Global$$anon$1.explainAnyVsAnyRef(Global.scala:445)
	at scala.tools.nsc.typechecker.TypeDiagnostics.foundReqMsg(TypeDiagnostics.scala:325)
	at scala.tools.nsc.typechecker.TypeDiagnostics.foundReqMsg$(TypeDiagnostics.scala:300)
	at scala.tools.nsc.Global$$anon$1.foundReqMsg(Global.scala:445)
	at scala.tools.nsc.typechecker.ContextErrors$ErrorUtils$.typeErrorMsg(ContextErrors.scala:108)
	at scala.tools.nsc.typechecker.ContextErrors$TyperContextErrors$TyperErrorGen$.AdaptTypeError(ContextErrors.scala:219)
	at scala.tools.nsc.typechecker.Typers$Typer.adaptMismatchedSkolems$1(Typers.scala:1058)
	at scala.tools.nsc.typechecker.Typers$Typer.lastTry$1(Typers.scala:1069)
	at scala.tools.nsc.typechecker.Typers$Typer.adaptExprNotFunMode$1(Typers.scala:1124)
	at scala.tools.nsc.typechecker.Typers$Typer.vanillaAdapt$1(Typers.scala:1170)
	at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1214)
	at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5577)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
	at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedArg$1(Typers.scala:3235)
	at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:482)
	at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgWithFormal$1(PatternTypers.scala:113)
	at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.$anonfun$typedArgsForFormals$1(PatternTypers.scala:116)
	at scala.runtime.Tuple2Zipped$.$anonfun$map$1(Tuple2Zipped.scala:47)
	at scala.collection.immutable.List.foreach(List.scala:389)
	at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals(PatternTypers.scala:116)
	at scala.tools.nsc.typechecker.PatternTypers$PatternTyper.typedArgsForFormals$(PatternTypers.scala:110)
	at scala.tools.nsc.typechecker.Typers$Typer.typedArgsForFormals(Typers.scala:112)
	at scala.tools.nsc.typechecker.Typers$Typer.handleMonomorphicCall$1(Typers.scala:3580)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$31(Typers.scala:3606)
	at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3606)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$doTypedApply$18(Typers.scala:3453)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$silent$2(Typers.scala:717)
	at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:717)
	at scala.tools.nsc.typechecker.Typers$Typer.tryTupleApply$1(Typers.scala:3453)
	at scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:3552)
	at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3563)
	at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4717)
	at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4745)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5510)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
	at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
	at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:888)
	at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:482)
	at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1210)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit1(Implicits.scala:669)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.typedImplicit0(Implicits.scala:606)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$typedImplicit(Implicits.scala:475)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.rankImplicits(Implicits.scala:925)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch$ImplicitComputation.findBest(Implicits.scala:953)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.searchImplicit(Implicits.scala:1010)
	at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1370)
	at scala.tools.nsc.typechecker.Implicits.inferImplicit(Implicits.scala:92)
	at scala.tools.nsc.typechecker.Implicits.inferImplicit$(Implicits.scala:81)
	at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:445)
	at scala.tools.nsc.typechecker.Implicits.inferImplicitFor(Implicits.scala:39)
	at scala.tools.nsc.typechecker.Implicits.inferImplicitFor$(Implicits.scala:38)
	at scala.tools.nsc.Global$$anon$1.inferImplicitFor(Global.scala:445)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$applyImplicitArgs$2(Typers.scala:173)
	at scala.tools.nsc.typechecker.Typers$Typer.applyImplicitArgs(Typers.scala:166)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$2(Typers.scala:850)
	at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:703)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:849)

	at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:482)
	at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedEta$1(Typers.scala:4540)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTyped$1(Typers.scala:5268)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5513)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
	at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
	at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5638)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$5(Typers.scala:879)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typerWithLocalContext$1(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$3(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:77)

	at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:482)
	at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedEta$1(Typers.scala:4540)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTyped$1(Typers.scala:5268)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5513)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
	at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
	at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5638)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$5(Typers.scala:879)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typerWithLocalContext$1(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$3(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:77)

repeated.. until..

	at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:482)
	at scala.tools.nsc.typechecker.Typers$Typer.adapt(Typers.scala:1210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedEta$1(Typers.scala:4540)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTyped$1(Typers.scala:5268)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5513)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
	at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
	at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
	at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5638)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$5(Typers.scala:879)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typerWithLocalContext$1(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$3(Typers.scala:491)
	at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adapt$1(Typers.scala:77)

	at scala.tools.nsc.typechecker.Typers$Typer.adaptToImplicitMethod$1(Typers.scala:482)

Using Scala 2.12.2.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions