scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
230 stars 21 forks source link

NPE when checking dubious adaptation #12812

Closed phearnot closed 1 year ago

phearnot commented 1 year ago

Reproduction steps

Scala version: 2.13.11

❯ /usr/local/opt/scala@2.13/bin/scala -Xsource:3 -language:postfixOps -Xlint
Welcome to Scala 2.13.11 (OpenJDK 64-Bit Server VM, Java 1.8.0_372).
Type in expressions for evaluation. Or try :help.

scala> def foo(max: Int) = (1 to max).map(1 to).foreach(r => println(r.mkString(",")))
java.lang.NullPointerException
    at scala.tools.nsc.typechecker.Typers$Typer.checkDubiousAdaptation$1(Typers.scala:5330)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$59(Typers.scala:5337)
    at scala.tools.nsc.typechecker.Typers$Typer.typedSelect$1(Typers.scala:5337)
    at scala.tools.nsc.typechecker.Typers$Typer.typedSelectOrSuperCall$1(Typers.scala:5482)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6062)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.typedArg(Typers.scala:3473)
    at scala.tools.nsc.typechecker.Typers$Typer.handlePolymorphicCall$1(Typers.scala:3877)
    at scala.tools.nsc.typechecker.Typers$Typer.doTypedApply(Typers.scala:3896)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5153)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5164)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6061)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.typedSelectOrSuperCall$1(Typers.scala:6215)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6062)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$41(Typers.scala:5130)
    at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:697)
    at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5132)
    at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5164)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6061)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.computeType(Typers.scala:6206)
    at scala.tools.nsc.typechecker.Namers$Namer.assignTypeToTree(Namers.scala:1138)
    at scala.tools.nsc.typechecker.Namers$Namer.methodSig(Namers.scala:1479)
    at scala.tools.nsc.typechecker.Namers$Namer.memberSig(Namers.scala:1962)
    at scala.tools.nsc.typechecker.Namers$Namer.typeSig(Namers.scala:1913)
    at scala.tools.nsc.typechecker.Namers$Namer$MonoTypeCompleter.completeImpl(Namers.scala:875)
    at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete(Namers.scala:2110)
    at scala.tools.nsc.typechecker.Namers$LockingTypeCompleter.complete$(Namers.scala:2108)
    at scala.tools.nsc.typechecker.Namers$TypeCompleterBase.complete(Namers.scala:2103)
    at scala.reflect.internal.Symbols$Symbol.completeInfo(Symbols.scala:1562)
    at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1534)
    at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1723)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5698)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6195)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2078)
    at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1916)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6024)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6195)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2078)
    at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1916)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6024)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6195)
    at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3455)
    at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5707)
    at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:6027)
    at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6117)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.apply(Analyzer.scala:124)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:480)
    at scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.run(Analyzer.scala:111)
    at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1545)
    at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1529)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:752)
    at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:975)
    at scala.tools.nsc.interpreter.IMain.compile(IMain.scala:541)
    at scala.tools.nsc.interpreter.IMain.doInterpret(IMain.scala:527)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:511)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:509)
    at scala.tools.nsc.interpreter.shell.ILoop.loop$1(ILoop.scala:878)
    at scala.tools.nsc.interpreter.shell.ILoop.interpretStartingWith(ILoop.scala:906)
    at scala.tools.nsc.interpreter.shell.ILoop.command(ILoop.scala:433)
    at scala.tools.nsc.interpreter.shell.ILoop.processLine(ILoop.scala:440)
    at scala.tools.nsc.interpreter.shell.ILoop.loop(ILoop.scala:458)
    at scala.tools.nsc.interpreter.shell.ILoop.run(ILoop.scala:968)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:88)
    at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:92)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:105)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:113)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

Problem

This code compiles on 2.13.11 without -Xlint, and also gives a meaningful compiled error on 3.3.0. It also used to compile on 2.13.10 with the same flags.

som-snytt commented 1 year ago

To disable only the lint, -Xlint:-numeric-methods,_ is the workaround.

som-snytt commented 1 year ago

The other workaround is .map(1 to _).