Skip to content

Exceptions inexplicably swallowed when inlined context functions interact #21187

@keynmol

Description

@keynmol

Compiler version

Tested it with 3.3.3, 3.3.4-RC1, 3.4.2, 3.5.0-RC4

Minimized code

def oops(msg: String) = sys.error(msg)

class Zone
object Zone:
  inline def apply[T](inline f: Zone ?=> T): T = f(using new Zone)

inline def zone[A](inline f: Zone ?=> A) = Zone.apply(z => f(using z))

@main def hello = 
  // this swallows exceptions!
  zone(oops("here"))
  
  // this doesn't
  Zone(oops("not here"))

Output

Exception in thread "main"java.lang.RuntimeException: not here
        at scala.sys.package$.error(Unknown Source)
        at test$package$.oops(Unknown Source)
        at test$package$.hello(Unknown Source)
        at hello.main(Unknown Source)
        at <none>.main(Unknown Source)

Expectation

I expected the first call to oops to throw the error, but it's quietly swallowed. This is extremely unsettling, I have no idea what other places I have where exceptions are swallowed like this

Noticed this when converting a project from SN 0.4 to SN 0.5 which ships a Zone.apply that uses context functions out of the box (I used to have zone helper before, and it worked fine)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions