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

Regression in CheckUnused leads to compiler crash #22499

Open
WojciechMazur opened this issue Feb 3, 2025 · 6 comments · May be fixed by #22504
Open

Regression in CheckUnused leads to compiler crash #22499

WojciechMazur opened this issue Feb 3, 2025 · 6 comments · May be fixed by #22504
Assignees
Labels
area:linting Linting warnings enabled with -W or -Xlint itype:bug itype:crash regression This worked in a previous version but doesn't anymore stat:needs minimization Needs a self contained minimization

Comments

@WojciechMazur
Copy link
Contributor

The regression can be observed in multiple OpenCB projects:

Project Version Build URL Notes
johnspade/tgbot-utils 0.8.1 Open CB logs reproducer below
kaizen-solutions/virgil 1.2.2 Open CB logs
kirill5k/mongo4cats 0.7.11 Open CB logs
kubukoz/smithy-playground 0.8.0 Open CB logs
lichess-org/scalachess HEAD Open CB logs
scalacenter/course-management-tools 2.0.22 Open CB logs
scalacenter/scalafix 0.14.0 Open CB logs
softwaremill/ox 0.5.8 Open CB logs
softwaremill/tapir 1.11.13 Open CB logs
tofu-tf/tofu 0.13.6 Open CB logs
typelevel/kittens 3.4.0 Open CB logs
zio/zio-lambda 1.0.5 Open CB logs
kitlangton/neotype 0.3.10 -> 0.3.11 Open CB logs

Compiler version

Last good release: 3.7.0-RC1-bin-20250127-89c20f8-NIGHTLY
First bad release: 3.7.0-RC1-bin-20250128-9cb97ec-NIGHTLY

Bisect failed, can be coused by any:
a5d9e25
c65d45d
6c2c5c5

Reproducer code

Needs minimization

package ru.johnspade.tgbot.callbackdata

import ru.johnspade.tgbot.callbackdata.named.MagnoliaRowEncoder
import ru.johnspade.csv3s.codecs.*
import ru.johnspade.csv3s.codecs.instances.given

sealed trait TestCallbackData

final case class BuyIcecream(flavor: String) extends TestCallbackData
case object SayHello                         extends TestCallbackData

object TestCallbackData:
  given encoder: RowEncoder[TestCallbackData] = MagnoliaRowEncoder.derived

Output (click arrow to expand)

 unhandled exception while running checkUnusedPostInlining on /Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/src/test/scala/ru/johnspade/tgbot/callbackdata/TestCallbackData.scala

  An unhandled exception was thrown in the compiler.
  Please file a crash report here:
  https://github.com/scala/scala3/issues/new/choose
  For non-enriched exceptions, compile with -Xno-enrich-error-messages.


     while compiling: /Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/src/test/scala/ru/johnspade/tgbot/callbackdata/TestCallbackData.scala
        during phase: checkUnusedPostInlining
                mode: Mode(ImplicitsEnabled)
     library version: version 2.13.16
    compiler version: version 3.7.0-RC1-bin-20250131-590691b-NIGHTLY-git-590691b
            settings: -Wnonunit-statement true -Wunused List(implicits, explicits, imports, locals, params, privates) -Wvalue-discard true -Xkind-projector "" -bootclasspath /Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3/3.7.0-RC1-bin-20250131-590691b-NIGHTLY/scala3-library_3-3.7.0-RC1-bin-20250131-590691b-NIGHTLY.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.16/scala-library-2.13.16.jar -classpath /Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/target/scala-3.7.0-RC1-bin-20250131-590691b-NIGHTLY/test-classes:/Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/target/scala-3.7.0-RC1-bin-20250131-590691b-NIGHTLY/classes:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/softwaremill/magnolia1_3/magnolia_3/1.3.7/magnolia_3-1.3.7.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/ru/johnspade/csv3s_3/0.1.4/csv3s_3-0.1.4.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-test_3/2.1.3/zio-test_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-test-sbt_3/2.1.3/zio-test-sbt_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-core_3/2.12.0/cats-core_3-2.12.0.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio_3/2.1.3/zio_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-parser_3/0.1.10/zio-parser_3-0.1.10.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-streams_3/2.1.3/zio-streams_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/portable-scala/portable-scala-reflect_2.13/1.1.2/portable-scala-reflect_2.13-1.1.2.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-kernel_3/2.12.0/cats-kernel_3-2.12.0.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-internal-macros_3/2.1.3/zio-internal-macros_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/zio-stacktracer_3/2.1.3/zio-stacktracer_3-2.1.3.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/izumi-reflect_3/2.3.8/izumi-reflect_3-2.3.8.jar:/Users/wmazur/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/dev/zio/izumi-reflect-thirdparty-boopickle-shaded_3/2.3.8/izumi-reflect-thirdparty-boopickle-shaded_3-2.3.8.jar -d /Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/target/scala-3.7.0-RC1-bin-20250131-590691b-NIGHTLY/test-classes -deprecation true -encoding utf8 -feature true -language List(experimental.macros, implicitConversions)

[error] ## Exception when compiling 2 sources to /Users/wmazur/projects/scala/community-build3/repo/tgbot-callback-data/target/scala-3.7.0-RC1-bin-20250131-590691b-NIGHTLY/test-classes
[error] java.lang.AssertionError: assertion failed
[error] scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
[error] dotty.tools.dotc.util.Spans$Span$.start$extension(Spans.scala:45)
[error] dotty.tools.dotc.transform.CheckUnused$.isZeroExtentSynthetic(CheckUnused.scala:905)
[error] dotty.tools.dotc.transform.CheckUnused.transformIdent(CheckUnused.scala:58)
[error] dotty.tools.dotc.transform.CheckUnused.transformIdent(CheckUnused.scala:53)
[error] dotty.tools.dotc.transform.MegaPhase.goIdent(MegaPhase.scala:621)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:240)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:332)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:244)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:295)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase$MiniPhase.transformAllDeep(MegaPhase.scala:125)
[error] dotty.tools.dotc.transform.CheckUnused.transformTypeTree(CheckUnused.scala:125)
[error] dotty.tools.dotc.transform.CheckUnused.transformTypeTree(CheckUnused.scala:123)
[error] dotty.tools.dotc.transform.MegaPhase.goTypeTree(MegaPhase.scala:966)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:301)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:338)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:244)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:319)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:295)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:265)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:268)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2(MegaPhase.scala:471)
[error] dotty.tools.dotc.transform.MegaPhase.transformBlock(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:315)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:295)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.mapValDef$1(MegaPhase.scala:251)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2(MegaPhase.scala:471)
[error] dotty.tools.dotc.transform.MegaPhase.transformBlock(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:315)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:450)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2$$anonfun$1(MegaPhase.scala:474)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformBlock(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:315)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:450)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:363)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.mapValDef$1(MegaPhase.scala:251)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2(MegaPhase.scala:471)
[error] dotty.tools.dotc.transform.MegaPhase.transformBlock(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:315)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:295)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:450)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$3(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformTrees(MegaPhase.scala:486)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:296)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2$$anonfun$1(MegaPhase.scala:474)
[error] dotty.tools.dotc.transform.MegaPhase.loop$2(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformBlock(MegaPhase.scala:476)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:315)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:337)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:450)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:411)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.mapValDef$1(MegaPhase.scala:251)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$1(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:376)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:272)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$1(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:396)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:399)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:481)
[error] dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:493)
[error] dotty.tools.dotc.transform.MegaPhase$MiniPhase.run(MegaPhase.scala:138)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:383)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:334)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:376)
[error] dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:345)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1324)
[error] dotty.tools.dotc.Run.runPhases$1(Run.scala:338)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:385)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:397)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:397)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:284)
[error] dotty.tools.dotc.Run.compile(Run.scala:269)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
[error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:141)
[error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:193)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:248)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:183)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:211)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:180)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:178)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:464)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:419)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:506)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:406)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:172)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:488)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:425)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2371)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2321)
[error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:31)
[error] sbt.internal.io.Retry$.apply(Retry.scala:47)
[error] sbt.internal.io.Retry$.apply(Retry.scala:29)
[error] sbt.internal.io.Retry$.apply(Retry.scala:24)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:31)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2319)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:69)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[error] sbt.Execute.work(Execute.scala:292)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] java.base/java.lang.Thread.run(Thread.java:833)
[error]            
@WojciechMazur WojciechMazur added area:linting Linting warnings enabled with -W or -Xlint itype:bug itype:crash regression This worked in a previous version but doesn't anymore stat:needs minimization Needs a self contained minimization labels Feb 3, 2025
@som-snytt
Copy link
Contributor

Besides the position error, there is an error because of incompatible removal of "choice":

Error:  invalid choice(s) for -Wunused: unsafe-warn-patvars

Probably "top-level" options only warn if wrong, but a "choice" is a hard error. Then it's necessary for the choice to have a deprecation cycle, if that is technically feasible.

(Same for strict-no-implicit-warn, which is still supported, but which was also a work-around.)

(Both "work-around" options probably should have been -Y.)

@som-snytt
Copy link
Contributor

NoSpan.isSynthetic, but it's not permitted to take its components start/point/end but note that pointDelta does not assert.

def isZeroExtentSynthetic: Boolean = pos.span.isSynthetic && pos.span.start == pos.span.end

should use span.isZeroExtent, which checks exists.

CheckUnused should be audited for similar usages, since it tests isSynthetic for some trees, and unused patvars relies on positions, converting to synthetic for purposes of comparison. A test for isSynthetic probably always intends "is synthetic and exists".

It is a separate question whether an Ident should have NoSpan instead of a useful synthetic span.

withStart is not validated, as the assert is commented out at fromOffsets, noticed at scala/scala#10989 (comment)

I don't see span combinators resulting in NoSpan from an existing span.

@som-snytt
Copy link
Contributor

som-snytt commented Feb 3, 2025

tgbot-utils works with the fix.

The unpositioned tree is unchecked in the expansion of TestCallbackData. There are two, in ordinalBody and also from a magnolia method.

Not all trees in SyntheticMembers are granted a span, such as in ordinalBody

Match(param.annotated(New(defn.UncheckedAnnot.typeRef, Nil)), cases)

but a trivial test did not demonstrate that.

The inlined stack in CheckUnused shows Magnolia's paramsFromMaps (as an enclosing Inlined), so maybe the elaboration of unsafeCast is involved.

NoSpan for Ident unchecked (class unchecked) [Stack(Apply(TypeApply(Ident(paramsFromMaps),List(TypeTree[HKTypeLambda(List(T), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Nothing),TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),Any))), AppliedType(TypeRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class csv3s)),object codecs),types$package),RowEncoder),List(TypeParamRef(T))))], TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class callbackdata)),class BuyIcecream)],
[info]                                                         def unsafeCast(any: Any)
[info]                                                           : Option[String] =
[info]                                                           Option.when[String](
[info]                                                             any.==(null).||(
[info]                                                               (any:
[info]
[info]                                                                   (any : Any)
[info]                                                                     @unchecked
[info]
[info]                                                               ).isInstanceOf[
[info]                                                                 String]
[info]                                                             )
[info]                                                           )(
[info]                                                             any.asInstanceOf[
[info]                                                               String]
[info]                                                           )
object TestCallbackData:
  given encoder: RowEncoder[TestCallbackData] = MagnoliaRowEncoder.derived
  given decoder: RowDecoder[TestCallbackData] = MagnoliaRowDecoder.derived
  def decode(csv: String) =
    val row = parseRow(csv).left.map(e => new RuntimeException(e.toString)).valueOr(throw _)
    decoder.decode(row)

For reference:

[info]     type MirroredMonoType = ru.johnspade.tgbot.callbackdata.TestCallbackData
[info]     def ordinal(
[info]       x$0: ru.johnspade.tgbot.callbackdata.TestCallbackData.MirroredMonoType):
[info]       Int =
[info]       x$0:
[info]
[info]           (x$0 :
[info]             ru.johnspade.tgbot.callbackdata.TestCallbackData.MirroredMonoType)
[info]             @unchecked
[info]
[info]        match
[info]         {
[info]           case _:ru.johnspade.tgbot.callbackdata.BuyIcecream => 0
[info]           case _:ru.johnspade.tgbot.callbackdata.SayHello.type => 1
[info]         }

@WojciechMazur
Copy link
Contributor Author

I'll start the OpenCB to test other projects to check if it fixes them as well

@som-snytt
Copy link
Contributor

scalachess passes but reports some other ident as spanless, so presumably it's something about inlining.

NoSpan for Ident $_lazy_implicit_$3 (val $_lazy_implicit_$3) [Stack(Apply(TypeApply(Ident(summonAsArray0),List(TypeTree[AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),*:),List(AppliedType(TypeRef(TermRef(TermRef(TermRef(ThisType(TypeRef(NoPrefix,module class cats)),object derived),Derived$package),Derived),type Or),

Worth adding that it's amazing that I can bump scala version locally and projects just compile (without rebuilding dependencies).

@WojciechMazur
Copy link
Contributor Author

I'll start the OpenCB to test other projects to check if it fixes them as well

When testing using 4e39163 I've not observed any new regressions, all of the previously failing projects are now compiling

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:linting Linting warnings enabled with -W or -Xlint itype:bug itype:crash regression This worked in a previous version but doesn't anymore stat:needs minimization Needs a self contained minimization
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants