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

Simplification rule in PVL program triggers ColToSilver$NotSupported exception #1304

Open
wandernauta opened this issue Jan 27, 2025 · 0 comments
Labels
A-Bug F-all Frontend: all Fuzzing Found by fuzzing

Comments

@wandernauta
Copy link
Contributor

The specification grammar allows providing axioms at the top level, which are then treated as SimplificationRules. However, trying to add such a simplification rule to the input being verified (so not simplify.pvl), as in the following PVL input, triggers an exception:

axiom add { 2 + 2 == 4 }

This kind of node (SimplificationRule) is not supported by silver directly. Is there a rewrite missing?

The same applies to the C, C++ and Java frontends.

[INFO] Done: VerCors (at 16:19:57, duration: 00:00:03)
viper.api.transform.ColToSilver$NotSupported: ======================================
9 }
   10 
     [------------------------
   11 axiom Add { 2 + 2 == 4 }
      ------------------------]
   12 
   13 void `type`() {
--------------------------------------
This kind of node (SimplificationRule) is not supported by silver directly. Is there a rewrite missing?
======================================
	at viper.api.transform.ColToSilver.$qmark$qmark(ColToSilver.scala:57)
	at viper.api.transform.ColToSilver.collect(ColToSilver.scala:221)
	at viper.api.transform.ColToSilver.$anonfun$transform$16(ColToSilver.scala:176)
	at viper.api.transform.ColToSilver.$anonfun$transform$16$adapted(ColToSilver.scala:176)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at viper.api.transform.ColToSilver.transform(ColToSilver.scala:176)
	at viper.api.transform.ColToSilver$.transform(ColToSilver.scala:26)
	at viper.api.backend.SilverBackend.$anonfun$transform$1(SilverBackend.scala:91)
	at hre.progress.task.NameSequenceTask.scope(NameSequenceTask.scala:16)
	at hre.progress.Progress$.stages(Progress.scala:47)
	at viper.api.backend.SilverBackend.transform(SilverBackend.scala:90)
	at viper.api.backend.SilverBackend.transform$(SilverBackend.scala:81)
	at viper.api.backend.silicon.Silicon.transform(Silicon.scala:34)
	at vct.main.stages.SilverBackend.transform(Backend.scala:196)
	at vct.main.stages.Backend.$anonfun$run$3(Backend.scala:152)
	at hre.progress.Progress$.$anonfun$map$2(Progress.scala:35)
	at hre.progress.task.AbstractTask.frame(AbstractTask.scala:166)
	at hre.progress.Progress$.$anonfun$map$1(Progress.scala:35)
	at scala.collection.parallel.IterableSplitter$Mapped.next(RemainsIterator.scala:463)
	at scala.collection.immutable.List.prependedAll(List.scala:153)
	at scala.collection.immutable.List$.from(List.scala:684)
	at scala.collection.immutable.List$.from(List.scala:681)
	at scala.collection.SeqFactory$Delegate.from(Factory.scala:306)
	at scala.collection.immutable.Seq$.from(Seq.scala:42)
	at scala.collection.immutable.Seq$.from(Seq.scala:39)
	at scala.collection.IterableFactory$ToFactory.fromSpecific(Factory.scala:274)
	at scala.collection.IterableOnceOps.to(IterableOnce.scala:1310)
	at scala.collection.IterableOnceOps.to$(IterableOnce.scala:1310)
	at scala.collection.parallel.IterableSplitter$Mapped.to(RemainsIterator.scala:460)
	at vct.main.stages.Backend.$anonfun$run$1(Backend.scala:153)
	at hre.progress.task.NameSequenceTask.scope(NameSequenceTask.scala:16)
	at hre.progress.Progress$.stages(Progress.scala:47)
	at vct.main.stages.Backend.run(Backend.scala:145)
	at vct.main.stages.Backend.run$(Backend.scala:137)
	at vct.main.stages.SilverBackend.run(Backend.scala:184)
	at vct.main.stages.SilverBackend.run(Backend.scala:184)
	at hre.stages.Stages.$anonfun$run$3(Stages.scala:104)
	at hre.stages.Stages.$anonfun$run$3$adapted(Stages.scala:101)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:903)
	at hre.stages.Stages.$anonfun$run$1(Stages.scala:101)
	at hre.progress.task.NameSequenceTask.scope(NameSequenceTask.scala:16)
	at hre.progress.Progress$.stages(Progress.scala:47)
	at hre.stages.Stages.run(Stages.scala:98)
	at hre.stages.Stages.run$(Stages.scala:95)
	at hre.stages.StagesPair.run(Stages.scala:145)
	at vct.main.modes.Verify$.verifyWithOptions(Verify.scala:64)
	at vct.main.modes.Verify$.$anonfun$runOptions$3(Verify.scala:99)
	at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.scala:17)
	at hre.util.Time$.logTime(Time.scala:23)
	at vct.main.modes.Verify$.runOptions(Verify.scala:99)
	at vct.main.Main$.runMode(Main.scala:107)
	at vct.main.Main$.$anonfun$runOptions$3(Main.scala:100)
	at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.scala:17)
	at hre.middleware.Middleware$.using(Middleware.scala:78)
	at vct.main.Main$.$anonfun$runOptions$2(Main.scala:100)
	at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.scala:17)
	at hre.io.Watch$.booleanWithWatch(Watch.scala:58)
	at vct.main.Main$.$anonfun$runOptions$1(Main.scala:100)
	at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.scala:17)
	at hre.middleware.Middleware$.using(Middleware.scala:78)
	at vct.main.Main$.runOptions(Main.scala:95)
	at vct.main.Main$.main(Main.scala:50)
	at vct.main.Main.main(Main.scala)
[ERROR] !*!*!*!*!*!*!*!*!*!*!*!
[ERROR] ! VerCors has crashed !
[ERROR] !*!*!*!*!*!*!*!*!*!*!*!

Version: 2bd3bca (dev branch).

This issue was found by fuzzing.

@superaxander superaxander added A-Bug F-all Frontend: all Fuzzing Found by fuzzing labels Jan 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Bug F-all Frontend: all Fuzzing Found by fuzzing
Projects
None yet
Development

No branches or pull requests

2 participants