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

[WIP] Initial commit to dump_c #27

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft

Conversation

polgreen
Copy link
Contributor

Work in progress but please provide feedback!

Using the command dump_c, uclid will spit out a C file that can
be either compiled or fed to another verification tool.

At the moment supported verification commands are: unroll and induction
The syntax is currently CBMC specific, but will be adapted in future to work
for any SV comp tool.

The aim is that we can:

  • execute uclid models in C
  • compare uclid against other verification tools that compete in sv comp
  • try out existing program slicing and abstraction techniques on uclid models

polgreen added 5 commits June 16, 2020 14:45
Using the command dump_c, uclid will spit out a C file that can
be either compiled or fed to another verification tool.

At the moment supported veification commands are: unroll and induction
The syntax is currently CBMC specific, but will be adapted in future to work
for any SV comp tool
@@ -261,45 +263,54 @@ case class IntUnaryMinusOp() extends IntArgOperator {
// These operators take bitvector operands and return bitvector results.
sealed abstract class BVArgOperator(val w : Int) extends Operator {
override def fixity = Operator.INFIX
def signed_operands = false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When is this actually used? And why is it plural?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah yeah, I put that there because eventually I'm going to have to deal with bitvector comparisons being either signed or unsigned. So, if the comparison is signed, the operands need to be made signed, and if the comparison is unsigned, the operands need to be made unsigned. But currently it doesn't do that and I was hoping to come up with a better way of dealing with the signed/unsigned-ness of operators but haven't yet.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to avoid clutter in the Operator class, you can have a helper function that just does a match on the operators to say if they are signed

@polgreen polgreen marked this pull request as draft July 10, 2020 21:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants