How do I turn off assertions in Scala 3?

Predef says to compile with -Xdisable-assertions but that doesn’t work. Programming in Scala Chapter 25 says to use the JVM’s -da flag, but that doesn’t work either.

1 Like

Per the documentation of Prefer.assert: " Calls to this method will not be generated if -Xelide-below is greater than ASSERTION ."

https://scala-lang.org/api/3.x/scala/Predef$.html#assert-8ac

Apparently don’t believe everything you read on the internet. Some command options are still catching up, but this feature might have been elided.

➜  snips scala assertive.scala
java.lang.AssertionError: assertion failed
        at scala.Predef$.assert(Predef.scala:264)
        at Main$.main(assertive.scala:5)
        at Main.main(assertive.scala)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at scala.reflect.internal.util.RichClassLoader$.$anonfun$run$extension$1(ScalaClassLoader.scala:101)
        at scala.reflect.internal.util.RichClassLoader$.run$extension(ScalaClassLoader.scala:36)
        at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:30)
        at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:28)
        at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45)
        at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:37)
        at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:36)
        at scala.tools.nsc.AbstractScriptRunner.runCompiled(ScriptRunner.scala:168)
        at scala.tools.nsc.AbstractScriptRunner.$anonfun$runScript$1(ScriptRunner.scala:177)
        at scala.tools.nsc.AbstractScriptRunner.$anonfun$withCompiledScript$9(ScriptRunner.scala:154)
        at scala.tools.nsc.util.package$.waitingForThreads(package.scala:55)
        at scala.tools.nsc.AbstractScriptRunner.runScript(ScriptRunner.scala:151)
        at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:74)
        at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:91)
        at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:103)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:108)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
➜  snips scala -Xdisable-assertions assertive.scala
42

but

➜  snips sdk use scala 3.1.1

Using scala version 3.1.1 in this shell.
➜  snips scala assertive.scala
Exception in thread "main" java.lang.AssertionError: assertion failed
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
        at Test$.main(assertive.scala:5)
        at Test.main(assertive.scala)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at dotty.tools.scripting.ScriptingDriver.compileAndRun(ScriptingDriver.scala:42)
        at dotty.tools.scripting.Main$.main(Main.scala:43)
        at dotty.tools.MainGenericRunner$.run$1(MainGenericRunner.scala:230)
        at dotty.tools.MainGenericRunner$.main(MainGenericRunner.scala:239)
        at dotty.tools.MainGenericRunner.main(MainGenericRunner.scala)
➜  snips scala -Xdisable-assertions assertive.scala
bad option '-Xdisable-assertions' was ignored
1 warning found
Exception in thread "main" java.lang.AssertionError: assertion failed
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:11)
        at Test$.main(assertive.scala:5)
        at Test.main(assertive.scala)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at dotty.tools.scripting.ScriptingDriver.compileAndRun(ScriptingDriver.scala:42)
        at dotty.tools.scripting.Main$.main(Main.scala:43)
        at dotty.tools.MainGenericRunner$.run$1(MainGenericRunner.scala:230)
        at dotty.tools.MainGenericRunner$.main(MainGenericRunner.scala:239)
        at dotty.tools.MainGenericRunner.main(MainGenericRunner.scala)
➜  snips scala -Xelide-below 10000 assertive.scala
bad option '-Xelide-below' was ignored
not found: 10000
1 warning found
1 error found
Error: Errors encountered during compilation
➜  snips

But maybe they will get around to it. One test has been enabled:

./tests/run/elidable-noflags.scala:  @elidable(FINEST) def f1() = println("Good for me, I was not elided.")

– the one in which it tests that nothing is elided, which is a kind of feature.