Skip to content

Exceptions inexplicably swallowed when inlined context functions interact #21187

Open
@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

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions