[klee-dev] KLEE failed to build cleanly with LLVM 3.3

Daniel Liew daniel.liew at imperial.ac.uk
Wed Sep 17 20:39:13 BST 2014


On 17 September 2014 20:10, Mark R. Tuttle <tuttle at acm.org> wrote:
> I just did a "git pull" to grab the latest commit (2497fdc) and ran into
> trouble building against LLVM 3.3 and running the regression tests.
>
> Build failed in file src/tools/klee/main.cpp in function
> KleeHandler::openOutputFile
>
> #if LLVM_VERSION_CODE >= LLVM_VERSION(3,5)
>   f = new llvm::raw_fd_ostream(path.c_str(), Error, llvm::sys::fs::F_None);
> #elif LLVM_VERSION_CODE >= LLVM_VERSION(3,0)
>   f = new llvm::raw_fd_ostream(path.c_str(), Error,
> llvm::sys::fs::F_Binary);
> #else
>   f = new llvm::raw_fd_ostream(path.c_str(), Error,
> llvm::raw_fd_ostream::F_Binary);
> #endif
>
> because llvm::sys::fs::F_Binary was not defined.  LLVM 3.3 source code seems
> to define llvm::raw_fd_ostream::F_Binary and not llvm::sys::fs:F_Binary.  I
> changed the reference to LLVM version 3.0 to 3.4 and the build succeeded.

We are currently targeting LLVM2.9 and LLVM3.4 [1] and are not testing
LLVM3.3 build support. Do you need to use LLVM3.3 for any particular
reason?

We'd happily accept a patch to fix your compilation error provided it
doesn't break the configurations we're testing right now.

> Regression tests failed with
>
> Failing Tests (20):
>     KLEE :: Concrete/BitwiseOps.ll
>     KLEE :: Concrete/BoolReadWrite.ll
>     KLEE :: Concrete/Casts.ll
>     KLEE :: Concrete/CmpEq.ll
>     KLEE :: Concrete/ConstantExpr.ll
>     KLEE :: Concrete/FloatingPointOps.ll
>     KLEE :: Concrete/GlobalInitializers.ll
>     KLEE :: Concrete/GlobalUndef.ll
>     KLEE :: Concrete/GlobalVariable.ll
>     KLEE :: Concrete/ICmp.ll
>     KLEE :: Concrete/OneCall.ll
>     KLEE :: Concrete/OverlappingPhiNodes.ll
>     KLEE :: Concrete/Select.ll
>     KLEE :: Concrete/Shifts.ll
>     KLEE :: Concrete/SimpleStoreAndLoad.ll
>     KLEE :: Concrete/UnconditionalBranch.ll
>     KLEE :: Concrete/UnconditionalBranchWithSimplePhi.ll
>     KLEE :: Concrete/UnorderedPhiNodes.ll
>     KLEE :: Concrete/ackermann.c
>     KLEE :: Concrete/arith_test.ll
>
>   Expected Passes    : 131
>   Expected Failures  : 2
>   Unsupported Tests  : 1
>   Unexpected Failures: 20
>
> Each regression failure generates output of the form
>
> Command 0 Stderr:
> Traceback (most recent call last):
>   File "ROOT/klee/src/test/Concrete/ConcreteTest.py", line 72, in <module>
>     main()
>   File "ROOT/klee/src/test/Concrete/ConcreteTest.py", line 69, in main
>     testFile(test_name, opts.klee_path, opts.lli_path)
>   File "ROOT/klee/src/test/Concrete/ConcreteTest.py", line 26, in testFile
>     lliOut = subprocess.check_output(lli_cmd).decode()
> AttributeError: 'module' object has no attribute 'check_output'

What version of python2 are you using? I have 2.7.8 and it works fine.

> I'm using Python2 and ConcreteTest.py line 26 refers to Python3.  Using
> Python3 fails with an error pointing to the LLVM 3.3 source tree

It's likely that the version of llvm-lit in the LLVM3.3 source tree
doesn't support Python3

As a temporary work around you could change

#!/usr/bin/python

to the path to your Python3 installation in ConcreteTest.py

[1] https://travis-ci.org/klee/klee

Thanks,
Dan.




More information about the klee-dev mailing list