Runnable gen-c output #317
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of changes:
A PR introducing a
--gen-c-runnableflag which produces a runnable C program from the compiled goto program. The existing--gen-cflag acts as a starting point, but there are a few issues listed in #237 that prevent the generated C file from compiling.The change introduces a generic visitor pattern for transforming
Stmts,Exprs, andTypes, which is then used to create a transformer over symbol tables. We then create an implementation for transforming identifiers in the symbol table to valid C identifiers.To signify whether we want the original symbol table or the transformed names one, we pass a different backend (
"gotoc" vs "genc") to thermc-rustccommand. We then do some post-processing to add in some CBMC-specific special functions/macros.Resolved issues:
Partially resolves #237 (possibly fully after more changes.)
Call-outs:
Todo:
nondet_<k>()functions from a sample trace.overflowbyte_extract_little_endiansrc/test/cbmc/FatPointers/boxtrait.cTesting:
How is this change tested? Existing regression suite.
Is this a refactor change? No.
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.