Hello community,

here is the log from the commit of package klee for openSUSE:Factory checked in 
at 2018-09-03 10:36:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/klee (Old)
 and      /work/SRC/openSUSE:Factory/.klee.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "klee"

Mon Sep  3 10:36:19 2018 rev:11 rq:632727 version:1.4.0+20180829

Changes:
--------
--- /work/SRC/openSUSE:Factory/klee/klee.changes        2018-06-19 
12:03:35.502191929 +0200
+++ /work/SRC/openSUSE:Factory/.klee.new/klee.changes   2018-09-03 
10:36:21.780864785 +0200
@@ -1,0 +2,106 @@
+Sun Sep 02 08:39:37 UTC 2018 - opensuse-packag...@opensuse.org
+
+- Update to version 1.4.0+20180829:
+  * klee-stats: add TResolve(%) to --print-all
+  * llvm.sh: fix patch source paths
+  * Disabled unit testing in default build
+  * Fixed runtest library to handle the case of a NULL "name" argument in 
klee_make_symbolic.  Changed a test case to check this feature.
+  * Replace remaining *Inst::Create() calls with llvm::Builder
+  * [clang-format]Allow longer codelines in test/
+  * test: remove geq-llvm-3.4
+  * remove last comma from -debug-print-escaping-functions
+  * test/Feature/EscapingFunctionsAlias.c: clarify alias(ee) casting
+  * add declarations to escapingFunctions
+  * ModuleUtil: improve and test valueIsOnlyCalled
+  * fix: LLVM 3.5, begin_user() instead of begin_use()
+  * ExternalDispatcher: setErrorStr for EngineBuilder
+  * travis CI: add LLVM 3.8 build tests
+  * llvm38: test, change some tests
+  * llvm38: no more implicit iterators
+  * llvm38: archive child iterator changes
+  * llvm38: adapt to new Linker::linkModules
+  * llvm38: SmallString is always up-to-date
+  * llvm38: handle optimization passes changes
+  * llvm38: no rounding in APFloat
+  * Fix uploading of coverage information from inside of docker
+  * Add missing curl
+  * Fix slow Mac Travis build: wildcard is not expanded with quotes
+  * Added "override" in Executor.h to silence compiler warnings (and ran 
clang-format on patch)
+  * Removed support for klee_make_symbolic with 2 arguments.  This has been 
deprecated for many years now and causes problems during replay.  Changed and 
simplified affected test case.
+  * test: remove undefined behaviour
+  * Enabled tcmalloc by default
+  * Link dynamic libraries with specific paths instead of resolving them 
during runtime
+  * Fix incorrect invocation of klee
+  * Fix uninitialized memory: enums have to be initialized
+  * Add missing out-of-tree include files directory for TCMalloc
+  * Fix compiler warnings if assertions are disabled
+  * Support sanitizer suppression files with lit-based testing
+  * Extensive updates to the build script for dependencies and docker
+  * runtime: remove obsolete code for building modules instead of archives
+  * Reorder linking and optimizations
+  * Reorganise runtime libraries provided by KLEE
+  * Removed obsolete script
+  * test/lit.cfg: remove obsolete hack from (LLVM < 3.0 is no longer supported)
+  * CMake: use cmake_{push,pop}_check_state
+  * CMake: check for ctype and mallinfo functions with CXX instead of C 
compiler
+  * fix out of range access in KleeHandler::getKTestFilesInDir
+  * Explicitly initialize value to squelch a potentially uninitialized value 
warning
+  * Fix the final -Wimplicit-fallthrough warning
+  * Make ConstantExpr hashing function faster and modify affected test
+- added patches:
+  * 0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
+  * 0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
+  * 0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch
+- removed patches (in upstream now):
+  * 0001-test-remove-undefined-behaviour.patch
+  * 0002-llvm38-no-rounding-in-APFloat.patch
+  * 0003-llvm38-handle-optimization-passes-changes.patch
+  * 0004-llvm38-SmallString-is-always-up-to-date.patch
+  * 0005-llvm38-materializeAllPermanently-was-renamed.patch
+  * 0006-llvm38-adapt-to-new-Linker-linkModules.patch
+  * 0007-llvm38-archive-child-iterator-changes.patch
+  * 0008-llvm38-no-more-implicit-iterators.patch
+  * 0009-llvm38-test-change-some-tests.patch
+- renamed patches:
+  * 0010-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+    -> 0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+  * 0011-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
+    -> 0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
+  * 0012-llvm40-handle-different-header-names.patch
+    -> 0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
+  * 0013-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
+    -> 0004-llvm40-handle-different-header-names.patch
+  * 0014-llvm40-errorOr-and-similar.patch
+    -> 0006-llvm40-errorOr-and-similar.patch
+  * 0015-llvm-use-chrono-helpers-from-LLVM-4.0.patch
+    -> 0007-llvm-use-chrono-helpers-from-LLVM-4.0.patch
+  * 0016-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
+    -> 0008-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
+  * 0017-llvm40-gep_type_iterator-has-no-operator.patch
+    -> 0009-llvm40-gep_type_iterator-has-no-operator.patch
+  * 0018-llvm50-avoid-on-function-arg_begin.patch
+    -> 0010-llvm50-avoid-on-function-arg_begin.patch
+  * 0019-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
+    -> 0011-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
+  * 0020-llvm50-handle-getOrInsertFunction-terminator.patch
+    -> 0012-llvm50-handle-getOrInsertFunction-terminator.patch
+  * 0021-llvm50-SwitchInst-case-functions-now-return-pointers.patch
+    -> 0013-llvm50-SwitchInst-case-functions-now-return-pointers.patch
+  * 0022-llvm50-handle-new-file_magic-s-location.patch
+    -> 0014-llvm50-handle-new-file_magic-s-location.patch
+  * 0023-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
+    -> 0015-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
+  * 0024-llvm50-AllocaInst-takes-address-space.patch
+    -> 0016-llvm50-AllocaInst-takes-address-space.patch
+  * 0025-llvm50-Intrinsic-objectsize-has-three-arguments.patch
+    -> 0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch
+  * 0026-llvm50-test-change-objectsize.patch
+    -> 0018-llvm50-test-change-objectsize.patch
+  * 0027-llvm50-test-add-disable-O0-optnone-to-O0.patch
+    -> 0019-llvm50-test-add-disable-O0-optnone-to-O0.patch
+  * 0028-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
+    -> 0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
+  * 0029-llvm60-handle-headers-renaming.patch
+    -> 0022-llvm6-handle-headers-renaming.patch
+
+-------------------------------------------------------------------
@@ -9,0 +116,56 @@
+- switch to llvm 6
+- removed patches:
+  * 0001-llvm-make-KLEE-compile-against-LLVM-3.8.patch
+    (it was split into multiple commits below)
+  * klee-skip-some-tests.patch
+    (tests should be working perfectly now)
+- added patches:
+  * 0001-test-remove-undefined-behaviour.patch
+  * 0002-llvm38-no-rounding-in-APFloat.patch
+  * 0003-llvm38-handle-optimization-passes-changes.patch
+  * 0004-llvm38-SmallString-is-always-up-to-date.patch
+  * 0005-llvm38-materializeAllPermanently-was-renamed.patch
+  * 0006-llvm38-adapt-to-new-Linker-linkModules.patch
+  * 0007-llvm38-archive-child-iterator-changes.patch
+  * 0008-llvm38-no-more-implicit-iterators.patch
+  * 0011-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
+  * 0027-llvm50-test-add-disable-O0-optnone-to-O0.patch
+- renamed patches:
+  * 0002-llvm38-test-change-some-tests.patch
+    -> 0009-llvm38-test-change-some-tests.patch
+  * 0003-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+    -> 0010-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+  * 0004-llvm40-handle-different-header-names.patch
+    -> 0012-llvm40-handle-different-header-names.patch
+  * 0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
+    -> 0013-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
+  * 0006-llvm40-errorOr-and-similar.patch
+    -> 0014-llvm40-errorOr-and-similar.patch
+  * 0007-llvm-use-chrono-helpers-from-LLVM-4.0.patch
+    -> 0015-llvm-use-chrono-helpers-from-LLVM-4.0.patch
+  * 0008-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
+    -> 0016-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch
+  * 0009-llvm40-gep_type_iterator-has-no-operator.patch
+    -> 0017-llvm40-gep_type_iterator-has-no-operator.patch
+  * 0010-llvm50-avoid-on-function-arg_begin.patch
+    -> 0018-llvm50-avoid-on-function-arg_begin.patch
+  * 0011-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
+    -> 0019-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch
+  * 0012-llvm50-handle-getOrInsertFunction-terminator.patch
+    -> 0020-llvm50-handle-getOrInsertFunction-terminator.patch
+  * 0013-llvm50-SwitchInst-case-functions-now-return-pointers.patch
+    -> 0021-llvm50-SwitchInst-case-functions-now-return-pointers.patch
+  * 0014-llvm50-handle-new-file_magic-s-location.patch
+    -> 0022-llvm50-handle-new-file_magic-s-location.patch
+  * 0015-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
+    -> 0023-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch
+  * 0016-llvm50-AllocaInst-takes-address-space.patch
+    -> 0024-llvm50-AllocaInst-takes-address-space.patch
+  * 0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch
+    -> 0025-llvm50-Intrinsic-objectsize-has-three-arguments.patch
+  * 0018-llvm50-test-change-objectsize.patch
+    -> 0026-llvm50-test-change-objectsize.patch
+  * 0019-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
+    -> 0028-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
+  * 0020-llvm60-handle-headers-renaming.patch
+    -> 0029-llvm60-handle-headers-renaming.patch

Old:
----
  0001-llvm-make-KLEE-compile-against-LLVM-3.8.patch
  0002-llvm38-test-change-some-tests.patch
  0003-llvm-make-KLEE-compile-against-LLVM-3.9.patch
  0019-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
  0020-llvm60-handle-headers-renaming.patch
  klee-1.4.0+20180614.tar.xz
  klee-skip-some-tests.patch

New:
----
  0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
  0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
  0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
  0019-llvm50-test-add-disable-O0-optnone-to-O0.patch
  0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch
  0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
  0022-llvm6-handle-headers-renaming.patch
  klee-1.4.0+20180829.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ klee.spec ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.324866192 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.324866192 +0200
@@ -15,11 +15,11 @@
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
-%define llvm_version_major 4
+%define llvm_version_major 6
 %define llvm_version_minor 0
 %define llvm_version %{llvm_version_major}
 
-%define version_unconverted 1.4.0+20180614
+%define version_unconverted 1.4.0+20180829
 
 %ifarch %{ix86} x86_64
 %define with_uclibc 1
@@ -31,7 +31,7 @@
 Summary:        LLVM Execution Engine
 License:        NCSA
 Group:          Development/Languages/Other
-Version:        1.4.0+20180614
+Version:        1.4.0+20180829
 Release:        0
 Url:            http://klee.github.io/
 Source0:        %{name}-%{version}.tar.xz
@@ -39,9 +39,9 @@
 Source2:        
https://raw.githubusercontent.com/llvm-mirror/llvm/release_%{llvm_version_major}%{llvm_version_minor}/utils/not/not.cpp
 Source3:        
https://raw.githubusercontent.com/llvm-mirror/llvm/release_%{llvm_version_major}%{llvm_version_minor}/utils/FileCheck/FileCheck.cpp
 
-Patch201:       0001-llvm-make-KLEE-compile-against-LLVM-3.8.patch
-Patch202:       0002-llvm38-test-change-some-tests.patch
-Patch203:       0003-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+Patch201:       0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
+Patch202:       0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch
+Patch203:       0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch
 Patch204:       0004-llvm40-handle-different-header-names.patch
 Patch205:       0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch
 Patch206:       0006-llvm40-errorOr-and-similar.patch
@@ -57,10 +57,10 @@
 Patch216:       0016-llvm50-AllocaInst-takes-address-space.patch
 Patch217:       0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch
 Patch218:       0018-llvm50-test-change-objectsize.patch
-Patch219:       0019-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
-Patch220:       0020-llvm60-handle-headers-renaming.patch
-
-Patch300:       klee-skip-some-tests.patch
+Patch219:       0019-llvm50-test-add-disable-O0-optnone-to-O0.patch
+Patch220:       0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch
+Patch221:       0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
+Patch222:       0022-llvm6-handle-headers-renaming.patch
 
 BuildRequires:  clang%{llvm_version}
 BuildRequires:  cmake
@@ -87,29 +87,7 @@
 
 %prep
 %setup -q
-
-%patch201 -p1
-%patch202 -p1
-%patch203 -p1
-%patch204 -p1
-%patch205 -p1
-%patch206 -p1
-%patch207 -p1
-%patch208 -p1
-%patch209 -p1
-%patch210 -p1
-%patch211 -p1
-%patch212 -p1
-%patch213 -p1
-%patch214 -p1
-%patch215 -p1
-%patch216 -p1
-%patch217 -p1
-%patch218 -p1
-%patch219 -p1
-%patch220 -p1
-
-#%%patch300 -p1
+%autopatch -p1
 
 mkdir -p build/test/
 cp %{SOURCE2} build/test/
@@ -167,8 +145,9 @@
 %{_libdir}/libkleeRuntest.so*
 %dir %{_libdir}/klee/
 %dir %{_libdir}/klee/runtime/
-%{_libdir}/klee/runtime/klee-libc.bc
-%{_libdir}/klee/runtime/kleeRuntimeIntrinsic.bc
+%{_libdir}/klee/runtime/libklee-libc.bca
+%{_libdir}/klee/runtime/libkleeRuntimeFreeStanding.bca
+%{_libdir}/klee/runtime/libkleeRuntimeIntrinsic.bca
 %if %{with_uclibc}
 %{_libdir}/klee/runtime/klee-uclibc.bca
 %{_libdir}/klee/runtime/libkleeRuntimePOSIX.bca

++++++ 0001-llvm-make-KLEE-compile-against-LLVM-3.8.patch -> 
0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch ++++++
--- 
/work/SRC/openSUSE:Factory/klee/0001-llvm-make-KLEE-compile-against-LLVM-3.8.patch
  2018-05-30 12:29:50.564843026 +0200
+++ 
/work/SRC/openSUSE:Factory/.klee.new/0001-llvm-make-KLEE-compile-against-LLVM-3.9.patch
     2018-09-03 10:36:21.416863844 +0200
@@ -1,270 +1,295 @@
-From: =?UTF-8?q?Richard=20Trembeck=C3=BD?= <richa...@centrum.sk>
-Date: Wed, 4 May 2016 15:21:45 +0200
-Subject: llvm: make KLEE compile against LLVM 3.8
+From: Jiri Slaby <jirisl...@gmail.com>
+Date: Wed, 22 Feb 2017 15:57:55 +0100
+Subject: llvm: make KLEE compile against LLVM 3.9
 Patch-mainline: no
 
 Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
 ---
- lib/Core/Executor.cpp           |  5 +++++
- lib/Core/StatsTracker.cpp       |  4 ++++
- lib/Module/IntrinsicCleaner.cpp | 10 ++++++++-
- lib/Module/LowerSwitch.cpp      |  8 +++++++
- lib/Module/ModuleUtil.cpp       | 39 ++++++++++++++++++++++++++++-----
- lib/Module/Optimize.cpp         | 13 ++++++++++-
- tools/klee/main.cpp             |  7 +++++-
- 7 files changed, 77 insertions(+), 9 deletions(-)
+ lib/Core/Executor.cpp      | 16 ++++++++++++++++
+ lib/Core/MemoryManager.cpp |  5 ++++-
+ lib/Module/ModuleUtil.cpp  | 33 ++++++++++++++++++++++++++++++---
+ lib/Module/Optimize.cpp    | 34 ++++++++++++++++++++++++++++++++++
+ lib/Module/RaiseAsm.cpp    | 10 +++++++++-
+ tools/kleaver/main.cpp     |  4 ++++
+ tools/klee/main.cpp        |  4 ++++
+ 7 files changed, 101 insertions(+), 5 deletions(-)
 
 diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
-index f0781e5b882a..2c7e8d4d52a6 100644
+index b053d4882431..7f69a618b8ec 100644
 --- a/lib/Core/Executor.cpp
 +++ b/lib/Core/Executor.cpp
-@@ -2210,8 +2210,13 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
-         !fpWidthToSemantics(right->getWidth()))
-       return terminateStateOnExecError(state, "Unsupported FRem operation");
-     llvm::APFloat Res(*fpWidthToSemantics(left->getWidth()), 
left->getAPValue());
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    Res.mod(
-+        APFloat(*fpWidthToSemantics(right->getWidth()), right->getAPValue()));
+@@ -1338,10 +1338,18 @@ void Executor::executeCall(ExecutionState &state,
+           //
+           // Alignment requirements for scalar types is the same as their size
+           if (argWidth > Expr::Int64) {
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++             size = llvm::alignTo(size, 16);
 +#else
-     
Res.mod(APFloat(*fpWidthToSemantics(right->getWidth()),right->getAPValue()),
-             APFloat::rmNearestTiesToEven);
+              size = llvm::RoundUpToAlignment(size, 16);
 +#endif
-     bindLocal(ki, state, ConstantExpr::alloc(Res.bitcastToAPInt()));
-     break;
-   }
-diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp
-index f2a989e28439..7881f0e84be5 100644
---- a/lib/Core/StatsTracker.cpp
-+++ b/lib/Core/StatsTracker.cpp
-@@ -637,7 +637,11 @@ static std::vector<Instruction*> getSuccs(Instruction *i) 
{
-     for (succ_iterator it = succ_begin(bb), ie = succ_end(bb); it != ie; ++it)
-       res.push_back(&*(it->begin()));
-   } else {
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    res.push_back(&*(++(i->getIterator())));
+              requires16ByteAlignment = true;
+           }
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++          size += llvm::alignTo(argWidth, WordSize) / 8;
 +#else
-     res.push_back(&*(++BasicBlock::iterator(i)));
+           size += llvm::RoundUpToAlignment(argWidth, WordSize) / 8;
 +#endif
-   }
+         }
+       }
+ 
+@@ -1374,10 +1382,18 @@ void Executor::executeCall(ExecutionState &state,
  
-   return res;
-diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
-index 3729ff82cd9d..e10e886e8915 100644
---- a/lib/Module/IntrinsicCleaner.cpp
-+++ b/lib/Module/IntrinsicCleaner.cpp
-@@ -50,6 +50,10 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, 
Module &M) {
-   unsigned WordSize = DataLayout.getPointerSizeInBits() / 8;
-   for (BasicBlock::iterator i = b.begin(), ie = b.end(); i != ie;) {
-     IntrinsicInst *ii = dyn_cast<IntrinsicInst>(&*i);
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    // create a copy of iterator to pass to IRBuilder ctor later
-+    BasicBlock::iterator i_ = i;
-+#endif
-     // increment now since deletion of instructions makes iterator invalid.
-     ++i;
-     if (ii) {
-@@ -110,8 +114,12 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, 
Module &M) {
-       case Intrinsic::uadd_with_overflow:
-       case Intrinsic::usub_with_overflow:
-       case Intrinsic::umul_with_overflow: {
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+        // ctor needs the iterator, but we already increased ours
-+        IRBuilder<> builder(ii->getParent(), i_);
+             Expr::Width argWidth = arguments[i]->getWidth();
+             if (argWidth > Expr::Int64) {
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++              offset = llvm::alignTo(offset, 16);
 +#else
-         IRBuilder<> builder(ii->getParent(), ii);
--
+               offset = llvm::RoundUpToAlignment(offset, 16);
 +#endif
-         Value *op1 = ii->getArgOperand(0);
-         Value *op2 = ii->getArgOperand(1);
- 
-diff --git a/lib/Module/LowerSwitch.cpp b/lib/Module/LowerSwitch.cpp
-index 0f4e8b1eb72b..056885219e85 100644
---- a/lib/Module/LowerSwitch.cpp
-+++ b/lib/Module/LowerSwitch.cpp
-@@ -64,7 +64,11 @@ void LowerSwitchPass::switchConvert(CaseItr begin, CaseItr 
end,
-   // iterate through all the cases, creating a new BasicBlock for each
-   for (CaseItr it = begin; it < end; ++it) {
-     BasicBlock *newBlock = BasicBlock::Create(F->getContext(), "NodeBlock");
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    Function::iterator FI = origBlock->getIterator();
-+#else
-     Function::iterator FI = origBlock;
-+#endif
-     F->getBasicBlockList().insert(++FI, newBlock);
-     
-     ICmpInst *cmpInst = 
-@@ -101,7 +105,11 @@ void LowerSwitchPass::processSwitchInst(SwitchInst *SI) {
-   // if-then statements go to this and the PHI nodes are happy.
-   BasicBlock* newDefault = BasicBlock::Create(F->getContext(), "newDefault");
+             }
+             os->write(offset, arguments[i]);
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++            offset += llvm::alignTo(argWidth, WordSize) / 8;
++#else
+             offset += llvm::RoundUpToAlignment(argWidth, WordSize) / 8;
++#endif
+           }
+         }
+       }
+diff --git a/lib/Core/MemoryManager.cpp b/lib/Core/MemoryManager.cpp
+index 24e2ed97581f..f40e8bc9deb8 100644
+--- a/lib/Core/MemoryManager.cpp
++++ b/lib/Core/MemoryManager.cpp
+@@ -111,9 +111,12 @@ MemoryObject *MemoryManager::allocate(uint64_t size, bool 
isLocal,
  
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+  F->getBasicBlockList().insert(defaultBlock->getIterator(), newDefault);
+   uint64_t address = 0;
+   if (DeterministicAllocation) {
+-
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++    address = llvm::alignTo((uint64_t)nextFreeSlot + alignment - 1, 
alignment);
 +#else
-   F->getBasicBlockList().insert(defaultBlock, newDefault);
+     address = llvm::RoundUpToAlignment((uint64_t)nextFreeSlot + alignment - 1,
+                                        alignment);
 +#endif
-   BranchInst::Create(defaultBlock, newDefault);
  
-   // If there is an entry in any PHI nodes for the default edge, make sure
+     // Handle the case of 0-sized allocations as 1-byte allocations.
+     // This way, we make sure we have this allocation between its own red 
zones
 diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
-index b07d3d2fe348..e6d592b135b6 100644
+index 5ca0a55b12d2..0e87b5a6deca 100644
 --- a/lib/Module/ModuleUtil.cpp
 +++ b/lib/Module/ModuleUtil.cpp
-@@ -207,8 +207,19 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
- 
-     StringRef memberName;
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
--    ErrorOr<StringRef> memberNameErr = AI->getName();
--    std::error_code ec = memberNameErr.getError();
-+    std::error_code ec;
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    ErrorOr<object::Archive::Child> childErr = *AI;
-+    ec = childErr.getError();
-+    if (ec) {
-+      errorMessage = ec.message();
-+      return false;
-+    }
-+#else
-+    object::Archive::child_iterator childErr = AI;
-+#endif
-+    ErrorOr<StringRef> memberNameErr = childErr->getName();
-+    ec = memberNameErr.getError();
-     if (!ec) {
-       memberName = memberNameErr.get();
- #else
-@@ -226,7 +237,8 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-     }
- 
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
--    ErrorOr<std::unique_ptr<llvm::object::Binary> > child = AI->getAsBinary();
-+    ErrorOr<std::unique_ptr<llvm::object::Binary> > child =
-+      childErr->getAsBinary();
-     ec = child.getError();
- #else
-     OwningPtr<object::Binary> child;
-@@ -235,7 +247,7 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-     if (ec) {
-       // If we can't open as a binary object file its hopefully a bitcode file
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
--      ErrorOr<MemoryBufferRef> buff = AI->getMemoryBufferRef();
-+      ErrorOr<MemoryBufferRef> buff = childErr->getMemoryBufferRef();
-       ec = buff.getError();
- #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-       ErrorOr<std::unique_ptr<MemoryBuffer> > buffErr = AI->getMemoryBuffer();
-@@ -343,7 +355,9 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-           KLEE_DEBUG_WITH_TYPE("klee_linker", dbgs() << "Found " << 
GV->getName() <<
-               " in " << M->getModuleIdentifier() << "\n");
+@@ -284,7 +284,11 @@ Function *klee::getDirectCallTarget(CallSite cs, bool 
moduleIsFullyLinked) {
+     if (Function *f = dyn_cast<Function>(v)) {
+       return f;
+     } else if (llvm::GlobalAlias *ga = dyn_cast<GlobalAlias>(v)) {
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++      if (moduleIsFullyLinked || !(ga->isInterposable())) {
++#else
+       if (moduleIsFullyLinked || !(ga->mayBeOverridden())) {
++#endif
+         v = ga->getAliasee();
+       } else {
+         v = NULL;
+@@ -393,7 +397,13 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+   }
  
+   if (magic == sys::fs::file_magic::archive) {
 -#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+          if (Linker::linkModules(*composite, std::unique_ptr<Module>(M)))
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++    Expected<std::unique_ptr<object::Binary> > archOwner =
++      object::createBinary(Buffer, &context);
++    if (!archOwner)
++      ec = errorToErrorCode(archOwner.takeError());
++    llvm::object::Binary *arch = archOwner.get().get();
 +#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
-           if (Linker::LinkModules(composite, M))
- #else
-           if (Linker::LinkModules(composite, M, Linker::DestroySource, 
&errorMessage))
-@@ -360,8 +374,10 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-             // Link succeed, now clean up
-             modulesLoadedOnPass++;
-             KLEE_DEBUG_WITH_TYPE("klee_linker", dbgs() << "Linking 
succeeded.\n");
--
-+// M was owned by linkModules function
-+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 8)
-             delete M;
-+#endif
-             archiveModules[i] = 0;
- 
-             // We need to recompute the undefined symbols in the composite 
module
-@@ -427,7 +443,9 @@ Module *klee::linkWithLibrary(Module *module,
-   std::string ErrorMessage;
- 
-   if (magic == sys::fs::file_magic::bitcode) {
-+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 8)
-     Module *Result = 0;
-+#endif
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
-     ErrorOr<std::unique_ptr<Module> > ResultErr =
-@@ -445,6 +463,10 @@ Module *klee::linkWithLibrary(Module *module,
-           ErrorMessage.c_str());
-     }
- 
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    if (Linker::linkModules(*module, std::move(ResultErr.get()))) {
-+      ErrorMessage = "linking error";
-+#else
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
-     Result = ResultErr->release();
- #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-@@ -456,6 +478,7 @@ Module *klee::linkWithLibrary(Module *module,
-       ErrorMessage = "linking error";
- #else
-     if (Linker::LinkModules(module, Result, Linker::DestroySource, 
&ErrorMessage)) {
+     ErrorOr<std::unique_ptr<object::Binary>> archOwner =
+         object::createBinary(Buffer, &context);
+     ec = archOwner.getError();
+@@ -414,7 +424,12 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+ 
+     if (auto archive = dyn_cast<object::Archive>(arch)) {
+ // Load all bitcode files into memory
+-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++      Error Err;
++      for (object::Archive::child_iterator AI = archive->child_begin(Err),
++                                           AE = archive->child_end();
++           AI != AE; ++AI)
++#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
+       for (object::Archive::child_iterator AI = archive->child_begin(),
+                                            AE = archive->child_end();
+            AI != AE; ++AI)
+@@ -455,7 +470,12 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+           return false;
+         }
+ 
+-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++        Expected<std::unique_ptr<llvm::object::Binary> > child =
++            childOrErr->getAsBinary();
++        if (!child)
++          ec = errorToErrorCode(child.takeError());
++#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
+         ErrorOr<std::unique_ptr<llvm::object::Binary>> child =
+             childOrErr->getAsBinary();
+         ec = child.getError();
+@@ -519,7 +539,14 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+           return false;
+         }
+       }
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++      if (Err) {
++        errorMsg = "Cannot iterate over archive";
++        return false;
++      }
 +#endif
- #endif
-       klee_error("Link with library %s failed: %s", libraryName.c_str(),
-           ErrorMessage.c_str());
-@@ -639,7 +662,11 @@ Module *klee::loadModule(LLVMContext &ctx, const 
std::string &path, std::string
-   auto module = *errorOrModule;
- #endif
- 
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+  if (auto ec = module->materializeAll()) {
-+#else
-   if (auto ec = module->materializeAllPermanently()) {
-+#endif
-     errorMsg = ec.message();
-     return nullptr;
+     }
++
+     return true;
    }
+   if (magic.is_object()) {
 diff --git a/lib/Module/Optimize.cpp b/lib/Module/Optimize.cpp
-index 64e4863f70b3..944f51ef336d 100644
+index c788ee36cadb..34af46262080 100644
 --- a/lib/Module/Optimize.cpp
 +++ b/lib/Module/Optimize.cpp
-@@ -102,7 +102,12 @@ static void 
AddStandardCompilePasses(klee::LegacyLLVMPassManagerTy &PM) {
-   addPass(PM, createCFGSimplificationPass());    // Clean up after IPCP & DAE
+@@ -39,6 +39,11 @@
+ #include "llvm/Analysis/GlobalsModRef.h"
+ #endif
+ 
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++#include "llvm/Transforms/IPO/FunctionAttrs.h"
++#include "llvm/Transforms/Scalar/GVN.h"
++#endif
++
+ using namespace llvm;
+ 
+ // Don't verify at the end
+@@ -107,7 +112,11 @@ static void 
AddStandardCompilePasses(klee::LegacyLLVMPassManagerTy &PM) {
  
    addPass(PM, createPruneEHPass());              // Remove dead EH info
--  addPass(PM, createFunctionAttrsPass());        // Deduce function attrs
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+  addPass(PM, createPostOrderFunctionAttrsPass());
-+  addPass(PM, createReversePostOrderFunctionAttrsPass());
+ #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++  addPass(PM, createPostOrderFunctionAttrsLegacyPass());
 +#else
-+  addPass(PM, createFunctionAttrsPass()); // Deduce function attrs
+   addPass(PM, createPostOrderFunctionAttrsPass());
 +#endif
+   addPass(PM, createReversePostOrderFunctionAttrsPass()); // Deduce function 
attrs
+ #else
+   addPass(PM, createFunctionAttrsPass());        // Deduce function attrs
+@@ -120,7 +129,11 @@ static void 
AddStandardCompilePasses(klee::LegacyLLVMPassManagerTy &PM) {
+   addPass(PM, createInstructionCombiningPass()); // Cleanup for scalarrepl.
+   addPass(PM, createJumpThreadingPass());        // Thread jumps.
+   addPass(PM, createCFGSimplificationPass());    // Merge & remove BBs
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++  addPass(PM, createSROAPass());                 // Break up aggregate allocas
++#else
+   addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas
++#endif
+   addPass(PM, createInstructionCombiningPass()); // Combine silly seq's
+ 
+   addPass(PM, createTailCallEliminationPass());  // Eliminate tail calls
+@@ -183,7 +196,20 @@ void Optimize(Module *M, llvm::ArrayRef<const char *> 
preservedFunctions) {
+     // for a main function.  If main is defined, mark all other functions
+     // internal.
+     if (!DisableInternalize) {
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++      auto PreserveFunctions = [=](const GlobalValue &GV) {
++        StringRef GVName = GV.getName();
++
++        for (const char *fun: preservedFunctions)
++          if (GVName.equals(fun))
++            return true;
++
++        return false;
++      };
++      ModulePass *pass = createInternalizePass(PreserveFunctions);
++#else
+       ModulePass *pass = createInternalizePass(preservedFunctions);
++#endif
+       addPass(Passes, pass);
+     }
  
-   if (!DisableInline)
-     addPass(PM, createFunctionInliningPass());   // Inline small functions
-@@ -217,8 +222,14 @@ void Optimize(Module *M, const std::string &EntryPoint) {
+@@ -222,11 +248,19 @@ void Optimize(Module *M, llvm::ArrayRef<const char *> 
preservedFunctions) {
+     // The IPO passes may leave cruft around.  Clean up after them.
+     addPass(Passes, createInstructionCombiningPass());
+     addPass(Passes, createJumpThreadingPass());        // Thread jumps.
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++    addPass(Passes, createSROAPass());                 // Break up allocas
++#else
      addPass(Passes, createScalarReplAggregatesPass()); // Break up allocas
++#endif
  
      // Run a few AA driven optimizations here and now, to cleanup the code.
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+    addPass(Passes, createPostOrderFunctionAttrsPass());
-+    addPass(Passes, createReversePostOrderFunctionAttrsPass());
-+    // addPass(Passes, createGlobalsAAWrapperPass());
+ #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++    addPass(Passes, createPostOrderFunctionAttrsLegacyPass());
++#else
+     addPass(Passes, createPostOrderFunctionAttrsPass());
++#endif
+     addPass(Passes, createReversePostOrderFunctionAttrsPass()); // Add 
nocapture
+     addPass(Passes, createGlobalsAAWrapperPass());   // IP alias analysis
+ #else
+diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
+index c597fa2a7b82..4967a2fa8578 100644
+--- a/lib/Module/RaiseAsm.cpp
++++ b/lib/Module/RaiseAsm.cpp
+@@ -60,7 +60,11 @@ bool RaiseAsmPass::runOnInstruction(Module &M, Instruction 
*I) {
+ 
+     if (ia->getAsmString() == "" && ia->hasSideEffects()) {
+       IRBuilder<> Builder(I);
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++      Builder.CreateFence(llvm::AtomicOrdering::SequentiallyConsistent);
++#else
+       Builder.CreateFence(llvm::SequentiallyConsistent);
++#endif
+       I->eraseFromParent();
+       return true;
+     }
+@@ -81,7 +85,11 @@ bool RaiseAsmPass::runOnModule(Module &M) {
+     klee_warning("Warning: unable to select native target: %s", Err.c_str());
+     TLI = 0;
+   } else {
+-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++    TM = NativeTarget->createTargetMachine(HostTriple, "", "", 
TargetOptions(),
++        None);
++    TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering();
++#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
+     TM = NativeTarget->createTargetMachine(HostTriple, "", "", 
TargetOptions());
+     TLI = TM->getSubtargetImpl(*(M.begin()))->getTargetLowering();
+ #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
+diff --git a/tools/kleaver/main.cpp b/tools/kleaver/main.cpp
+index b8b32e31264a..800cece95e9c 100644
+--- a/tools/kleaver/main.cpp
++++ b/tools/kleaver/main.cpp
+@@ -400,7 +400,11 @@ static bool printInputAsSMTLIBv2(const char *Filename,
+ int main(int argc, char **argv) {
+   bool success = true;
+ 
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++  llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
 +#else
-     addPass(Passes, createFunctionAttrsPass());      // Add nocapture
-     addPass(Passes, createGlobalsModRefPass());      // IP alias analysis
+   llvm::sys::PrintStackTraceOnErrorSignal();
 +#endif
+   llvm::cl::SetVersionPrinter(klee::printVersion);
+   llvm::cl::ParseCommandLineOptions(argc, argv);
  
-     addPass(Passes, createLICMPass());               // Hoist loop invariants
-     addPass(Passes, createGVNPass());                // Remove redundancies
 diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
-index ab9dfe286ffb..3d73ae07fcb5 100644
+index c655aa560f62..7be5f07cdc0e 100644
 --- a/tools/klee/main.cpp
 +++ b/tools/klee/main.cpp
-@@ -291,7 +291,12 @@ KleeHandler::KleeHandler(int argc, char **argv)
-     for (; i <= INT_MAX; ++i) {
-       SmallString<128> d(directory);
-       llvm::sys::path::append(d, "klee-out-");
--      raw_svector_ostream ds(d); ds << i; ds.flush();
-+      raw_svector_ostream ds(d);
-+      ds << i;
-+// SmallString is always up-to-date, no need to flush. See 
Support/raw_ostream.h
-+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 8)
-+      ds.flush();
+@@ -1092,7 +1092,11 @@ int main(int argc, char **argv, char **envp) {
+   llvm::InitializeNativeTarget();
+ 
+   parseArguments(argc, argv);
++#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
++  sys::PrintStackTraceOnErrorSignal(argv[0]);
++#else
+   sys::PrintStackTraceOnErrorSignal();
 +#endif
  
-       // create directory and try to link klee-last
-       if (mkdir(d.c_str(), 0775) == 0) {
+   if (Watchdog) {
+     if (MaxTime==0) {
 -- 
-2.17.0
+2.18.0
 

++++++ 0002-cmake-find_llvm-fix-libraries-with-llvm-config-3.9.patch ++++++
From: Jiri Slaby <jirisl...@gmail.com>
Date: Fri, 25 May 2018 15:17:03 +0200
Subject: cmake: find_llvm, fix libraries with llvm-config 3.9
Patch-mainline: no

llvm-config from llvm 3.9 was broken. Fix handling of improperly
returned libraries.
From:
liblibLLVM-3.9.so.so
To:
libLLVM-3.9.so

Fixes #895.

Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
---
 cmake/find_llvm.cmake | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/cmake/find_llvm.cmake b/cmake/find_llvm.cmake
index adf68c4fc82a..8ceed19f7b9e 100644
--- a/cmake/find_llvm.cmake
+++ b/cmake/find_llvm.cmake
@@ -172,7 +172,11 @@ else()
     set(targets_to_return "")
     set(created_targets "")
     foreach (llvm_lib ${_llvm_libs_list})
+      # a bug in llvm-config from LLVM 3.9
+      string(REGEX REPLACE "lib(libLLVM[-.a-zA-Z0-9]+\\.so)\\.so$" "\\1" 
llvm_lib "${llvm_lib}")
+
       get_filename_component(llvm_lib_file_name "${llvm_lib}" NAME)
+
       string(REGEX REPLACE "^(lib)?(LLVM[-.a-zA-Z0-9]+)\\..+$" "\\2" 
target_name "${llvm_lib_file_name}")
       list(APPEND targets_to_return "${target_name}")
       if (NOT TARGET "${target_name}")
-- 
2.18.0

++++++ 0003-llvm39-switch-KLEE_RUNTIME_BUILD_TYPE-to-Debug-Asser.patch ++++++
From: Jiri Slaby <jirisl...@gmail.com>
Date: Fri, 20 Jul 2018 09:34:51 +0200
Subject: llvm39: switch KLEE_RUNTIME_BUILD_TYPE to Debug+Asserts
Patch-mainline: no

So that we do not optimize the library during build. It should be
optimized only on runtime, depending on the -optimize parameter.

It could cause various failures like:
inlinable function call in a function with debug info must have a !dbg location
  call void @klee_overshift_check(i64 64, i64 %int_cast_to_i64)

Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c34b8786f313..961ab19d75df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -520,7 +520,7 @@ set(available_klee_runtime_build_types
 if (NOT KLEE_RUNTIME_BUILD_TYPE)
   message(STATUS "KLEE_RUNTIME_BUILD_TYPE is not set. Setting default")
   message(STATUS "The available runtime build types are: 
${available_klee_runtime_build_types}")
-  set(KLEE_RUNTIME_BUILD_TYPE "Release+Debug+Asserts" CACHE String
+  set(KLEE_RUNTIME_BUILD_TYPE "Debug+Asserts" CACHE String
     "Options are ${available_klee_runtime_build_types}"
     FORCE)
 endif()
-- 
2.18.0

++++++ 0004-llvm40-handle-different-header-names.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.368866306 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.368866306 +0200
@@ -14,7 +14,7 @@
  3 files changed, 18 insertions(+), 2 deletions(-)
 
 diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
-index 75e71c0a557f..232cd88fd621 100644
+index 74d91a8f0122..c041be10313c 100644
 --- a/lib/Module/KModule.cpp
 +++ b/lib/Module/KModule.cpp
 @@ -21,7 +21,11 @@
@@ -26,25 +26,25 @@
 +#else
  #include "llvm/Bitcode/ReaderWriter.h"
 +#endif
+ #include "llvm/IR/DataLayout.h"
+ #include "llvm/IR/IRBuilder.h"
  #include "llvm/IR/Instructions.h"
- #include "llvm/IR/LLVMContext.h"
- #include "llvm/IR/Module.h"
 diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
-index ee4af254dae2..8aa070743048 100644
+index 0e87b5a6deca..c2792454d904 100644
 --- a/lib/Module/ModuleUtil.cpp
 +++ b/lib/Module/ModuleUtil.cpp
-@@ -26,7 +26,9 @@
+@@ -24,7 +24,9 @@
+ #include "llvm/Object/Archive.h"
  #include "llvm/Object/Error.h"
- #include "llvm/Support/FileSystem.h"
- #include "llvm/Support/SourceMgr.h"
+ #include "llvm/Object/ObjectFile.h"
 +#if LLVM_VERSION_CODE < LLVM_VERSION(4, 0)
  #include "llvm/Support/DataStream.h"
 +#endif
+ #include "llvm/Support/FileSystem.h"
+ #include "llvm/Support/SourceMgr.h"
  
- #if LLVM_VERSION_CODE < LLVM_VERSION(3, 5)
- #include "llvm/Linker.h"
-@@ -36,8 +38,13 @@
- #include "llvm/IR/AssemblyAnnotationWriter.h"
+@@ -43,8 +45,13 @@
+ #include "llvm/IR/DiagnosticPrinter.h"
  #endif
  
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
@@ -59,18 +59,18 @@
  #include "llvm/Support/raw_ostream.h"
  #include "llvm/Support/Path.h"
 diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
-index c0ea4fa54551..154a76feb361 100644
+index 7be5f07cdc0e..c7dc517a8eee 100644
 --- a/tools/klee/main.cpp
 +++ b/tools/klee/main.cpp
-@@ -31,7 +31,6 @@
- #include "llvm/IR/LLVMContext.h"
- #include "llvm/Support/Errno.h"
- #include "llvm/Support/FileSystem.h"
+@@ -23,7 +23,6 @@
+ #include "klee/Interpreter.h"
+ #include "klee/Statistics.h"
+ 
 -#include "llvm/Bitcode/ReaderWriter.h"
- #include "llvm/Support/CommandLine.h"
- #include "llvm/Support/ManagedStatic.h"
- #include "llvm/Support/MemoryBuffer.h"
-@@ -45,6 +44,12 @@
+ #include "llvm/IR/Constants.h"
+ #include "llvm/IR/IRBuilder.h"
+ #include "llvm/IR/InstrTypes.h"
+@@ -46,6 +45,12 @@
  #include "llvm/Support/system_error.h"
  #endif
  
@@ -84,5 +84,5 @@
  #include <signal.h>
  #include <unistd.h>
 -- 
-2.17.0
+2.18.0
 

++++++ 0005-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.380866337 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.380866337 +0200
@@ -9,10 +9,10 @@
  1 file changed, 9 insertions(+)
 
 diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
-index b2178cccefd2..75132e0db71b 100644
+index 7f69a618b8ec..1a5b7b9df527 100644
 --- a/lib/Core/Executor.cpp
 +++ b/lib/Core/Executor.cpp
-@@ -1448,12 +1448,21 @@ static bool isDebugIntrinsic(const Function *f, 
KModule *KM) {
+@@ -1480,12 +1480,21 @@ static bool isDebugIntrinsic(const Function *f, 
KModule *KM) {
  
  static inline const llvm::fltSemantics * fpWidthToSemantics(unsigned width) {
    switch(width) {
@@ -35,5 +35,5 @@
      return 0;
    }
 -- 
-2.17.0
+2.18.0
 

++++++ 0006-llvm40-errorOr-and-similar.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.392866368 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.392866368 +0200
@@ -5,124 +5,49 @@
 
 Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
 ---
- lib/Module/ModuleUtil.cpp | 50 ++++++++++++++++++++++++++++++++-------
- 1 file changed, 41 insertions(+), 9 deletions(-)
+ lib/Module/ModuleUtil.cpp | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
 
 diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
-index 8aa070743048..ad847de0b368 100644
+index c2792454d904..7f4bdb49380a 100644
 --- a/lib/Module/ModuleUtil.cpp
 +++ b/lib/Module/ModuleUtil.cpp
-@@ -204,7 +204,7 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-   KLEE_DEBUG_WITH_TYPE("klee_linker", dbgs() << "Loading modules\n");
-   // Load all bitcode files in to memory so we can examine their symbols
+@@ -432,7 +432,7 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+     if (auto archive = dyn_cast<object::Archive>(arch)) {
+ // Load all bitcode files into memory
  #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
--  Error Err;
-+  Error Err = Error::success();
-   for (object::Archive::child_iterator AI = archive->child_begin(Err),
-        AE = archive->child_end(); AI != AE; ++AI)
- #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-@@ -229,8 +229,14 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
+-      Error Err;
++      Error Err = Error::success();
+       for (object::Archive::child_iterator AI = archive->child_begin(Err),
+                                            AE = archive->child_end();
+            AI != AE; ++AI)
+@@ -460,8 +460,14 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
  #else
-     object::Archive::child_iterator childErr = AI;
+       object::Archive::child_iterator childOrErr = AI;
  #endif
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+    Expected<StringRef> memberNameErr = childErr->getName();
-+    ec = memberNameErr ? std::error_code() :
-+      errorToErrorCode(memberNameErr.takeError());
++      Expected<StringRef> memberNameErr = childOrErr->getName();
++      ec = memberNameErr ? std::error_code() :
++              errorToErrorCode(memberNameErr.takeError());
 +#else
-     ErrorOr<StringRef> memberNameErr = childErr->getName();
-     ec = memberNameErr.getError();
+         ErrorOr<StringRef> memberNameErr = childOrErr->getName();
+         ec = memberNameErr.getError();
 +#endif
-     if (!ec) {
-       memberName = memberNameErr.get();
+         if (!ec) {
+           memberName = memberNameErr.get();
  #else
-@@ -267,7 +273,10 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
+@@ -492,7 +498,10 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
  #endif
-     if (ec) {
-       // If we can't open as a binary object file its hopefully a bitcode file
+         if (ec) {
+ // If we can't open as a binary object file its hopefully a bitcode file
 -#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+      Expected<MemoryBufferRef> buff = childErr->getMemoryBufferRef();
-+      ec = buff ? std::error_code() : errorToErrorCode(buff.takeError());
++        Expected<MemoryBufferRef> buff = childOrErr->getMemoryBufferRef();
++        ec = buff ? std::error_code() : errorToErrorCode(buff.takeError());
 +#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
-       ErrorOr<MemoryBufferRef> buff = childErr->getMemoryBufferRef();
-       ec = buff.getError();
+           ErrorOr<MemoryBufferRef> buff = childOrErr->getMemoryBufferRef();
+           ec = buff.getError();
  #elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-@@ -291,13 +300,20 @@ static bool linkBCA(object::Archive* archive, Module* 
composite, std::string& er
-         Module *Result = 0;
-         // FIXME: Maybe load bitcode file lazily? Then if we need to link, 
materialise the module
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
--#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+        Expected<std::unique_ptr<Module> > resultErr =
-+            parseBitcodeFile(buff.get(), composite->getContext());
-+        ec = resultErr ? std::error_code() :
-+          errorToErrorCode(resultErr.takeError());
-+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
-         ErrorOr<std::unique_ptr<Module> > resultErr =
-+          parseBitcodeFile(buff.get(), composite->getContext());
-+        ec = resultErr.getError();
- #else
-         ErrorOr<Module *> resultErr =
--#endif
-           parseBitcodeFile(buff.get(), composite->getContext());
-         ec = resultErr.getError();
-+#endif
-         if (ec)
-           errorMessage = ec.message();
-         else
-@@ -474,7 +490,12 @@ Module *klee::linkWithLibrary(Module *module,
- #if LLVM_VERSION_CODE < LLVM_VERSION(3, 8)
-     Module *Result = 0;
- #endif
--#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+    Expected<std::unique_ptr<Module> > ResultErr =
-+      parseBitcodeFile(Buffer, Context);
-+    if (!ResultErr) {
-+      ErrorMessage = errorToErrorCode(ResultErr.takeError()).message();
-+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 5)
- #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 7)
-     ErrorOr<std::unique_ptr<Module> > ResultErr =
- #else
-@@ -680,14 +701,22 @@ Module *klee::loadModule(LLVMContext &ctx, const 
std::string &path, std::string
-     return nullptr;
-   }
- 
--#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
-+  std::error_code ec;
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+  Expected<std::unique_ptr<Module>> errorOrModule =
-+    getOwningLazyBitcodeModule(std::move(buffer.get()), ctx);
-+  ec = errorOrModule ? std::error_code() :
-+    errorToErrorCode(errorOrModule.takeError());
-+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
-   auto errorOrModule = getLazyBitcodeModule(std::move(buffer.get()), ctx);
-+  ec = errorOrModule.getError();
- #else
-   auto errorOrModule = getLazyBitcodeModule(buffer->get(), ctx);
-+  ec = errorOrModule.getError();
- #endif
- 
--  if (!errorOrModule) {
--    errorMsg = errorOrModule.getError().message().c_str();
-+  if (ec) {
-+    errorMsg = ec.message();
-     return nullptr;
-   }
-   // The module has taken ownership of the MemoryBuffer so release it
-@@ -699,7 +728,10 @@ Module *klee::loadModule(LLVMContext &ctx, const 
std::string &path, std::string
-   auto module = *errorOrModule;
- #endif
- 
--#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-+#if LLVM_VERSION_CODE >= LLVM_VERSION(4, 0)
-+  if (llvm::Error err = module->materializeAll()) {
-+    std::error_code ec = errorToErrorCode(std::move(err));
-+#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 8)
-   if (auto ec = module->materializeAll()) {
- #else
-   if (auto ec = module->materializeAllPermanently()) {
 -- 
-2.17.0
+2.18.0
 

++++++ 0007-llvm-use-chrono-helpers-from-LLVM-4.0.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.400866389 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.404866399 +0200
@@ -69,10 +69,10 @@
  }
  
 diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp
-index 7881f0e84be5..0be727fbc346 100644
+index 97e7fccb5e3c..ecf90bd0126a 100644
 --- a/lib/Core/StatsTracker.cpp
 +++ b/lib/Core/StatsTracker.cpp
-@@ -286,6 +286,29 @@ void StatsTracker::done() {
+@@ -285,6 +285,29 @@ void StatsTracker::done() {
  void StatsTracker::stepInstruction(ExecutionState &es) {
    if (OutputIStats) {
      if (TrackInstructionTime) {
@@ -102,7 +102,7 @@
        static sys::TimeValue lastNowTime(0,0),lastUserTime(0,0);
      
        if (lastUserTime.seconds()==0 && lastUserTime.nanoseconds()==0) {
-@@ -301,6 +324,7 @@ void StatsTracker::stepInstruction(ExecutionState &es) {
+@@ -300,6 +323,7 @@ void StatsTracker::stepInstruction(ExecutionState &es) {
          lastUserTime = user;
          lastNowTime = now;
        }
@@ -195,5 +195,5 @@
 +
 +#endif
 -- 
-2.17.0
+2.18.0
 

++++++ 0008-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.412866420 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.416866430 +0200
@@ -27,10 +27,10 @@
          CurTy = 0;
        }
 diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
-index 75132e0db71b..1c08870b7a20 100644
+index 1a5b7b9df527..51d36b352e5c 100644
 --- a/lib/Core/Executor.cpp
 +++ b/lib/Core/Executor.cpp
-@@ -2598,8 +2598,7 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, 
TypeIt ib, TypeIt ie) {
+@@ -2621,8 +2621,7 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, 
TypeIt ib, TypeIt ie) {
        uint64_t addend = sl->getElementOffset((unsigned) ci->getZExtValue());
        constantOffset = constantOffset->Add(ConstantExpr::alloc(addend,
                                                                 
Context::get().getPointerWidth()));
@@ -40,7 +40,7 @@
        uint64_t elementSize = 
          kmodule->targetData->getTypeStoreSize(set->getElementType());
        Value *operand = ii.getOperand();
-@@ -2613,7 +2612,24 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, 
TypeIt ib, TypeIt ie) {
+@@ -2636,7 +2635,24 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, 
TypeIt ib, TypeIt ie) {
        } else {
          kgepi->indices.push_back(std::make_pair(index, elementSize));
        }
@@ -67,5 +67,5 @@
    }
    kgepi->offset = constantOffset->getZExtValue();
 -- 
-2.17.0
+2.18.0
 

++++++ 0009-llvm40-gep_type_iterator-has-no-operator.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.420866441 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.424866451 +0200
@@ -28,5 +28,5 @@
            const StructLayout *SL = kmodule->targetData->getStructLayout(STy);
            base = base->Add(
 -- 
-2.17.0
+2.18.0
 

++++++ 0010-llvm50-avoid-on-function-arg_begin.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.432866472 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.436866482 +0200
@@ -18,10 +18,10 @@
  1 file changed, 8 insertions(+)
 
 diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
-index 154a76feb361..def83b584167 100644
+index c7dc517a8eee..883be83a4130 100644
 --- a/tools/klee/main.cpp
 +++ b/tools/klee/main.cpp
-@@ -658,7 +658,11 @@ static int initEnv(Module *mainModule) {
+@@ -655,7 +655,11 @@ static void initEnv(Module *mainModule) {
    Instruction *firstInst = &*(mainFn->begin()->begin());
  
    Value *oldArgc = &*(mainFn->arg_begin());
@@ -33,9 +33,9 @@
  
    AllocaInst* argcPtr =
      new AllocaInst(oldArgc->getType(), "argcPtr", firstInst);
-@@ -1117,7 +1121,11 @@ static llvm::Module *linkWithUclibc(llvm::Module 
*mainModule, StringRef libDir)
-   args.push_back(llvm::ConstantExpr::getBitCast(userMainFn,
-                                                 ft->getParamType(0)));
+@@ -1057,7 +1061,11 @@ 
createLibCWrapper(std::vector<std::unique_ptr<llvm::Module>> &modules,
+   args.push_back(
+       llvm::ConstantExpr::getBitCast(inModuleRefernce, ft->getParamType(0)));
    args.push_back(&*(stub->arg_begin())); // argc
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
 +  args.push_back(&*(stub->arg_begin() + 1)); // argv
@@ -46,5 +46,5 @@
    args.push_back(Constant::getNullValue(ft->getParamType(4))); // app_fini
    args.push_back(Constant::getNullValue(ft->getParamType(5))); // rtld_fini
 -- 
-2.17.0
+2.18.0
 

++++++ 0011-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.448866513 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.448866513 +0200
@@ -12,10 +12,10 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/lib/Expr/Expr.cpp b/lib/Expr/Expr.cpp
-index f73d1614c250..5433d9211ead 100644
+index a5c7f652e976..65e858c3336d 100644
 --- a/lib/Expr/Expr.cpp
 +++ b/lib/Expr/Expr.cpp
-@@ -328,7 +328,11 @@ ref<Expr> ConstantExpr::fromMemory(void *address, Width 
width) {
+@@ -333,7 +333,11 @@ ref<Expr> ConstantExpr::fromMemory(void *address, Width 
width) {
    // FIXME: what about machines without x87 support?
    default:
      return ConstantExpr::alloc(llvm::APInt(width,
@@ -28,5 +28,5 @@
    }
  }
 -- 
-2.17.0
+2.18.0
 

++++++ 0012-llvm50-handle-getOrInsertFunction-terminator.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.456866534 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.460866544 +0200
@@ -10,11 +10,11 @@
 
 Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
 ---
- include/klee/Config/Version.h   |  6 ++++++
- lib/Module/Checks.cpp           |  8 ++++----
- lib/Module/IntrinsicCleaner.cpp |  3 ++-
- tools/klee/main.cpp             | 20 ++++++++++----------
- 4 files changed, 22 insertions(+), 15 deletions(-)
+ include/klee/Config/Version.h   | 6 ++++++
+ lib/Module/Checks.cpp           | 8 ++++----
+ lib/Module/IntrinsicCleaner.cpp | 3 ++-
+ tools/klee/main.cpp             | 4 ++--
+ 4 files changed, 14 insertions(+), 7 deletions(-)
 
 diff --git a/include/klee/Config/Version.h b/include/klee/Config/Version.h
 index 532051602fe3..a02ce28baaae 100644
@@ -58,11 +58,11 @@
              }
  
 diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
-index e10e886e8915..d4f93bdc591e 100644
+index c48952c28004..ab16a2654492 100644
 --- a/lib/Module/IntrinsicCleaner.cpp
 +++ b/lib/Module/IntrinsicCleaner.cpp
-@@ -214,7 +214,8 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, 
Module &M) {
-         // Intrisic instruction "llvm.trap" found. Directly lower it to
+@@ -210,7 +210,8 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, 
Module &M) {
+         // Intrinsic instruction "llvm.trap" found. Directly lower it to
          // a call of the abort() function.
          Function *F = cast<Function>(
 -            M.getOrInsertFunction("abort", Type::getVoidTy(ctx), NULL));
@@ -72,10 +72,10 @@
          F->setDoesNotThrow();
  
 diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
-index def83b584167..ff87d210b863 100644
+index 883be83a4130..c0805f457717 100644
 --- a/tools/klee/main.cpp
 +++ b/tools/klee/main.cpp
-@@ -678,8 +678,8 @@ static int initEnv(Module *mainModule) {
+@@ -675,8 +675,8 @@ static void initEnv(Module *mainModule) {
      cast<Function>(mainModule->getOrInsertFunction("klee_init_env",
                                                     Type::getVoidTy(ctx),
                                                     argcPtr->getType(),
@@ -86,35 +86,6 @@
    assert(initEnvFn);
    std::vector<Value*> args;
    args.push_back(argcPtr);
-@@ -1038,20 +1038,20 @@ static llvm::Module *linkWithUclibc(llvm::Module 
*mainModule, StringRef libDir)
-     mainModule->getOrInsertFunction("realpath",
-                                     PointerType::getUnqual(i8Ty),
-                                     PointerType::getUnqual(i8Ty),
--                                    PointerType::getUnqual(i8Ty),
--                                    NULL);
-+                                    PointerType::getUnqual(i8Ty)
-+                                    KLEE_LLVM_GOIF_TERMINATOR);
-     mainModule->getOrInsertFunction("getutent",
--                                    PointerType::getUnqual(i8Ty),
--                                    NULL);
-+                                    PointerType::getUnqual(i8Ty)
-+                                    KLEE_LLVM_GOIF_TERMINATOR);
-     mainModule->getOrInsertFunction("__fgetc_unlocked",
-                                     Type::getInt32Ty(ctx),
--                                    PointerType::getUnqual(i8Ty),
--                                    NULL);
-+                                    PointerType::getUnqual(i8Ty)
-+                                    KLEE_LLVM_GOIF_TERMINATOR);
-     mainModule->getOrInsertFunction("__fputc_unlocked",
-                                     Type::getInt32Ty(ctx),
-                                     Type::getInt32Ty(ctx),
--                                    PointerType::getUnqual(i8Ty),
--                                    NULL);
-+                                    PointerType::getUnqual(i8Ty)
-+                                    KLEE_LLVM_GOIF_TERMINATOR);
-   }
- 
-   f = mainModule->getFunction("__ctype_get_mb_cur_max");
 -- 
-2.17.0
+2.18.0
 

++++++ 0013-llvm50-SwitchInst-case-functions-now-return-pointers.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.468866565 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.468866565 +0200
@@ -15,10 +15,10 @@
  1 file changed, 4 insertions(+)
 
 diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
-index 1c08870b7a20..ee6821b6dc18 100644
+index 51d36b352e5c..75af0fd09bd8 100644
 --- a/lib/Core/Executor.cpp
 +++ b/lib/Core/Executor.cpp
-@@ -1641,7 +1641,11 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
+@@ -1673,7 +1673,11 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
        // switch to an internal rep.
        llvm::IntegerType *Ty = 
cast<IntegerType>(si->getCondition()->getType());
        ConstantInt *ci = ConstantInt::get(Ty, CE->getZExtValue());
@@ -31,5 +31,5 @@
      } else {
        // Handle possible different branch targets
 -- 
-2.17.0
+2.18.0
 

++++++ 0014-llvm50-handle-new-file_magic-s-location.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.480866596 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.480866596 +0200
@@ -7,16 +7,12 @@
 19ca2b0f9daed883c21730285d7f04424e5f5f88, so adapt to that.
 
 Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
-
-`
-
-Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
 ---
  lib/Module/ModuleUtil.cpp | 15 ++++++++++++++-
  1 file changed, 14 insertions(+), 1 deletion(-)
 
 diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp
-index ad847de0b368..5f967410568c 100644
+index 7f4bdb49380a..f1dbdb13bcff 100644
 --- a/lib/Module/ModuleUtil.cpp
 +++ b/lib/Module/ModuleUtil.cpp
 @@ -14,6 +14,9 @@
@@ -26,10 +22,10 @@
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
 +#include "llvm/BinaryFormat/Magic.h"
 +#endif
- #include "llvm/IRReader/IRReader.h"
  #include "llvm/IR/Function.h"
  #include "llvm/IR/Instructions.h"
-@@ -477,7 +480,9 @@ Module *klee::linkWithLibrary(Module *module,
+ #include "llvm/IR/IntrinsicInst.h"
+@@ -380,13 +383,19 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
    MemoryBuffer *Buffer = bufferErr->get();
  #endif
  
@@ -40,30 +36,28 @@
    sys::fs::file_magic magic = sys::fs::identify_magic(Buffer.getBuffer());
  #else
    sys::fs::file_magic magic = sys::fs::identify_magic(Buffer->getBuffer());
-@@ -486,7 +491,11 @@ Module *klee::linkWithLibrary(Module *module,
-   LLVMContext &Context = module->getContext();
-   std::string ErrorMessage;
+ #endif
  
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
 +  if (magic == file_magic::bitcode) {
 +#else
    if (magic == sys::fs::file_magic::bitcode) {
 +#endif
- #if LLVM_VERSION_CODE < LLVM_VERSION(3, 8)
-     Module *Result = 0;
- #endif
-@@ -538,7 +547,11 @@ Module *klee::linkWithLibrary(Module *module,
-     delete Result;
- #endif
+     SMDiagnostic Err;
+ #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6)
+     std::unique_ptr<llvm::Module> module(parseIR(Buffer, Err, context));
+@@ -403,7 +412,11 @@ bool klee::loadFile(const std::string &fileName, 
LLVMContext &context,
+     return true;
+   }
  
 +#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
-+  } else if (magic == file_magic::archive) {
++  if (magic == file_magic::archive) {
 +#else
-   } else if (magic == sys::fs::file_magic::archive) {
+   if (magic == sys::fs::file_magic::archive) {
 +#endif
  #if LLVM_VERSION_CODE >= LLVM_VERSION(3, 9)
-     Expected<std::unique_ptr<object::Binary> > arch =
-         object::createBinary(Buffer, &Context);
+     Expected<std::unique_ptr<object::Binary> > archOwner =
+       object::createBinary(Buffer, &context);
 -- 
-2.17.0
+2.18.0
 

++++++ 0015-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.488866616 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.488866616 +0200
@@ -13,10 +13,10 @@
  1 file changed, 12 insertions(+), 2 deletions(-)
 
 diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
-index ee6821b6dc18..9004b46e8f15 100644
+index 75af0fd09bd8..46fd2be42351 100644
 --- a/lib/Core/Executor.cpp
 +++ b/lib/Core/Executor.cpp
-@@ -2294,7 +2294,12 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
+@@ -2326,7 +2326,12 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
      llvm::APFloat Arg(*fpWidthToSemantics(arg->getWidth()), 
arg->getAPValue());
      uint64_t value = 0;
      bool isExact = true;
@@ -30,7 +30,7 @@
                           llvm::APFloat::rmTowardZero, &isExact);
      bindLocal(ki, state, ConstantExpr::alloc(value, resultType));
      break;
-@@ -2311,7 +2316,12 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
+@@ -2343,7 +2348,12 @@ void Executor::executeInstruction(ExecutionState 
&state, KInstruction *ki) {
  
      uint64_t value = 0;
      bool isExact = true;
@@ -45,5 +45,5 @@
      bindLocal(ki, state, ConstantExpr::alloc(value, resultType));
      break;
 -- 
-2.17.0
+2.18.0
 

++++++ 0016-llvm50-AllocaInst-takes-address-space.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.500866647 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.504866658 +0200
@@ -12,10 +12,10 @@
  1 file changed, 8 insertions(+)
 
 diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
-index ff87d210b863..c85fee861f03 100644
+index c0805f457717..d45a92160e59 100644
 --- a/tools/klee/main.cpp
 +++ b/tools/klee/main.cpp
-@@ -664,10 +664,18 @@ static int initEnv(Module *mainModule) {
+@@ -661,10 +661,18 @@ static void initEnv(Module *mainModule) {
    Value *oldArgv = &*(++mainFn->arg_begin());
  #endif
  
@@ -35,5 +35,5 @@
    /* Insert void klee_init_env(int* argc, char*** argv) */
    std::vector<const Type*> params;
 -- 
-2.17.0
+2.18.0
 

++++++ 0017-llvm50-Intrinsic-objectsize-has-three-arguments.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.512866679 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.512866679 +0200
@@ -14,10 +14,10 @@
  1 file changed, 16 insertions(+)
 
 diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp
-index d4f93bdc591e..e8c63cd334d0 100644
+index ab16a2654492..19807ce08583 100644
 --- a/lib/Module/IntrinsicCleaner.cpp
 +++ b/lib/Module/IntrinsicCleaner.cpp
-@@ -230,13 +230,29 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock 
&b, Module &M) {
+@@ -227,13 +227,29 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock 
&b, Module &M) {
        case Intrinsic::objectsize: {
          // We don't know the size of an object in general so we replace
          // with 0 or -1 depending on the second argument to the intrinsic.
@@ -48,5 +48,5 @@
          IntegerType *intType = dyn_cast<IntegerType>(ii->getType());
          assert(intType && "intrinsic does not have integer return type");
 -- 
-2.17.0
+2.18.0
 

++++++ 0018-llvm50-test-change-objectsize.patch ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.520866699 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.520866699 +0200
@@ -95,5 +95,5 @@
  
  declare void @abort() noreturn nounwind
 -- 
-2.17.0
+2.18.0
 

++++++ 0019-llvm50-test-add-disable-O0-optnone-to-O0.patch ++++++
++++ 1564 lines (skipped)

++++++ 0020-llvm50-CallSite.paramHasAttr-is-indexed-from-0.patch ++++++
From: Jiri Slaby <jirisl...@gmail.com>
Date: Fri, 20 Jul 2018 10:06:29 +0200
Subject: llvm50: CallSite.paramHasAttr is indexed from 0
Patch-mainline: no

Since LLVM 5 commit 1f8f0490690b, CallSite.paramHasAttr is indexed from
0, so make sure we use correct indexing in klee. And use
CallSite.hasRetAttr for return attributes.

Signed-off-by: Jiri Slaby <jirisl...@gmail.com>
---
 lib/Core/Executor.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 46fd2be42351..f05561e7fe82 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -1543,7 +1543,11 @@ void Executor::executeInstruction(ExecutionState &state, 
KInstruction *ki) {
                            CallSite(cast<CallInst>(caller)));
 
             // XXX need to check other param attrs ?
-      bool isSExt = cs.paramHasAttr(0, llvm::Attribute::SExt);
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+            bool isSExt = cs.hasRetAttr(llvm::Attribute::SExt);
+#else
+            bool isSExt = cs.paramHasAttr(0, llvm::Attribute::SExt);
+#endif
             if (isSExt) {
               result = SExtExpr::create(result, to);
             } else {
@@ -1837,7 +1841,11 @@ void Executor::executeInstruction(ExecutionState &state, 
KInstruction *ki) {
 
             if (from != to) {
               // XXX need to check other param attrs ?
+#if LLVM_VERSION_CODE >= LLVM_VERSION(5, 0)
+              bool isSExt = cs.paramHasAttr(i, llvm::Attribute::SExt);
+#else
               bool isSExt = cs.paramHasAttr(i+1, llvm::Attribute::SExt);
+#endif
               if (isSExt) {
                 arguments[i] = SExtExpr::create(arguments[i], to);
               } else {
-- 
2.18.0

++++++ 0019-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch -> 
0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch ++++++
--- 
/work/SRC/openSUSE:Factory/klee/0019-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch
        2018-05-30 12:29:50.796834527 +0200
+++ 
/work/SRC/openSUSE:Factory/.klee.new/0021-llvm6-SetVersionPrinter-now-passes-down-a-stream.patch
    2018-09-03 10:36:21.688864547 +0200
@@ -1,6 +1,6 @@
 From: Jiri Slaby <jirisl...@gmail.com>
 Date: Mon, 21 May 2018 15:12:44 +0200
-Subject: llvm60: SetVersionPrinter now passes down a stream
+Subject: llvm6: SetVersionPrinter now passes down a stream
 Patch-mainline: no
 
 I.e. klee::printVersion should now have a parameter -- the output
@@ -81,5 +81,5 @@
    llvm::cl::PrintVersionMessage();
  }
 -- 
-2.17.0
+2.18.0
 

++++++ 0020-llvm60-handle-headers-renaming.patch -> 
0022-llvm6-handle-headers-renaming.patch ++++++
--- /work/SRC/openSUSE:Factory/klee/0020-llvm60-handle-headers-renaming.patch   
2018-05-30 12:29:50.808834087 +0200
+++ 
/work/SRC/openSUSE:Factory/.klee.new/0022-llvm6-handle-headers-renaming.patch   
    2018-09-03 10:36:21.696864568 +0200
@@ -1,6 +1,6 @@
 From: Jiri Slaby <jirisl...@gmail.com>
 Date: Mon, 21 May 2018 15:14:41 +0200
-Subject: llvm60: handle headers renaming
+Subject: llvm6: handle headers renaming
 Patch-mainline: no
 
 Some headers were moved from llvm/Target/ to llvm/CodeGen/. Handle that.
@@ -11,7 +11,7 @@
  1 file changed, 7 insertions(+), 1 deletion(-)
 
 diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp
-index d9b3e40154ba..d478ff828796 100644
+index 4967a2fa8578..eef22fb81553 100644
 --- a/lib/Module/RaiseAsm.cpp
 +++ b/lib/Module/RaiseAsm.cpp
 @@ -18,10 +18,16 @@
@@ -33,5 +33,5 @@
  
  using namespace llvm;
 -- 
-2.17.0
+2.18.0
 

++++++ FileCheck.cpp ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.560866803 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.564866813 +0200
@@ -10,7 +10,7 @@
 // FileCheck does a line-by line check of a file that validates whether it
 // contains the expected content.  This is useful for regression tests etc.
 //
-// This program exits with an error status of 2 on error, exit status of 0 if
+// This program exits with an exit status of 2 on error, exit status of 0 if
 // the file matched the expected contents, and exit status of 1 if it did not
 // contain the expected contents.
 //
@@ -62,6 +62,10 @@
              "this pattern occur which are not matched by a positive pattern"),
     cl::value_desc("pattern"));
 
+static cl::list<std::string> GlobalDefines("D", cl::Prefix,
+    cl::desc("Define a variable to be used in capture patterns."),
+    cl::value_desc("VAR=VALUE"));
+
 static cl::opt<bool> AllowEmptyInput(
     "allow-empty", cl::init(false),
     cl::desc("Allow the input file to be empty. This is useful when making\n"
@@ -73,6 +77,12 @@
              "Allows leading and trailing whitespace if --strict-whitespace\n"
              "is not also passed."));
 
+static cl::opt<bool> EnableVarScope(
+    "enable-var-scope", cl::init(false),
+    cl::desc("Enables scope for regex variables. Variables with names that\n"
+             "do not start with '$' will be reset at the beginning of\n"
+             "each CHECK-LABEL block."));
+
 typedef cl::list<std::string>::const_iterator prefix_iterator;
 
 
//===----------------------------------------------------------------------===//
@@ -263,15 +273,19 @@
       // is relaxed, more strict check is performed in \c EvaluateExpression.
       bool IsExpression = false;
       for (unsigned i = 0, e = Name.size(); i != e; ++i) {
-        if (i == 0 && Name[i] == '@') {
-          if (NameEnd != StringRef::npos) {
-            SM.PrintMessage(SMLoc::getFromPointer(Name.data()),
-                            SourceMgr::DK_Error,
-                            "invalid name in named regex definition");
-            return true;
+        if (i == 0) {
+          if (Name[i] == '$')  // Global vars start with '$'
+            continue;
+          if (Name[i] == '@') {
+            if (NameEnd != StringRef::npos) {
+              SM.PrintMessage(SMLoc::getFromPointer(Name.data()),
+                              SourceMgr::DK_Error,
+                              "invalid name in named regex definition");
+              return true;
+            }
+            IsExpression = true;
+            continue;
           }
-          IsExpression = true;
-          continue;
         }
         if (Name[i] != '_' && !isalnum(Name[i]) &&
             (!IsExpression || (Name[i] != '+' && Name[i] != '-'))) {
@@ -1193,7 +1207,7 @@
       // If there's CHECK-NOTs between two CHECK-DAGs or from CHECK to
       // CHECK-DAG, verify that there's no 'not' strings occurred in that
       // region.
-      StringRef SkippedRegion = Buffer.substr(LastPos, MatchPos);
+      StringRef SkippedRegion = Buffer.slice(LastPos, MatchPos);
       if (CheckNot(SM, SkippedRegion, NotStrings, VariableTable))
         return StringRef::npos;
       // Clear "not strings".
@@ -1262,6 +1276,18 @@
   errs() << "\n";
 }
 
+// Remove local variables from \p VariableTable. Global variables
+// (start with '$') are preserved.
+static void ClearLocalVars(StringMap<StringRef> &VariableTable) {
+  SmallVector<StringRef, 16> LocalVars;
+  for (const auto &Var : VariableTable)
+    if (Var.first()[0] != '$')
+      LocalVars.push_back(Var.first());
+
+  for (const auto &Var : LocalVars)
+    VariableTable.erase(Var);
+}
+
 /// Check the input to FileCheck provided in the \p Buffer against the \p
 /// CheckStrings read from the check file.
 ///
@@ -1273,6 +1299,9 @@
   /// VariableTable - This holds all the current filecheck variables.
   StringMap<StringRef> VariableTable;
 
+  for (const auto& Def : GlobalDefines)
+    VariableTable.insert(StringRef(Def).split('='));
+
   unsigned i = 0, j = 0, e = CheckStrings.size();
   while (true) {
     StringRef CheckRegion;
@@ -1298,6 +1327,9 @@
       ++j;
     }
 
+    if (EnableVarScope)
+      ClearLocalVars(VariableTable);
+
     for (; i != j; ++i) {
       const CheckString &CheckStr = CheckStrings[i];
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:22.588866875 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:22.588866875 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
             <param name="url">git://github.com/klee/klee.git</param>
-          <param 
name="changesrevision">d2fbdf74493d69e73fbfaedc0d59e593dfd7c69d</param></service></servicedata>
\ No newline at end of file
+          <param 
name="changesrevision">b893d2158ce001da97f2c741ac8320b4c3b9ed53</param></service></servicedata>
\ No newline at end of file

++++++ klee-1.4.0+20180614.tar.xz -> klee-1.4.0+20180829.tar.xz ++++++
++++ 6463 lines of diff (skipped)

++++++ not.cpp ++++++
--- /var/tmp/diff_new_pack.o7Dvao/_old  2018-09-03 10:36:23.100868199 +0200
+++ /var/tmp/diff_new_pack.o7Dvao/_new  2018-09-03 10:36:23.100868199 +0200
@@ -39,8 +39,7 @@
   }
 
   std::string ErrMsg;
-  int Result = sys::ExecuteAndWait(*Program, argv, nullptr, nullptr, 0, 0,
-                                   &ErrMsg);
+  int Result = sys::ExecuteAndWait(*Program, argv, nullptr, {}, 0, 0, &ErrMsg);
 #ifdef _WIN32
   // Handle abort() in msvcrt -- It has exit code as 3.  abort(), aka
   // unreachable, should be recognized as a crash.  However, some binaries use


Reply via email to