Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


This repository is about thread modular abstract interpretation (Using the APRON library) for interrupt-driven programs by adopting priority information.

The source code is a modified version from

Right now, all files are not cleaned up including test files.

However, subset of result tables can be printed since some output files are uploaded.

Citing IntAbs

  author    = {Chungha Sung and
               Markus Kusano and
               Chao Wang},
  title     = {Modular verification of interrupt-driven software},
  booktitle = {Proceedings of the 32nd {IEEE/ACM} International Conference on Automated
               Software Engineering, {ASE} 2017, Urbana, IL, USA, October 30 - November
               03, 2017},
  pages     = {206--216},
  year      = {2017},
  crossref  = {DBLP:conf/kbse/2017},
  url       = {},
  doi       = {10.1109/ASE.2017.8115634},
  timestamp = {Fri, 01 Dec 2017 22:44:10 +0100},
  biburl    = {},
  bibsource = {dblp computer science bibliography,}


The program is an LLVM opt pass. It is built using CMake. Since we are using CMake, this likely requires LLVM version 3.6.0

Modify the CMakeLists file variable APRON_PREFIX to be the location where Apron is installed

Assuming your LLVM library files are in a standard location (more on this below), simply:

mkdir build
cd build
cmake ../

The result of the build process is an .so file,

If you need to tell CMake where LLVM lives, you need to add the option -DLLVM_DIR, e.g.,

cmake -DLLVM_DIR=/home/chungha/src/share/llvm/cmake ../

The directory passed to LLVM_DIR should be the location where the LLVM CMake files are (e.g., LLVM-Config.cmake).

You also may need to set -DZ3_INC and -DZ3_LIB to the include directory, and library file for Z3, respectively.

Test Path

You need to modify LLVM path and build path in src/test/ file to test program such as LLVM_PREFIX, WORKLIST_SO, Z3_BIN.


If you want to check the program's invariants using assert, you have to use in this way.

Instead of using assert(a==1), you have to write down if (a != 1) { assert(0); }.

Because of post dominator relation, I need to implement my tool to support only this case (assert makes the program unreachable so some post dominator relationship is lost).

Directory description

  • icbmc: This is the directory where I tested icbmc binary file from DATE15 paper with my benchmarks.

  • src: It contains main implementation (worlist-ai, utils, CMakeLists.txt) and a test directory (test)

  • src/test: It contains script files to run the test and benchmark programs. Also, the result files are included in each directory.


Repository for ASE 2017 paper, "Modular Verification of Interrupt-driven Software".








No releases published


No packages published