scala / scala3

The Scala 3 compiler, also known as Dotty.
https://dotty.epfl.ch
Apache License 2.0
5.84k stars 1.05k forks source link

`-Wunused:locals` gives false positives for some calls to transparent inline functions #17753

Open matil019 opened 1 year ago

matil019 commented 1 year ago

Compiler version

3.3.0

Minimized code

//> using option -Wunused:locals
//> using scala 3.3.0

class PartiallyApplied[A] {
  transparent inline def func[B](): Nothing = ???
}

def call[A] = new PartiallyApplied[A]

def good = call[Int].func[String]()
def bad = { call[Int].func[String]() }

Output

-- Warning: /home/...snip.../Foo.scala:11:34 -------------------
11 |def bad = { call[Int].func[String]() }
   |                                  ^
   |                                  unused local definition
1 warning found

Expectation

No warnings are issued.

Other

This affects Monocle's macros such as GenLens.

I'm not certain whether or not my example can be minimized further. Interestingly, calling a transparent inline function directly doesn't trigger any warnings.

//> using option -Wunused:locals
//> using scala 3.3.0

transparent inline def func2[A]() = ???

def good2a = func2[Int]()
def good2b = { func2[Int]() }
ritschwumm commented 1 year ago

looks like my own lens macro suffers the same issue, and it's a bit annoying to switch off warnings where ever i construct a lens. is there a workaround i can try maybe?

ritschwumm commented 9 months ago

any news on this? the problem still seems to persist in 3.4.0-RC1

som-snytt commented 3 days ago

It has to do with the tree representation Inlined; it must learn to ignore the bindings that are warning.