The tests are run with Pytest. They require compiling cclyzer++ first.
cmake --build build -j $(nproc) pytest test/
To make new golden tests, set
MAKE_GOLD_TESTS=1 in the environment. To run
extra tests, set
Cutting a Release
Create branch with a name starting with
Ensure that the Changelog is up to date.
Bump the project version``CMakeLists.txt``.
Check that CI was successful on the release branch.
Merge the release branch to
Delete the release branch.
Create and push a new tag on
mainthat starts with
v, and ends with a semantic version i.e.,
Wait for CI, then publish the draft release it created.
git checkout -b release # Make changes, push, wait, then merge release into main and delete release git checkout main git pull git tag -a v0.Y.Z -m v0.Y.Z git push --tags
Due to historical circumstance, cclyzer++ has many different naming conventions in use in the Datalog code. The conventions in this section are prescriptive, but only apply to new code.
Names must strike a balance between brevity and comprehensibility. This section enumerates abbreviations that are considered reasonable trade-offs in this space. This judgment is highly subjective, but must be made somehow.
block: LLVM basic block
calling_conv: Calling convention
global_var: Global variable
getelementptr(this is the only abbreviated opcode)
Explicitly not further abbreviated, because they are already fairly short, or they are not common enough when speaking about LLVM to readily disambiguate them from abbreviations for other terms:
inl: Could mean “inline” or “left injection”
pred: Could mean “predicate” or “predecessor”
succ: Could mean “successor” or “success”
type is for relations about types themselves, whereas
ty is used for
relating an entity to its type.
Soufflé has some documentation on improving
performance. In addition to what’s stated there, it’s often helpful to look
at Soufflé’s RAM IR by passing the
--show=transformed-ram flag to Soufflé.
The RAM representation explicitly shows the effect of query plans (
directives and SIPS) and semi-naïve evaluation.