diff --git a/0001-llvm37-handle-GetElementPtrInst-Create-s-new-paramet.patch b/0001-llvm37-handle-GetElementPtrInst-Create-s-new-paramet.patch index 3b48d86..fcdc83d 100644 --- a/0001-llvm37-handle-GetElementPtrInst-Create-s-new-paramet.patch +++ b/0001-llvm37-handle-GetElementPtrInst-Create-s-new-paramet.patch @@ -44,12 +44,12 @@ index 70c14050e8e7..72b866cf6395 100644 Instruction *argp = diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp -index 10b5df0864f0..4846b4ce72b3 100644 +index 2ac9db62f67d..3729ff82cd9d 100644 --- a/lib/Module/IntrinsicCleaner.cpp +++ b/lib/Module/IntrinsicCleaner.cpp -@@ -82,11 +82,15 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { - Value *pSrc = CastInst::CreatePointerCast(src, i64p, "vacopy.cast.src", ii); - Value *val = new LoadInst(pSrc, std::string(), ii); new StoreInst(val, pDst, ii); +@@ -86,12 +86,16 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { + Value *val = new LoadInst(pSrc, std::string(), ii); + new StoreInst(val, pDst, ii); Value *off = ConstantInt::get(Type::getInt64Ty(ctx), 1); - pDst = GetElementPtrInst::Create(pDst, off, std::string(), ii); - pSrc = GetElementPtrInst::Create(pSrc, off, std::string(), ii); @@ -57,16 +57,17 @@ index 10b5df0864f0..4846b4ce72b3 100644 + pDst, off, std::string(), ii); + pSrc = GetElementPtrInst::Create(KLEE_LLVM_GEP_TYPE(nullptr) + pSrc, off, std::string(), ii); - val = new LoadInst(pSrc, std::string(), ii); new StoreInst(val, pDst, ii); + val = new LoadInst(pSrc, std::string(), ii); + new StoreInst(val, pDst, ii); - pDst = GetElementPtrInst::Create(pDst, off, std::string(), ii); - pSrc = GetElementPtrInst::Create(pSrc, off, std::string(), ii); + pDst = GetElementPtrInst::Create(KLEE_LLVM_GEP_TYPE(nullptr) + pDst, off, std::string(), ii); + pSrc = GetElementPtrInst::Create(KLEE_LLVM_GEP_TYPE(nullptr) + pSrc, off, std::string(), ii); - val = new LoadInst(pSrc, std::string(), ii); new StoreInst(val, pDst, ii); + val = new LoadInst(pSrc, std::string(), ii); + new StoreInst(val, pDst, ii); } - ii->removeFromParent(); -- -2.16.3 +2.17.0 diff --git a/0002-llvm-make-KLEE-compile-against-LLVM-3.7.patch b/0002-llvm-make-KLEE-compile-against-LLVM-3.7.patch index 53b16f0..9b7acd8 100644 --- a/0002-llvm-make-KLEE-compile-against-LLVM-3.7.patch +++ b/0002-llvm-make-KLEE-compile-against-LLVM-3.7.patch @@ -5,12 +5,12 @@ Patch-mainline: no Signed-off-by: Jiri Slaby --- - include/klee/Internal/Support/FloatEvaluation.h | 7 ++++++ - lib/Module/InstructionInfoTable.cpp | 6 +++++ - lib/Module/ModuleUtil.cpp | 30 +++++++++++++++++++++---- - lib/Module/Optimize.cpp | 4 +++- - lib/Module/RaiseAsm.cpp | 5 ++++- - tools/klee/main.cpp | 1 + + .../klee/Internal/Support/FloatEvaluation.h | 7 +++++ + lib/Module/InstructionInfoTable.cpp | 6 ++++ + lib/Module/ModuleUtil.cpp | 30 ++++++++++++++++--- + lib/Module/Optimize.cpp | 4 ++- + lib/Module/RaiseAsm.cpp | 5 +++- + tools/klee/main.cpp | 1 + 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/include/klee/Internal/Support/FloatEvaluation.h b/include/klee/Internal/Support/FloatEvaluation.h @@ -173,5 +173,5 @@ index 44bc5407e9c8..ab9dfe286ffb 100644 #include "llvm/Support/TargetSelect.h" -- -2.16.3 +2.17.0 diff --git a/0003-test-add-versions-of-some-tests-for-LLVM-3.7.patch b/0003-test-add-versions-of-some-tests-for-LLVM-3.7.patch index 31d5cad..04eefb3 100644 --- a/0003-test-add-versions-of-some-tests-for-LLVM-3.7.patch +++ b/0003-test-add-versions-of-some-tests-for-LLVM-3.7.patch @@ -10,79 +10,71 @@ Clone some tests to have their 3.7 version. 'call's, 'load's and modification to alias specifications that require LLVM 3.8 [v2] added comments what was changed and why +[v3] the new tests are without suffix, the old ones have ".leq36". Signed-off-by: Jiri Slaby --- - test/Concrete/BoolReadWrite.ll | 1 + - test/Concrete/BoolReadWrite.llvm37.ll | 17 + - test/Concrete/ConstantExpr.ll | 1 + - test/Concrete/ConstantExpr.llvm37.ll | 167 +++++ - test/Concrete/ConstantInit.ll | 1 + - test/Concrete/ConstantInit.llvm37.ll | 62 ++ - test/Concrete/FloatingPointOps.ll | 1 + - test/Concrete/FloatingPointOps.llvm37.ll | 681 +++++++++++++++++++++ - test/Concrete/GlobalInitializers.ll | 1 + - test/Concrete/GlobalInitializers.llvm37.ll | 50 ++ - test/Concrete/SimpleStoreAndLoad.ll | 1 + - test/Concrete/SimpleStoreAndLoad.llvm37.ll | 22 + - test/Feature/BitcastAlias.ll | 1 + - test/Feature/BitcastAlias.llvm37.ll | 37 ++ - test/Feature/BitcastAliasMD2U.ll | 1 + - test/Feature/BitcastAliasMD2U.llvm37.ll | 37 ++ - test/Feature/ConstantArray.ll | 3 +- - test/Feature/ConstantArray.llvm37.ll | 55 ++ - test/Feature/ConstantStruct.ll | 1 + - test/Feature/ConstantStruct.llvm37.ll | 35 ++ - test/Feature/GetElementPtr.ll | 1 + - test/Feature/GetElementPtr.llvm37.ll | 31 + - test/Feature/InsertExtractValue.ll | 1 + - test/Feature/InsertExtractValue.llvm37.ll | 35 ++ - test/Feature/Overflow.ll | 1 + - test/Feature/Overflow.llvm37.ll | 46 ++ - test/Feature/OverflowMul.ll | 1 + - test/Feature/OverflowMul.llvm37.ll | 46 ++ - test/Feature/_utils.llvm37._ll | 74 +++ - test/Intrinsics/objectsize.ll | 1 + - test/Intrinsics/objectsize.llvm37.ll | 37 ++ - test/lit.cfg | 2 +- - .../regression/2007-08-16-invalid-constant-value.c | 1 + - .../2007-08-16-invalid-constant-value.llvm37.c | 33 + - 34 files changed, 1483 insertions(+), 2 deletions(-) - create mode 100644 test/Concrete/BoolReadWrite.llvm37.ll - create mode 100644 test/Concrete/ConstantExpr.llvm37.ll - create mode 100644 test/Concrete/ConstantInit.llvm37.ll - create mode 100644 test/Concrete/FloatingPointOps.llvm37.ll - create mode 100755 test/Concrete/GlobalInitializers.llvm37.ll - create mode 100644 test/Concrete/SimpleStoreAndLoad.llvm37.ll - create mode 100644 test/Feature/BitcastAlias.llvm37.ll - create mode 100644 test/Feature/BitcastAliasMD2U.llvm37.ll - create mode 100644 test/Feature/ConstantArray.llvm37.ll - create mode 100644 test/Feature/ConstantStruct.llvm37.ll - create mode 100644 test/Feature/GetElementPtr.llvm37.ll - create mode 100644 test/Feature/InsertExtractValue.llvm37.ll - create mode 100644 test/Feature/Overflow.llvm37.ll - create mode 100644 test/Feature/OverflowMul.llvm37.ll - create mode 100644 test/Feature/_utils.llvm37._ll - create mode 100644 test/Intrinsics/objectsize.llvm37.ll - create mode 100644 test/regression/2007-08-16-invalid-constant-value.llvm37.c + test/Concrete/BoolReadWrite.leq36.ll | 16 + + test/Concrete/BoolReadWrite.ll | 4 +- + test/Concrete/ConstantExpr.leq36.ll | 166 +++++ + test/Concrete/ConstantExpr.ll | 4 +- + test/Concrete/ConstantInit.leq36.ll | 60 ++ + test/Concrete/ConstantInit.ll | 29 +- + test/Concrete/FloatingPointOps.leq36.ll | 678 ++++++++++++++++++ + test/Concrete/FloatingPointOps.ll | 180 ++--- + test/Concrete/GlobalInitializers.leq36.ll | 48 ++ + test/Concrete/GlobalInitializers.ll | 35 +- + test/Concrete/SimpleStoreAndLoad.leq36.ll | 20 + + test/Concrete/SimpleStoreAndLoad.ll | 7 +- + test/Feature/BitcastAlias.leq36.ll | 35 + + test/Feature/BitcastAlias.ll | 9 +- + test/Feature/BitcastAliasMD2U.leq36.ll | 35 + + test/Feature/BitcastAliasMD2U.ll | 9 +- + test/Feature/ConstantArray.leq36.ll | 52 ++ + test/Feature/ConstantArray.ll | 32 +- + test/Feature/ConstantStruct.leq36.ll | 34 + + test/Feature/ConstantStruct.ll | 6 +- + test/Feature/GetElementPtr.leq36.ll | 30 + + test/Feature/GetElementPtr.ll | 10 +- + test/Feature/InsertExtractValue.leq36.ll | 34 + + test/Feature/InsertExtractValue.ll | 6 +- + test/Feature/Overflow.leq36.ll | 45 ++ + test/Feature/Overflow.ll | 6 +- + test/Feature/OverflowMul.leq36.ll | 45 ++ + test/Feature/OverflowMul.ll | 6 +- + test/Feature/_utils._ll | 39 +- + test/Feature/_utils.leq36._ll | 71 ++ + test/Intrinsics/objectsize.leq36.ll | 33 + + test/Intrinsics/objectsize.ll | 9 +- + test/lit.cfg | 2 +- + .../2007-08-16-invalid-constant-value.c | 5 +- + .../2007-08-16-invalid-constant-value.leq36.c | 33 + + 35 files changed, 1657 insertions(+), 176 deletions(-) + create mode 100644 test/Concrete/BoolReadWrite.leq36.ll + create mode 100644 test/Concrete/ConstantExpr.leq36.ll + create mode 100644 test/Concrete/ConstantInit.leq36.ll + create mode 100644 test/Concrete/FloatingPointOps.leq36.ll + create mode 100755 test/Concrete/GlobalInitializers.leq36.ll + create mode 100644 test/Concrete/SimpleStoreAndLoad.leq36.ll + create mode 100644 test/Feature/BitcastAlias.leq36.ll + create mode 100644 test/Feature/BitcastAliasMD2U.leq36.ll + create mode 100644 test/Feature/ConstantArray.leq36.ll + create mode 100644 test/Feature/ConstantStruct.leq36.ll + create mode 100644 test/Feature/GetElementPtr.leq36.ll + create mode 100644 test/Feature/InsertExtractValue.leq36.ll + create mode 100644 test/Feature/Overflow.leq36.ll + create mode 100644 test/Feature/OverflowMul.leq36.ll + create mode 100644 test/Feature/_utils.leq36._ll + create mode 100644 test/Intrinsics/objectsize.leq36.ll + create mode 100644 test/regression/2007-08-16-invalid-constant-value.leq36.c -diff --git a/test/Concrete/BoolReadWrite.ll b/test/Concrete/BoolReadWrite.ll -index f818ecafacd5..34a50447db99 100644 ---- a/test/Concrete/BoolReadWrite.ll -+++ b/test/Concrete/BoolReadWrite.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - - declare void @print_i1(i1) -diff --git a/test/Concrete/BoolReadWrite.llvm37.ll b/test/Concrete/BoolReadWrite.llvm37.ll +diff --git a/test/Concrete/BoolReadWrite.leq36.ll b/test/Concrete/BoolReadWrite.leq36.ll new file mode 100644 -index 000000000000..4dfb49e01d0b +index 000000000000..34a50447db99 --- /dev/null -+++ b/test/Concrete/BoolReadWrite.llvm37.ll -@@ -0,0 +1,17 @@ -+; LLVM 3.7 requires a type as the first argument to 'load' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Concrete/BoolReadWrite.leq36.ll +@@ -0,0 +1,16 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +declare void @print_i1(i1) @@ -90,7 +82,7 @@ index 000000000000..4dfb49e01d0b +define i32 @main() { + %mem = alloca i1 + store i1 1, i1* %mem -+ %v = load i1, i1* %mem ++ %v = load i1* %mem + br i1 %v, label %ok, label %exit +ok: + call void @print_i1(i1 %v) @@ -98,23 +90,32 @@ index 000000000000..4dfb49e01d0b +exit: + ret i32 0 +} -diff --git a/test/Concrete/ConstantExpr.ll b/test/Concrete/ConstantExpr.ll -index d00c59a637e9..2d8e5bc65721 100644 ---- a/test/Concrete/ConstantExpr.ll -+++ b/test/Concrete/ConstantExpr.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Concrete/BoolReadWrite.ll b/test/Concrete/BoolReadWrite.ll +index f818ecafacd5..4dfb49e01d0b 100644 +--- a/test/Concrete/BoolReadWrite.ll ++++ b/test/Concrete/BoolReadWrite.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'load' ++; REQUIRES: geq-llvm-3.7 ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - ; Most of the test below use the *address* of gInt as part of their computation, -diff --git a/test/Concrete/ConstantExpr.llvm37.ll b/test/Concrete/ConstantExpr.llvm37.ll + declare void @print_i1(i1) +@@ -5,7 +7,7 @@ declare void @print_i1(i1) + define i32 @main() { + %mem = alloca i1 + store i1 1, i1* %mem +- %v = load i1* %mem ++ %v = load i1, i1* %mem + br i1 %v, label %ok, label %exit + ok: + call void @print_i1(i1 %v) +diff --git a/test/Concrete/ConstantExpr.leq36.ll b/test/Concrete/ConstantExpr.leq36.ll new file mode 100644 -index 000000000000..38577f7056ef +index 000000000000..2d8e5bc65721 --- /dev/null -+++ b/test/Concrete/ConstantExpr.llvm37.ll -@@ -0,0 +1,167 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Concrete/ConstantExpr.leq36.ll +@@ -0,0 +1,166 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +; Most of the test below use the *address* of gInt as part of their computation, @@ -188,7 +189,7 @@ index 000000000000..38577f7056ef + %t1 = add i32 select(i1 icmp eq (i32* @gInt, i32* inttoptr(i32 100 to i32*)), i32 10, i32 0), 0 + call void @print_i32(i32 %t1) + -+ %t2 = load i32, i32* getelementptr(%test.struct.type, %test.struct.type* @test_struct, i32 0, i32 1) ++ %t2 = load i32* getelementptr(%test.struct.type* @test_struct, i32 0, i32 1) + call void @print_i32(i32 %t2) + + ret void @@ -280,24 +281,32 @@ index 000000000000..38577f7056ef +declare void @print_i16(i16) +declare void @print_i32(i32) +declare void @print_i64(i64) -diff --git a/test/Concrete/ConstantInit.ll b/test/Concrete/ConstantInit.ll -index 2127d27bce7a..44f852120f35 100644 ---- a/test/Concrete/ConstantInit.ll -+++ b/test/Concrete/ConstantInit.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - - %struct.dirent = type { i64, i64, i16, i8 } -diff --git a/test/Concrete/ConstantInit.llvm37.ll b/test/Concrete/ConstantInit.llvm37.ll -new file mode 100644 -index 000000000000..c30b7f093301 ---- /dev/null -+++ b/test/Concrete/ConstantInit.llvm37.ll -@@ -0,0 +1,62 @@ -+; LLVM 3.7 requires a type as the first argument to 'load' +diff --git a/test/Concrete/ConstantExpr.ll b/test/Concrete/ConstantExpr.ll +index d00c59a637e9..38577f7056ef 100644 +--- a/test/Concrete/ConstantExpr.ll ++++ b/test/Concrete/ConstantExpr.ll +@@ -1,3 +1,5 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; REQUIRES: geq-llvm-3.7 + ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + + ; Most of the test below use the *address* of gInt as part of their computation, +@@ -71,7 +73,7 @@ define void @"test_misc"() { + %t1 = add i32 select(i1 icmp eq (i32* @gInt, i32* inttoptr(i32 100 to i32*)), i32 10, i32 0), 0 + call void @print_i32(i32 %t1) + +- %t2 = load i32* getelementptr(%test.struct.type* @test_struct, i32 0, i32 1) ++ %t2 = load i32, i32* getelementptr(%test.struct.type, %test.struct.type* @test_struct, i32 0, i32 1) + call void @print_i32(i32 %t2) + + ret void +diff --git a/test/Concrete/ConstantInit.leq36.ll b/test/Concrete/ConstantInit.leq36.ll +new file mode 100644 +index 000000000000..44f852120f35 +--- /dev/null ++++ b/test/Concrete/ConstantInit.leq36.ll +@@ -0,0 +1,60 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +%struct.dirent = type { i64, i64, i16, i8 } @@ -306,23 +315,23 @@ index 000000000000..c30b7f093301 +define void @test_constant_vector_simple() { + entry: + %a = alloca %struct.dirent -+ %tmp1 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0 ++ %tmp1 = getelementptr %struct.dirent* %a, i32 0 + %tmp2 = bitcast %struct.dirent* %tmp1 to <2 x i64>* + ; Initialize with constant vector parsed as ConstantDataSequential + store <2 x i64> , <2 x i64>* %tmp2, align 8 -+ ++ + br label %exit +exit: + ; Print first initialized element -+ %idx = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 0 -+ %val = load i64, i64* %idx ++ %idx = getelementptr %struct.dirent* %a, i32 0, i32 0 ++ %val = load i64* %idx + call void @print_i64(i64 %val) + -+ ; Print second initialized element -+ %idx2 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 1 -+ %val2 = load i64, i64* %idx2 ++ ; Print second initialized element ++ %idx2 = getelementptr %struct.dirent* %a, i32 0, i32 1 ++ %val2 = load i64* %idx2 + call void @print_i64(i64 %val2) -+ ret void ++ ret void +} + +define void @test_constant_vector_complex() { @@ -334,18 +343,18 @@ index 000000000000..c30b7f093301 + br label %exit +exit: + ; Print first initialized element -+ %idx = getelementptr <2 x i1024>, <2 x i1024>* %a, i32 0, i32 0 ++ %idx = getelementptr <2 x i1024>* %a, i32 0, i32 0 + %narrow = bitcast i1024* %idx to i64* -+ %val = load i64, i64* %narrow ++ %val = load i64* %narrow + call void @print_i64(i64 %val) + + ; Print second initialized element -+ %idx2 = getelementptr <2 x i1024>, <2 x i1024>* %a, i32 0, i32 1 ++ %idx2 = getelementptr <2 x i1024>* %a, i32 0, i32 1 + %narrow2 = bitcast i1024* %idx2 to i64* -+ %val2 = load i64, i64* %narrow2 ++ %val2 = load i64* %narrow2 + call void @print_i64(i64 %val2) + -+ ret void ++ ret void +} + +define i32 @main() { @@ -357,25 +366,80 @@ index 000000000000..c30b7f093301 +exit: + ret i32 0 +} -diff --git a/test/Concrete/FloatingPointOps.ll b/test/Concrete/FloatingPointOps.ll -index 00d4e877b562..b81a3b8df1f4 100644 ---- a/test/Concrete/FloatingPointOps.ll -+++ b/test/Concrete/FloatingPointOps.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - - ; casting error messages -diff --git a/test/Concrete/FloatingPointOps.llvm37.ll b/test/Concrete/FloatingPointOps.llvm37.ll -new file mode 100644 -index 000000000000..4c96e3363eb0 ---- /dev/null -+++ b/test/Concrete/FloatingPointOps.llvm37.ll -@@ -0,0 +1,681 @@ +diff --git a/test/Concrete/ConstantInit.ll b/test/Concrete/ConstantInit.ll +index 2127d27bce7a..c30b7f093301 100644 +--- a/test/Concrete/ConstantInit.ll ++++ b/test/Concrete/ConstantInit.ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'load' +; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; LLVM 3.7 no longer accepts '*' with a 'call' +; REQUIRES: geq-llvm-3.7 + ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + + %struct.dirent = type { i64, i64, i16, i8 } +@@ -6,23 +9,23 @@ declare void @print_i64(i64) + define void @test_constant_vector_simple() { + entry: + %a = alloca %struct.dirent +- %tmp1 = getelementptr %struct.dirent* %a, i32 0 ++ %tmp1 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0 + %tmp2 = bitcast %struct.dirent* %tmp1 to <2 x i64>* + ; Initialize with constant vector parsed as ConstantDataSequential + store <2 x i64> , <2 x i64>* %tmp2, align 8 +- ++ + br label %exit + exit: + ; Print first initialized element +- %idx = getelementptr %struct.dirent* %a, i32 0, i32 0 +- %val = load i64* %idx ++ %idx = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 0 ++ %val = load i64, i64* %idx + call void @print_i64(i64 %val) + +- ; Print second initialized element +- %idx2 = getelementptr %struct.dirent* %a, i32 0, i32 1 +- %val2 = load i64* %idx2 ++ ; Print second initialized element ++ %idx2 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 1 ++ %val2 = load i64, i64* %idx2 + call void @print_i64(i64 %val2) +- ret void ++ ret void + } + + define void @test_constant_vector_complex() { +@@ -34,18 +37,18 @@ entry: + br label %exit + exit: + ; Print first initialized element +- %idx = getelementptr <2 x i1024>* %a, i32 0, i32 0 ++ %idx = getelementptr <2 x i1024>, <2 x i1024>* %a, i32 0, i32 0 + %narrow = bitcast i1024* %idx to i64* +- %val = load i64* %narrow ++ %val = load i64, i64* %narrow + call void @print_i64(i64 %val) + + ; Print second initialized element +- %idx2 = getelementptr <2 x i1024>* %a, i32 0, i32 1 ++ %idx2 = getelementptr <2 x i1024>, <2 x i1024>* %a, i32 0, i32 1 + %narrow2 = bitcast i1024* %idx2 to i64* +- %val2 = load i64* %narrow2 ++ %val2 = load i64, i64* %narrow2 + call void @print_i64(i64 %val2) + +- ret void ++ ret void + } + + define i32 @main() { +diff --git a/test/Concrete/FloatingPointOps.leq36.ll b/test/Concrete/FloatingPointOps.leq36.ll +new file mode 100644 +index 000000000000..b81a3b8df1f4 +--- /dev/null ++++ b/test/Concrete/FloatingPointOps.leq36.ll +@@ -0,0 +1,678 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +; casting error messages @@ -453,11 +517,11 @@ index 000000000000..4c96e3363eb0 + +failed: + ; print the error msg -+ %ret = call i32 (i8*, ...) @printf( i8* %errMsg ) ++ %ret = call i32 (i8*, ...)* @printf( i8* %errMsg ) + + ; add a newline to the ostream -+ %nl = getelementptr [3 x i8], [3 x i8]* @.strNL, i32 0, i32 0 -+ %ret2 = call i32 (i8*, ...) @printf( i8* %nl ) ++ %nl = getelementptr [3 x i8]* @.strNL, i32 0, i32 0 ++ %ret2 = call i32 (i8*, ...)* @printf( i8* %nl ) + + ; exit with return value 1 to denote that an error occurred + call void @exit( i32 1 ) @@ -472,10 +536,10 @@ index 000000000000..4c96e3363eb0 +entry: + %d_addr = alloca double, align 8 + store double 8.000000e+00, double* %d_addr -+ %d = load double, double* %d_addr ++ %d = load double* %d_addr + %f = fptrunc double %d to float + %matches = fcmp oeq float %f, 8.000000e+00 -+ %err_msg = getelementptr [15 x i8], [15 x i8]* @.strTrunc, i32 0, i32 0 ++ %err_msg = getelementptr [15 x i8]* @.strTrunc, i32 0, i32 0 + call void @failCheck( i1 %matches, i8* %err_msg ) + ret void +} @@ -485,10 +549,10 @@ index 000000000000..4c96e3363eb0 +entry: + %f_addr = alloca float, align 4 + store float 8.000000e+00, float* %f_addr -+ %f = load float, float* %f_addr ++ %f = load float* %f_addr + %d = fpext float %f to double + %matches = fcmp oeq double %d, 8.000000e+00 -+ %err_msg = getelementptr [13 x i8], [13 x i8]* @.strExt, i32 0, i32 0 ++ %err_msg = getelementptr [13 x i8]* @.strExt, i32 0, i32 0 + call void @failCheck( i1 %matches, i8* %err_msg ) + ret void +} @@ -501,18 +565,18 @@ index 000000000000..4c96e3363eb0 + + ; test float to UI + store float 0x4020333340000000, float* %f_addr; %f = 8.1 -+ %f = load float, float* %f_addr ++ %f = load float* %f_addr + %uf = fptoui float %f to i32 + %matchesf = icmp eq i32 %uf, 8 -+ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strFPToUIFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8]* @.strFPToUIFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double to UI + store double 8.100000e+00, double* %d_addr -+ %d = load double, double* %d_addr ++ %d = load double* %d_addr + %ud = fptoui double %d to i32 + %matchesd = icmp eq i32 %ud, 8 -+ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strFPToUIDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8]* @.strFPToUIDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -526,18 +590,18 @@ index 000000000000..4c96e3363eb0 + + ; test float 8.1 to signed int + store float 0x4020333340000000, float* %f_addr -+ %f = load float, float* %f_addr ++ %f = load float* %f_addr + %sf = fptosi float %f to i32 + %matchesf = icmp eq i32 %sf, 8 -+ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strFPToSIFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8]* @.strFPToSIFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double -8.1 to signed int + store double -8.100000e+00, double* %d_addr -+ %d = load double, double* %d_addr ++ %d = load double* %d_addr + %sd = fptosi double %d to i32 + %matchesd = icmp eq i32 %sd, -8 -+ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strFPToSIDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8]* @.strFPToSIDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -549,13 +613,13 @@ index 000000000000..4c96e3363eb0 + ; unsigned int to float + %f = uitofp i32 7 to float + %matchesf = fcmp oeq float %f, 7.000000e+00 -+ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strUIToFPFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8]* @.strUIToFPFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; unsigned int to double + %d = uitofp i32 7 to double + %matchesd = fcmp oeq double %d, 7.000000e+00 -+ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strUIToFPDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8]* @.strUIToFPDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -567,13 +631,13 @@ index 000000000000..4c96e3363eb0 + ; signed int to float + %f = sitofp i32 -7 to float + %matchesf = fcmp oeq float %f, -7.000000e+00 -+ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strSIToFPFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8]* @.strSIToFPFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; signed int to double + %d = sitofp i32 -7 to double + %matchesd = fcmp oeq double %d, -7.000000e+00 -+ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strSIToFPDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8]* @.strSIToFPDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -590,21 +654,21 @@ index 000000000000..4c96e3363eb0 + ; float division + store float 2.200000e+01, float* %fN_addr + store float 4.000000e+00, float* %fD_addr -+ %fN = load float, float* %fN_addr -+ %fD = load float, float* %fD_addr ++ %fN = load float* %fN_addr ++ %fD = load float* %fD_addr + %f = fdiv float %fN, %fD + %matchesf = fcmp oeq float %f, 5.500000e+00 -+ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strDivFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8]* @.strDivFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; double division + store double 2.200000e+01, double* %dN_addr + store double -4.000000e+00, double* %dD_addr -+ %dN = load double, double* %dN_addr -+ %dD = load double, double* %dD_addr ++ %dN = load double* %dN_addr ++ %dD = load double* %dD_addr + %d = fdiv double %dN, %dD + %matchesd = fcmp oeq double %d, -5.500000e+00 -+ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strDivDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8]* @.strDivDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -621,21 +685,21 @@ index 000000000000..4c96e3363eb0 + ; float modoulo + store float 2.200000e+01, float* %fN_addr + store float 4.000000e+00, float* %fD_addr -+ %fN = load float, float* %fN_addr -+ %fD = load float, float* %fD_addr ++ %fN = load float* %fN_addr ++ %fD = load float* %fD_addr + %f = frem float %fN, %fD + %matchesf = fcmp oeq float %f, 2.000000e+00 -+ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strRemFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8]* @.strRemFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; double modulo + store double -2.200000e+01, double* %dN_addr + store double 4.000000e+00, double* %dD_addr -+ %dN = load double, double* %dN_addr -+ %dD = load double, double* %dD_addr ++ %dN = load double* %dN_addr ++ %dD = load double* %dD_addr + %d = frem double %dN, %dD + %matchesd = fcmp oeq double %d, -2.000000e+00 -+ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strRemDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8]* @.strRemDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -652,27 +716,27 @@ index 000000000000..4c96e3363eb0 + ; test integer addition (3 + 4) + %sumi = add i32 3, 4 + %matchesi = icmp eq i32 %sumi, 7 -+ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strAddInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8]* @.strAddInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float addition (3.5 + 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr -+ %f1 = load float, float* %f1_addr -+ %f2 = load float, float* %f2_addr ++ %f1 = load float* %f1_addr ++ %f2 = load float* %f2_addr + %sumf = fadd float %f1, %f2 + %matchesf = fcmp oeq float %sumf, 0x401ECCCCC0000000 -+ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strAddFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8]* @.strAddFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double addition (3.5 + -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr -+ %d1 = load double, double* %d1_addr -+ %d2 = load double, double* %d2_addr ++ %d1 = load double* %d1_addr ++ %d2 = load double* %d2_addr + %sumd = fadd double %d1, %d2 + %matchesd = fcmp oeq double %sumd, 0xBFE6666666666668 -+ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strAddDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8]* @.strAddDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -689,27 +753,27 @@ index 000000000000..4c96e3363eb0 + ; test integer subtraction (3 - 4) + %subi = sub i32 3, 4 + %matchesi = icmp eq i32 %subi, -1 -+ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strSubInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8]* @.strSubInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float subtraction (3.5 - 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr -+ %f1 = load float, float* %f1_addr -+ %f2 = load float, float* %f2_addr ++ %f1 = load float* %f1_addr ++ %f2 = load float* %f2_addr + %subf = fsub float %f1, %f2 + %matchesf = fcmp oeq float %subf, 0xBFE6666600000000 -+ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strSubFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8]* @.strSubFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double subtraction (3.5 - -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr -+ %d1 = load double, double* %d1_addr -+ %d2 = load double, double* %d2_addr ++ %d1 = load double* %d1_addr ++ %d2 = load double* %d2_addr + %subd = fsub double %d1, %d2 + %matchesd = fcmp oeq double %subd, 7.700000e+00 -+ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strSubDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8]* @.strSubDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -726,27 +790,27 @@ index 000000000000..4c96e3363eb0 + ; test integer multiplication (3 * 4) + %muli = mul i32 3, 4 + %matchesi = icmp eq i32 %muli, 12 -+ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strMulInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8]* @.strMulInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float multiplication (3.5 * 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr -+ %f1 = load float, float* %f1_addr -+ %f2 = load float, float* %f2_addr ++ %f1 = load float* %f1_addr ++ %f2 = load float* %f2_addr + %mulf = fmul float %f1, %f2 + %matchesf = fcmp oeq float %mulf, 0x402D666640000000 -+ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strMulFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8]* @.strMulFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double multiplication (3.5 * -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr -+ %d1 = load double, double* %d1_addr -+ %d2 = load double, double* %d2_addr ++ %d1 = load double* %d1_addr ++ %d2 = load double* %d2_addr + %muld = fmul double %d1, %d2 + %matchesd = fcmp oeq double %muld, 0xC02D666666666667 -+ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strMulDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8]* @.strMulDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void @@ -758,55 +822,55 @@ index 000000000000..4c96e3363eb0 + ; test fcmp::true -- should always return true + %cmp_t = fcmp true float %f1, %f2 + %cmp_t_ok = icmp eq i1 %cmp_t, 1 -+ %cmp_t_em = getelementptr [19 x i8], [19 x i8]* @.strCmpTrFlt, i32 0, i32 0 ++ %cmp_t_em = getelementptr [19 x i8]* @.strCmpTrFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_t_ok, i8* %cmp_t_em ) + + ; test fcmp::false -- should always return false + %cmp_f = fcmp false float %f1, %f2 + %cmp_f_ok = icmp eq i1 %cmp_f, 0 -+ %cmp_f_em = getelementptr [20 x i8], [20 x i8]* @.strCmpFaFlt, i32 0, i32 0 ++ %cmp_f_em = getelementptr [20 x i8]* @.strCmpFaFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_f_ok, i8* %cmp_f_em ) + + ; test fcmp::ord -- should return true if neither operand is NaN + %cmp_o = fcmp ord float %f1, %f2 + %cmp_o_ok = icmp eq i1 %cmp_o, %ord -+ %cmp_o_em = getelementptr [18 x i8], [18 x i8]* @.strCmpOrdFlt, i32 0, i32 0 ++ %cmp_o_em = getelementptr [18 x i8]* @.strCmpOrdFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if neither operand is a NaN and they are equal + %cmp_eq = fcmp oeq float %f1, %f2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq -+ %cmp_eq_em = getelementptr [17 x i8], [17 x i8]* @.strCmpEqFlt, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [17 x i8]* @.strCmpEqFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if neither operand is a NaN and the first is greater or equal + %cmp_ge = fcmp oge float %f1, %f2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge -+ %cmp_ge_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGeFlt, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [17 x i8]* @.strCmpGeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if neither operand is a NaN and the first is greater + %cmp_gt = fcmp ogt float %f1, %f2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt -+ %cmp_gt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGtFlt, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [17 x i8]* @.strCmpGtFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if neither operand is a NaN and the first is less or equal + %cmp_le = fcmp ole float %f1, %f2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le -+ %cmp_le_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLeFlt, i32 0, i32 0 ++ %cmp_le_em = getelementptr [17 x i8]* @.strCmpLeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if neither operand is a NaN and the first is less + %cmp_lt = fcmp olt float %f1, %f2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt -+ %cmp_lt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLtFlt, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [17 x i8]* @.strCmpLtFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if neither operand is a NaN and they are not equal + %cmp_ne = fcmp one float %f1, %f2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne -+ %cmp_ne_em = getelementptr [17 x i8], [17 x i8]* @.strCmpNeFlt, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [17 x i8]* @.strCmpNeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void @@ -818,55 +882,55 @@ index 000000000000..4c96e3363eb0 + ; test fcmp::true -- should always return true + %cmp_t = fcmp true double %d1, %d2 + %cmp_t_ok = icmp eq i1 %cmp_t, 1 -+ %cmp_t_em = getelementptr [19 x i8], [19 x i8]* @.strCmpTrDbl, i32 0, i32 0 ++ %cmp_t_em = getelementptr [19 x i8]* @.strCmpTrDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_t_ok, i8* %cmp_t_em ) + + ; test fcmp::false -- should always return false + %cmp_f = fcmp false double %d1, %d2 + %cmp_f_ok = icmp eq i1 %cmp_f, 0 -+ %cmp_f_em = getelementptr [20 x i8], [20 x i8]* @.strCmpFaDbl, i32 0, i32 0 ++ %cmp_f_em = getelementptr [20 x i8]* @.strCmpFaDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_f_ok, i8* %cmp_f_em ) + + ; test fcmp::ord -- should return true if neither operand is NaN + %cmp_o = fcmp ord double %d1, %d2 + %cmp_o_ok = icmp eq i1 %cmp_o, %ord -+ %cmp_o_em = getelementptr [19 x i8], [19 x i8]* @.strCmpOrdDbl, i32 0, i32 0 ++ %cmp_o_em = getelementptr [19 x i8]* @.strCmpOrdDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if neither operand is a NaN and they are equal + %cmp_eq = fcmp oeq double %d1, %d2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq -+ %cmp_eq_em = getelementptr [18 x i8], [18 x i8]* @.strCmpEqDbl, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [18 x i8]* @.strCmpEqDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if neither operand is a NaN and the first is greater or equal + %cmp_ge = fcmp oge double %d1, %d2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge -+ %cmp_ge_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGeDbl, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [18 x i8]* @.strCmpGeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if neither operand is a NaN and the first is greater + %cmp_gt = fcmp ogt double %d1, %d2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt -+ %cmp_gt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGtDbl, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [18 x i8]* @.strCmpGtDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if neither operand is a NaN and the first is less or equal + %cmp_le = fcmp ole double %d1, %d2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le -+ %cmp_le_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLeDbl, i32 0, i32 0 ++ %cmp_le_em = getelementptr [18 x i8]* @.strCmpLeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if neither operand is a NaN and the first is less + %cmp_lt = fcmp olt double %d1, %d2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt -+ %cmp_lt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLtDbl, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [18 x i8]* @.strCmpLtDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if neither operand is a NaN and they are not equal + %cmp_ne = fcmp one double %d1, %d2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne -+ %cmp_ne_em = getelementptr [18 x i8], [18 x i8]* @.strCmpNeDbl, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [18 x i8]* @.strCmpNeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void @@ -890,43 +954,43 @@ index 000000000000..4c96e3363eb0 + ; test fcmp::uno -- should return true if either operand is NaN + %cmp_o = fcmp uno float %f1, %f2 + %cmp_o_ok = icmp eq i1 %cmp_o, %uno -+ %cmp_o_em = getelementptr [20 x i8], [20 x i8]* @.strCmpUnoFlt, i32 0, i32 0 ++ %cmp_o_em = getelementptr [20 x i8]* @.strCmpUnoFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if either operand is a NaN and they are equal + %cmp_eq = fcmp ueq float %f1, %f2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq -+ %cmp_eq_em = getelementptr [17 x i8], [17 x i8]* @.strCmpEqFltU, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [17 x i8]* @.strCmpEqFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if either operand is a NaN and the first is greater or equal + %cmp_ge = fcmp uge float %f1, %f2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge -+ %cmp_ge_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGeFltU, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [17 x i8]* @.strCmpGeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if either operand is a NaN and the first is greater + %cmp_gt = fcmp ugt float %f1, %f2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt -+ %cmp_gt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGtFltU, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [17 x i8]* @.strCmpGtFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if either operand is a NaN and the first is less or equal + %cmp_le = fcmp ule float %f1, %f2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le -+ %cmp_le_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLeFltU, i32 0, i32 0 ++ %cmp_le_em = getelementptr [17 x i8]* @.strCmpLeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if either operand is a NaN and the first is less + %cmp_lt = fcmp ult float %f1, %f2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt -+ %cmp_lt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLtFltU, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [17 x i8]* @.strCmpLtFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if either operand is a NaN and they are not equal + %cmp_ne = fcmp une float %f1, %f2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne -+ %cmp_ne_em = getelementptr [17 x i8], [17 x i8]* @.strCmpNeFltU, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [17 x i8]* @.strCmpNeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void @@ -938,43 +1002,43 @@ index 000000000000..4c96e3363eb0 + ; test fcmp::uno -- should return true if either operand is NaN + %cmp_o = fcmp uno double %d1, %d2 + %cmp_o_ok = icmp eq i1 %cmp_o, %uno -+ %cmp_o_em = getelementptr [21 x i8], [21 x i8]* @.strCmpUnoDbl, i32 0, i32 0 ++ %cmp_o_em = getelementptr [21 x i8]* @.strCmpUnoDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::ueq -- should return true if either operand is a NaN and they are equal + %cmp_eq = fcmp ueq double %d1, %d2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq -+ %cmp_eq_em = getelementptr [18 x i8], [18 x i8]* @.strCmpEqDblU, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [18 x i8]* @.strCmpEqDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::uge -- should return true if either operand is a NaN and the first is greater or equal + %cmp_ge = fcmp uge double %d1, %d2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge -+ %cmp_ge_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGeDblU, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [18 x i8]* @.strCmpGeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ugt -- should return true if either operand is a NaN and the first is greater + %cmp_gt = fcmp ugt double %d1, %d2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt -+ %cmp_gt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGtDblU, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [18 x i8]* @.strCmpGtDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ule -- should return true if either operand is a NaN and the first is less or equal + %cmp_le = fcmp ule double %d1, %d2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le -+ %cmp_le_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLeDblU, i32 0, i32 0 ++ %cmp_le_em = getelementptr [18 x i8]* @.strCmpLeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::ult -- should return true if either operand is a NaN and the first is less + %cmp_lt = fcmp ult double %d1, %d2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt -+ %cmp_lt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLtDblU, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [18 x i8]* @.strCmpLtDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::une -- should return true if either operand is a NaN and they are not equal + %cmp_ne = fcmp une double %d1, %d2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne -+ %cmp_ne_em = getelementptr [18 x i8], [18 x i8]* @.strCmpNeDblU, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [18 x i8]* @.strCmpNeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void @@ -1017,8 +1081,8 @@ index 000000000000..4c96e3363eb0 + store i64 -1, i64* %nan_as_i64 + + ; load two copies of our NaN -+ %nan1 = load double, double* %nan -+ %nan2 = load double, double* %nan ++ %nan1 = load double* %nan ++ %nan2 = load double* %nan + + ; NaNs do different things depending on ordered vs unordered + call void @testFCmpBothOrdered( double %nan1, double 0.000000e+00, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0 ) @@ -1048,29 +1112,564 @@ index 000000000000..4c96e3363eb0 + call void @testFCmp( ) + + ; everything worked -- print a message saying so -+ %works_msg = getelementptr [20 x i8], [20 x i8]* @.strWorks, i32 0, i32 0 -+ %ret = call i32 (i8*, ...) @printf( i8* %works_msg ) ++ %works_msg = getelementptr [20 x i8]* @.strWorks, i32 0, i32 0 ++ %ret = call i32 (i8*, ...)* @printf( i8* %works_msg ) + + ret i32 0 +} -diff --git a/test/Concrete/GlobalInitializers.ll b/test/Concrete/GlobalInitializers.ll -index e3657dad19e5..ba7e53eb7cd7 100755 ---- a/test/Concrete/GlobalInitializers.ll -+++ b/test/Concrete/GlobalInitializers.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Concrete/FloatingPointOps.ll b/test/Concrete/FloatingPointOps.ll +index 00d4e877b562..4c96e3363eb0 100644 +--- a/test/Concrete/FloatingPointOps.ll ++++ b/test/Concrete/FloatingPointOps.ll +@@ -1,3 +1,7 @@ ++; LLVM 3.7 requires a type as the first argument to 'load' ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; LLVM 3.7 no longer accepts '*' with a 'call' ++; REQUIRES: geq-llvm-3.7 ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - declare void @print_i32(i32) -diff --git a/test/Concrete/GlobalInitializers.llvm37.ll b/test/Concrete/GlobalInitializers.llvm37.ll + ; casting error messages +@@ -75,11 +79,11 @@ entry: + + failed: + ; print the error msg +- %ret = call i32 (i8*, ...)* @printf( i8* %errMsg ) ++ %ret = call i32 (i8*, ...) @printf( i8* %errMsg ) + + ; add a newline to the ostream +- %nl = getelementptr [3 x i8]* @.strNL, i32 0, i32 0 +- %ret2 = call i32 (i8*, ...)* @printf( i8* %nl ) ++ %nl = getelementptr [3 x i8], [3 x i8]* @.strNL, i32 0, i32 0 ++ %ret2 = call i32 (i8*, ...) @printf( i8* %nl ) + + ; exit with return value 1 to denote that an error occurred + call void @exit( i32 1 ) +@@ -94,10 +98,10 @@ define void @testFPTrunc() { + entry: + %d_addr = alloca double, align 8 + store double 8.000000e+00, double* %d_addr +- %d = load double* %d_addr ++ %d = load double, double* %d_addr + %f = fptrunc double %d to float + %matches = fcmp oeq float %f, 8.000000e+00 +- %err_msg = getelementptr [15 x i8]* @.strTrunc, i32 0, i32 0 ++ %err_msg = getelementptr [15 x i8], [15 x i8]* @.strTrunc, i32 0, i32 0 + call void @failCheck( i1 %matches, i8* %err_msg ) + ret void + } +@@ -107,10 +111,10 @@ define void @testFPExt() { + entry: + %f_addr = alloca float, align 4 + store float 8.000000e+00, float* %f_addr +- %f = load float* %f_addr ++ %f = load float, float* %f_addr + %d = fpext float %f to double + %matches = fcmp oeq double %d, 8.000000e+00 +- %err_msg = getelementptr [13 x i8]* @.strExt, i32 0, i32 0 ++ %err_msg = getelementptr [13 x i8], [13 x i8]* @.strExt, i32 0, i32 0 + call void @failCheck( i1 %matches, i8* %err_msg ) + ret void + } +@@ -123,18 +127,18 @@ entry: + + ; test float to UI + store float 0x4020333340000000, float* %f_addr; %f = 8.1 +- %f = load float* %f_addr ++ %f = load float, float* %f_addr + %uf = fptoui float %f to i32 + %matchesf = icmp eq i32 %uf, 8 +- %err_msgf = getelementptr [20 x i8]* @.strFPToUIFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strFPToUIFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double to UI + store double 8.100000e+00, double* %d_addr +- %d = load double* %d_addr ++ %d = load double, double* %d_addr + %ud = fptoui double %d to i32 + %matchesd = icmp eq i32 %ud, 8 +- %err_msgd = getelementptr [21 x i8]* @.strFPToUIDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strFPToUIDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -148,18 +152,18 @@ entry: + + ; test float 8.1 to signed int + store float 0x4020333340000000, float* %f_addr +- %f = load float* %f_addr ++ %f = load float, float* %f_addr + %sf = fptosi float %f to i32 + %matchesf = icmp eq i32 %sf, 8 +- %err_msgf = getelementptr [20 x i8]* @.strFPToSIFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strFPToSIFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double -8.1 to signed int + store double -8.100000e+00, double* %d_addr +- %d = load double* %d_addr ++ %d = load double, double* %d_addr + %sd = fptosi double %d to i32 + %matchesd = icmp eq i32 %sd, -8 +- %err_msgd = getelementptr [21 x i8]* @.strFPToSIDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strFPToSIDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -171,13 +175,13 @@ entry: + ; unsigned int to float + %f = uitofp i32 7 to float + %matchesf = fcmp oeq float %f, 7.000000e+00 +- %err_msgf = getelementptr [20 x i8]* @.strUIToFPFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strUIToFPFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; unsigned int to double + %d = uitofp i32 7 to double + %matchesd = fcmp oeq double %d, 7.000000e+00 +- %err_msgd = getelementptr [21 x i8]* @.strUIToFPDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strUIToFPDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -189,13 +193,13 @@ entry: + ; signed int to float + %f = sitofp i32 -7 to float + %matchesf = fcmp oeq float %f, -7.000000e+00 +- %err_msgf = getelementptr [20 x i8]* @.strSIToFPFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [20 x i8], [20 x i8]* @.strSIToFPFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; signed int to double + %d = sitofp i32 -7 to double + %matchesd = fcmp oeq double %d, -7.000000e+00 +- %err_msgd = getelementptr [21 x i8]* @.strSIToFPDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [21 x i8], [21 x i8]* @.strSIToFPDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -212,21 +216,21 @@ entry: + ; float division + store float 2.200000e+01, float* %fN_addr + store float 4.000000e+00, float* %fD_addr +- %fN = load float* %fN_addr +- %fD = load float* %fD_addr ++ %fN = load float, float* %fN_addr ++ %fD = load float, float* %fD_addr + %f = fdiv float %fN, %fD + %matchesf = fcmp oeq float %f, 5.500000e+00 +- %err_msgf = getelementptr [18 x i8]* @.strDivFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strDivFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; double division + store double 2.200000e+01, double* %dN_addr + store double -4.000000e+00, double* %dD_addr +- %dN = load double* %dN_addr +- %dD = load double* %dD_addr ++ %dN = load double, double* %dN_addr ++ %dD = load double, double* %dD_addr + %d = fdiv double %dN, %dD + %matchesd = fcmp oeq double %d, -5.500000e+00 +- %err_msgd = getelementptr [19 x i8]* @.strDivDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strDivDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -243,21 +247,21 @@ entry: + ; float modoulo + store float 2.200000e+01, float* %fN_addr + store float 4.000000e+00, float* %fD_addr +- %fN = load float* %fN_addr +- %fD = load float* %fD_addr ++ %fN = load float, float* %fN_addr ++ %fD = load float, float* %fD_addr + %f = frem float %fN, %fD + %matchesf = fcmp oeq float %f, 2.000000e+00 +- %err_msgf = getelementptr [18 x i8]* @.strRemFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strRemFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; double modulo + store double -2.200000e+01, double* %dN_addr + store double 4.000000e+00, double* %dD_addr +- %dN = load double* %dN_addr +- %dD = load double* %dD_addr ++ %dN = load double, double* %dN_addr ++ %dD = load double, double* %dD_addr + %d = frem double %dN, %dD + %matchesd = fcmp oeq double %d, -2.000000e+00 +- %err_msgd = getelementptr [19 x i8]* @.strRemDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strRemDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -274,27 +278,27 @@ entry: + ; test integer addition (3 + 4) + %sumi = add i32 3, 4 + %matchesi = icmp eq i32 %sumi, 7 +- %err_msgi = getelementptr [16 x i8]* @.strAddInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strAddInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float addition (3.5 + 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr +- %f1 = load float* %f1_addr +- %f2 = load float* %f2_addr ++ %f1 = load float, float* %f1_addr ++ %f2 = load float, float* %f2_addr + %sumf = fadd float %f1, %f2 + %matchesf = fcmp oeq float %sumf, 0x401ECCCCC0000000 +- %err_msgf = getelementptr [18 x i8]* @.strAddFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strAddFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double addition (3.5 + -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr +- %d1 = load double* %d1_addr +- %d2 = load double* %d2_addr ++ %d1 = load double, double* %d1_addr ++ %d2 = load double, double* %d2_addr + %sumd = fadd double %d1, %d2 + %matchesd = fcmp oeq double %sumd, 0xBFE6666666666668 +- %err_msgd = getelementptr [19 x i8]* @.strAddDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strAddDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -311,27 +315,27 @@ entry: + ; test integer subtraction (3 - 4) + %subi = sub i32 3, 4 + %matchesi = icmp eq i32 %subi, -1 +- %err_msgi = getelementptr [16 x i8]* @.strSubInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strSubInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float subtraction (3.5 - 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr +- %f1 = load float* %f1_addr +- %f2 = load float* %f2_addr ++ %f1 = load float, float* %f1_addr ++ %f2 = load float, float* %f2_addr + %subf = fsub float %f1, %f2 + %matchesf = fcmp oeq float %subf, 0xBFE6666600000000 +- %err_msgf = getelementptr [18 x i8]* @.strSubFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strSubFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double subtraction (3.5 - -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr +- %d1 = load double* %d1_addr +- %d2 = load double* %d2_addr ++ %d1 = load double, double* %d1_addr ++ %d2 = load double, double* %d2_addr + %subd = fsub double %d1, %d2 + %matchesd = fcmp oeq double %subd, 7.700000e+00 +- %err_msgd = getelementptr [19 x i8]* @.strSubDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strSubDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -348,27 +352,27 @@ entry: + ; test integer multiplication (3 * 4) + %muli = mul i32 3, 4 + %matchesi = icmp eq i32 %muli, 12 +- %err_msgi = getelementptr [16 x i8]* @.strMulInt, i32 0, i32 0 ++ %err_msgi = getelementptr [16 x i8], [16 x i8]* @.strMulInt, i32 0, i32 0 + call void @failCheck( i1 %matchesi, i8* %err_msgi ) + + ; test float multiplication (3.5 * 4.2) + store float 3.500000e+00, float* %f1_addr + store float 0x4010CCCCC0000000, float* %f2_addr +- %f1 = load float* %f1_addr +- %f2 = load float* %f2_addr ++ %f1 = load float, float* %f1_addr ++ %f2 = load float, float* %f2_addr + %mulf = fmul float %f1, %f2 + %matchesf = fcmp oeq float %mulf, 0x402D666640000000 +- %err_msgf = getelementptr [18 x i8]* @.strMulFlt, i32 0, i32 0 ++ %err_msgf = getelementptr [18 x i8], [18 x i8]* @.strMulFlt, i32 0, i32 0 + call void @failCheck( i1 %matchesf, i8* %err_msgf ) + + ; test double multiplication (3.5 * -4.2) + store double 3.500000e+00, double* %d1_addr + store double -4.200000e+00, double* %d2_addr +- %d1 = load double* %d1_addr +- %d2 = load double* %d2_addr ++ %d1 = load double, double* %d1_addr ++ %d2 = load double, double* %d2_addr + %muld = fmul double %d1, %d2 + %matchesd = fcmp oeq double %muld, 0xC02D666666666667 +- %err_msgd = getelementptr [19 x i8]* @.strMulDbl, i32 0, i32 0 ++ %err_msgd = getelementptr [19 x i8], [19 x i8]* @.strMulDbl, i32 0, i32 0 + call void @failCheck( i1 %matchesd, i8* %err_msgd ) + + ret void +@@ -380,55 +384,55 @@ entry: + ; test fcmp::true -- should always return true + %cmp_t = fcmp true float %f1, %f2 + %cmp_t_ok = icmp eq i1 %cmp_t, 1 +- %cmp_t_em = getelementptr [19 x i8]* @.strCmpTrFlt, i32 0, i32 0 ++ %cmp_t_em = getelementptr [19 x i8], [19 x i8]* @.strCmpTrFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_t_ok, i8* %cmp_t_em ) + + ; test fcmp::false -- should always return false + %cmp_f = fcmp false float %f1, %f2 + %cmp_f_ok = icmp eq i1 %cmp_f, 0 +- %cmp_f_em = getelementptr [20 x i8]* @.strCmpFaFlt, i32 0, i32 0 ++ %cmp_f_em = getelementptr [20 x i8], [20 x i8]* @.strCmpFaFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_f_ok, i8* %cmp_f_em ) + + ; test fcmp::ord -- should return true if neither operand is NaN + %cmp_o = fcmp ord float %f1, %f2 + %cmp_o_ok = icmp eq i1 %cmp_o, %ord +- %cmp_o_em = getelementptr [18 x i8]* @.strCmpOrdFlt, i32 0, i32 0 ++ %cmp_o_em = getelementptr [18 x i8], [18 x i8]* @.strCmpOrdFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if neither operand is a NaN and they are equal + %cmp_eq = fcmp oeq float %f1, %f2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq +- %cmp_eq_em = getelementptr [17 x i8]* @.strCmpEqFlt, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [17 x i8], [17 x i8]* @.strCmpEqFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if neither operand is a NaN and the first is greater or equal + %cmp_ge = fcmp oge float %f1, %f2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge +- %cmp_ge_em = getelementptr [17 x i8]* @.strCmpGeFlt, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if neither operand is a NaN and the first is greater + %cmp_gt = fcmp ogt float %f1, %f2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt +- %cmp_gt_em = getelementptr [17 x i8]* @.strCmpGtFlt, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGtFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if neither operand is a NaN and the first is less or equal + %cmp_le = fcmp ole float %f1, %f2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le +- %cmp_le_em = getelementptr [17 x i8]* @.strCmpLeFlt, i32 0, i32 0 ++ %cmp_le_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if neither operand is a NaN and the first is less + %cmp_lt = fcmp olt float %f1, %f2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt +- %cmp_lt_em = getelementptr [17 x i8]* @.strCmpLtFlt, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLtFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if neither operand is a NaN and they are not equal + %cmp_ne = fcmp one float %f1, %f2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne +- %cmp_ne_em = getelementptr [17 x i8]* @.strCmpNeFlt, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [17 x i8], [17 x i8]* @.strCmpNeFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void +@@ -440,55 +444,55 @@ entry: + ; test fcmp::true -- should always return true + %cmp_t = fcmp true double %d1, %d2 + %cmp_t_ok = icmp eq i1 %cmp_t, 1 +- %cmp_t_em = getelementptr [19 x i8]* @.strCmpTrDbl, i32 0, i32 0 ++ %cmp_t_em = getelementptr [19 x i8], [19 x i8]* @.strCmpTrDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_t_ok, i8* %cmp_t_em ) + + ; test fcmp::false -- should always return false + %cmp_f = fcmp false double %d1, %d2 + %cmp_f_ok = icmp eq i1 %cmp_f, 0 +- %cmp_f_em = getelementptr [20 x i8]* @.strCmpFaDbl, i32 0, i32 0 ++ %cmp_f_em = getelementptr [20 x i8], [20 x i8]* @.strCmpFaDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_f_ok, i8* %cmp_f_em ) + + ; test fcmp::ord -- should return true if neither operand is NaN + %cmp_o = fcmp ord double %d1, %d2 + %cmp_o_ok = icmp eq i1 %cmp_o, %ord +- %cmp_o_em = getelementptr [19 x i8]* @.strCmpOrdDbl, i32 0, i32 0 ++ %cmp_o_em = getelementptr [19 x i8], [19 x i8]* @.strCmpOrdDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if neither operand is a NaN and they are equal + %cmp_eq = fcmp oeq double %d1, %d2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq +- %cmp_eq_em = getelementptr [18 x i8]* @.strCmpEqDbl, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [18 x i8], [18 x i8]* @.strCmpEqDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if neither operand is a NaN and the first is greater or equal + %cmp_ge = fcmp oge double %d1, %d2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge +- %cmp_ge_em = getelementptr [18 x i8]* @.strCmpGeDbl, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if neither operand is a NaN and the first is greater + %cmp_gt = fcmp ogt double %d1, %d2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt +- %cmp_gt_em = getelementptr [18 x i8]* @.strCmpGtDbl, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGtDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if neither operand is a NaN and the first is less or equal + %cmp_le = fcmp ole double %d1, %d2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le +- %cmp_le_em = getelementptr [18 x i8]* @.strCmpLeDbl, i32 0, i32 0 ++ %cmp_le_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if neither operand is a NaN and the first is less + %cmp_lt = fcmp olt double %d1, %d2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt +- %cmp_lt_em = getelementptr [18 x i8]* @.strCmpLtDbl, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLtDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if neither operand is a NaN and they are not equal + %cmp_ne = fcmp one double %d1, %d2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne +- %cmp_ne_em = getelementptr [18 x i8]* @.strCmpNeDbl, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [18 x i8], [18 x i8]* @.strCmpNeDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void +@@ -512,43 +516,43 @@ entry: + ; test fcmp::uno -- should return true if either operand is NaN + %cmp_o = fcmp uno float %f1, %f2 + %cmp_o_ok = icmp eq i1 %cmp_o, %uno +- %cmp_o_em = getelementptr [20 x i8]* @.strCmpUnoFlt, i32 0, i32 0 ++ %cmp_o_em = getelementptr [20 x i8], [20 x i8]* @.strCmpUnoFlt, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::oeq -- should return true if either operand is a NaN and they are equal + %cmp_eq = fcmp ueq float %f1, %f2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq +- %cmp_eq_em = getelementptr [17 x i8]* @.strCmpEqFltU, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [17 x i8], [17 x i8]* @.strCmpEqFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::oge -- should return true if either operand is a NaN and the first is greater or equal + %cmp_ge = fcmp uge float %f1, %f2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge +- %cmp_ge_em = getelementptr [17 x i8]* @.strCmpGeFltU, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ogt -- should return true if either operand is a NaN and the first is greater + %cmp_gt = fcmp ugt float %f1, %f2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt +- %cmp_gt_em = getelementptr [17 x i8]* @.strCmpGtFltU, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpGtFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ole -- should return true if either operand is a NaN and the first is less or equal + %cmp_le = fcmp ule float %f1, %f2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le +- %cmp_le_em = getelementptr [17 x i8]* @.strCmpLeFltU, i32 0, i32 0 ++ %cmp_le_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::olt -- should return true if either operand is a NaN and the first is less + %cmp_lt = fcmp ult float %f1, %f2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt +- %cmp_lt_em = getelementptr [17 x i8]* @.strCmpLtFltU, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [17 x i8], [17 x i8]* @.strCmpLtFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::one -- should return true if either operand is a NaN and they are not equal + %cmp_ne = fcmp une float %f1, %f2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne +- %cmp_ne_em = getelementptr [17 x i8]* @.strCmpNeFltU, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [17 x i8], [17 x i8]* @.strCmpNeFltU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void +@@ -560,43 +564,43 @@ entry: + ; test fcmp::uno -- should return true if either operand is NaN + %cmp_o = fcmp uno double %d1, %d2 + %cmp_o_ok = icmp eq i1 %cmp_o, %uno +- %cmp_o_em = getelementptr [21 x i8]* @.strCmpUnoDbl, i32 0, i32 0 ++ %cmp_o_em = getelementptr [21 x i8], [21 x i8]* @.strCmpUnoDbl, i32 0, i32 0 + call void @failCheck( i1 %cmp_o_ok, i8* %cmp_o_em ) + + ; test fcmp::ueq -- should return true if either operand is a NaN and they are equal + %cmp_eq = fcmp ueq double %d1, %d2 + %cmp_eq_ok = icmp eq i1 %cmp_eq, %eq +- %cmp_eq_em = getelementptr [18 x i8]* @.strCmpEqDblU, i32 0, i32 0 ++ %cmp_eq_em = getelementptr [18 x i8], [18 x i8]* @.strCmpEqDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_eq_ok, i8* %cmp_eq_em ) + + ; test fcmp::uge -- should return true if either operand is a NaN and the first is greater or equal + %cmp_ge = fcmp uge double %d1, %d2 + %cmp_ge_ok = icmp eq i1 %cmp_ge, %ge +- %cmp_ge_em = getelementptr [18 x i8]* @.strCmpGeDblU, i32 0, i32 0 ++ %cmp_ge_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ge_ok, i8* %cmp_ge_em ) + + ; test fcmp::ugt -- should return true if either operand is a NaN and the first is greater + %cmp_gt = fcmp ugt double %d1, %d2 + %cmp_gt_ok = icmp eq i1 %cmp_gt, %gt +- %cmp_gt_em = getelementptr [18 x i8]* @.strCmpGtDblU, i32 0, i32 0 ++ %cmp_gt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpGtDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_gt_ok, i8* %cmp_gt_em ) + + ; test fcmp::ule -- should return true if either operand is a NaN and the first is less or equal + %cmp_le = fcmp ule double %d1, %d2 + %cmp_le_ok = icmp eq i1 %cmp_le, %le +- %cmp_le_em = getelementptr [18 x i8]* @.strCmpLeDblU, i32 0, i32 0 ++ %cmp_le_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_le_ok, i8* %cmp_le_em ) + + ; test fcmp::ult -- should return true if either operand is a NaN and the first is less + %cmp_lt = fcmp ult double %d1, %d2 + %cmp_lt_ok = icmp eq i1 %cmp_lt, %lt +- %cmp_lt_em = getelementptr [18 x i8]* @.strCmpLtDblU, i32 0, i32 0 ++ %cmp_lt_em = getelementptr [18 x i8], [18 x i8]* @.strCmpLtDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_lt_ok, i8* %cmp_lt_em ) + + ; test fcmp::une -- should return true if either operand is a NaN and they are not equal + %cmp_ne = fcmp une double %d1, %d2 + %cmp_ne_ok = icmp eq i1 %cmp_ne, %ne +- %cmp_ne_em = getelementptr [18 x i8]* @.strCmpNeDblU, i32 0, i32 0 ++ %cmp_ne_em = getelementptr [18 x i8], [18 x i8]* @.strCmpNeDblU, i32 0, i32 0 + call void @failCheck( i1 %cmp_ne_ok, i8* %cmp_ne_em ) + + ret void +@@ -639,8 +643,8 @@ entry: + store i64 -1, i64* %nan_as_i64 + + ; load two copies of our NaN +- %nan1 = load double* %nan +- %nan2 = load double* %nan ++ %nan1 = load double, double* %nan ++ %nan2 = load double, double* %nan + + ; NaNs do different things depending on ordered vs unordered + call void @testFCmpBothOrdered( double %nan1, double 0.000000e+00, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0 ) +@@ -670,8 +674,8 @@ entry: + call void @testFCmp( ) + + ; everything worked -- print a message saying so +- %works_msg = getelementptr [20 x i8]* @.strWorks, i32 0, i32 0 +- %ret = call i32 (i8*, ...)* @printf( i8* %works_msg ) ++ %works_msg = getelementptr [20 x i8], [20 x i8]* @.strWorks, i32 0, i32 0 ++ %ret = call i32 (i8*, ...) @printf( i8* %works_msg ) + + ret i32 0 + } +diff --git a/test/Concrete/GlobalInitializers.leq36.ll b/test/Concrete/GlobalInitializers.leq36.ll new file mode 100755 -index 000000000000..57e702dcdca9 +index 000000000000..ba7e53eb7cd7 --- /dev/null -+++ b/test/Concrete/GlobalInitializers.llvm37.ll -@@ -0,0 +1,50 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; LLVM 3.7 requires a type as the first argument to 'load' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Concrete/GlobalInitializers.leq36.ll +@@ -0,0 +1,48 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +declare void @print_i32(i32) @@ -1083,25 +1682,25 @@ index 000000000000..57e702dcdca9 + +define i32 @main() { +entry: -+ %addr0 = getelementptr i32, i32* @gInt, i32 0 -+ %addr1 = getelementptr [2 x i32], [2 x i32]* @gInts, i32 0, i32 0 -+ %addr2 = getelementptr [2 x i32], [2 x i32]* @gInts, i32 0, i32 1 -+ %addr3 = getelementptr %simple, %simple* @gStruct, i32 0, i32 0 -+ %addr4 = getelementptr %simple, %simple* @gStruct, i32 0, i32 1 -+ %addr5 = getelementptr %simple, %simple* @gStruct, i32 0, i32 2 -+ %addr6 = getelementptr %simple, %simple* @gStruct, i32 0, i32 3 -+ %addr7 = getelementptr %simple, %simple* @gZero, i32 0, i32 2 -+ %contents0 = load i32, i32* %addr0 -+ %contents1 = load i32, i32* %addr1 -+ %contents2 = load i32, i32* %addr2 -+ %contents3tmp = load i8, i8* %addr3 ++ %addr0 = getelementptr i32* @gInt, i32 0 ++ %addr1 = getelementptr [2 x i32]* @gInts, i32 0, i32 0 ++ %addr2 = getelementptr [2 x i32]* @gInts, i32 0, i32 1 ++ %addr3 = getelementptr %simple* @gStruct, i32 0, i32 0 ++ %addr4 = getelementptr %simple* @gStruct, i32 0, i32 1 ++ %addr5 = getelementptr %simple* @gStruct, i32 0, i32 2 ++ %addr6 = getelementptr %simple* @gStruct, i32 0, i32 3 ++ %addr7 = getelementptr %simple* @gZero, i32 0, i32 2 ++ %contents0 = load i32* %addr0 ++ %contents1 = load i32* %addr1 ++ %contents2 = load i32* %addr2 ++ %contents3tmp = load i8* %addr3 + %contents3 = zext i8 %contents3tmp to i32 -+ %contents4tmp = load i16, i16* %addr4 ++ %contents4tmp = load i16* %addr4 + %contents4 = zext i16 %contents4tmp to i32 -+ %contents5 = load i32, i32* %addr5 -+ %contents6tmp = load i64, i64* %addr6 ++ %contents5 = load i32* %addr5 ++ %contents6tmp = load i64* %addr6 + %contents6 = trunc i64 %contents6tmp to i32 -+ %contents7 = load i32, i32* %addr7 ++ %contents7 = load i32* %addr7 + %tmp0 = mul i32 %contents0, %contents1 + %tmp1 = mul i32 %tmp0, %contents2 + %tmp2 = mul i32 %tmp1, %contents3 @@ -1118,24 +1717,66 @@ index 000000000000..57e702dcdca9 + call void @print_i32(i32 0) + ret i32 0 +} -diff --git a/test/Concrete/SimpleStoreAndLoad.ll b/test/Concrete/SimpleStoreAndLoad.ll -index 1edad0386916..7bb65ea7dfc9 100644 ---- a/test/Concrete/SimpleStoreAndLoad.ll -+++ b/test/Concrete/SimpleStoreAndLoad.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s - - declare void @print_i32(i32) -diff --git a/test/Concrete/SimpleStoreAndLoad.llvm37.ll b/test/Concrete/SimpleStoreAndLoad.llvm37.ll -new file mode 100644 -index 000000000000..951a474ee297 ---- /dev/null -+++ b/test/Concrete/SimpleStoreAndLoad.llvm37.ll -@@ -0,0 +1,22 @@ +diff --git a/test/Concrete/GlobalInitializers.ll b/test/Concrete/GlobalInitializers.ll +index e3657dad19e5..57e702dcdca9 100755 +--- a/test/Concrete/GlobalInitializers.ll ++++ b/test/Concrete/GlobalInitializers.ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; LLVM 3.7 requires a type as the first argument to 'load' +; REQUIRES: geq-llvm-3.7 + ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + + declare void @print_i32(i32) +@@ -10,25 +13,25 @@ declare void @print_i32(i32) + + define i32 @main() { + entry: +- %addr0 = getelementptr i32* @gInt, i32 0 +- %addr1 = getelementptr [2 x i32]* @gInts, i32 0, i32 0 +- %addr2 = getelementptr [2 x i32]* @gInts, i32 0, i32 1 +- %addr3 = getelementptr %simple* @gStruct, i32 0, i32 0 +- %addr4 = getelementptr %simple* @gStruct, i32 0, i32 1 +- %addr5 = getelementptr %simple* @gStruct, i32 0, i32 2 +- %addr6 = getelementptr %simple* @gStruct, i32 0, i32 3 +- %addr7 = getelementptr %simple* @gZero, i32 0, i32 2 +- %contents0 = load i32* %addr0 +- %contents1 = load i32* %addr1 +- %contents2 = load i32* %addr2 +- %contents3tmp = load i8* %addr3 ++ %addr0 = getelementptr i32, i32* @gInt, i32 0 ++ %addr1 = getelementptr [2 x i32], [2 x i32]* @gInts, i32 0, i32 0 ++ %addr2 = getelementptr [2 x i32], [2 x i32]* @gInts, i32 0, i32 1 ++ %addr3 = getelementptr %simple, %simple* @gStruct, i32 0, i32 0 ++ %addr4 = getelementptr %simple, %simple* @gStruct, i32 0, i32 1 ++ %addr5 = getelementptr %simple, %simple* @gStruct, i32 0, i32 2 ++ %addr6 = getelementptr %simple, %simple* @gStruct, i32 0, i32 3 ++ %addr7 = getelementptr %simple, %simple* @gZero, i32 0, i32 2 ++ %contents0 = load i32, i32* %addr0 ++ %contents1 = load i32, i32* %addr1 ++ %contents2 = load i32, i32* %addr2 ++ %contents3tmp = load i8, i8* %addr3 + %contents3 = zext i8 %contents3tmp to i32 +- %contents4tmp = load i16* %addr4 ++ %contents4tmp = load i16, i16* %addr4 + %contents4 = zext i16 %contents4tmp to i32 +- %contents5 = load i32* %addr5 +- %contents6tmp = load i64* %addr6 ++ %contents5 = load i32, i32* %addr5 ++ %contents6tmp = load i64, i64* %addr6 + %contents6 = trunc i64 %contents6tmp to i32 +- %contents7 = load i32* %addr7 ++ %contents7 = load i32, i32* %addr7 + %tmp0 = mul i32 %contents0, %contents1 + %tmp1 = mul i32 %tmp0, %contents2 + %tmp2 = mul i32 %tmp1, %contents3 +diff --git a/test/Concrete/SimpleStoreAndLoad.leq36.ll b/test/Concrete/SimpleStoreAndLoad.leq36.ll +new file mode 100644 +index 000000000000..7bb65ea7dfc9 +--- /dev/null ++++ b/test/Concrete/SimpleStoreAndLoad.leq36.ll +@@ -0,0 +1,20 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + +declare void @print_i32(i32) @@ -1143,9 +1784,9 @@ index 000000000000..951a474ee297 +define i32 @main() { +entry: + %a = alloca i32, i32 4 -+ %tmp1 = getelementptr i32, i32* %a, i32 0 ++ %tmp1 = getelementptr i32* %a, i32 0 + store i32 0, i32* %tmp1 -+ %tmp2 = load i32, i32* %tmp1 ++ %tmp2 = load i32* %tmp1 + %tmp3 = icmp eq i32 %tmp2, 0 + br i1 %tmp3, label %exitTrue, label %exitFalse +exitTrue: @@ -1155,24 +1796,36 @@ index 000000000000..951a474ee297 + call void @print_i32(i32 0) + ret i32 0 +} -diff --git a/test/Feature/BitcastAlias.ll b/test/Feature/BitcastAlias.ll -index e0e3653feebc..d203e52c4bcb 100644 ---- a/test/Feature/BitcastAlias.ll -+++ b/test/Feature/BitcastAlias.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: llvm-as %s -f -o %t1.bc - ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/BitcastAlias.llvm37.ll b/test/Feature/BitcastAlias.llvm37.ll -new file mode 100644 -index 000000000000..5bd301936e13 ---- /dev/null -+++ b/test/Feature/BitcastAlias.llvm37.ll -@@ -0,0 +1,37 @@ +diff --git a/test/Concrete/SimpleStoreAndLoad.ll b/test/Concrete/SimpleStoreAndLoad.ll +index 1edad0386916..951a474ee297 100644 +--- a/test/Concrete/SimpleStoreAndLoad.ll ++++ b/test/Concrete/SimpleStoreAndLoad.ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; LLVM 3.7 no longer accepts '*' with a 'call' ++; LLVM 3.7 requires a type as the first argument to 'load' +; REQUIRES: geq-llvm-3.7 + ; RUN: %S/ConcreteTest.py --klee='%klee' --lli=%lli %s + + declare void @print_i32(i32) +@@ -5,9 +8,9 @@ declare void @print_i32(i32) + define i32 @main() { + entry: + %a = alloca i32, i32 4 +- %tmp1 = getelementptr i32* %a, i32 0 ++ %tmp1 = getelementptr i32, i32* %a, i32 0 + store i32 0, i32* %tmp1 +- %tmp2 = load i32* %tmp1 ++ %tmp2 = load i32, i32* %tmp1 + %tmp3 = icmp eq i32 %tmp2, 0 + br i1 %tmp3, label %exitTrue, label %exitFalse + exitTrue: +diff --git a/test/Feature/BitcastAlias.leq36.ll b/test/Feature/BitcastAlias.leq36.ll +new file mode 100644 +index 000000000000..d203e52c4bcb +--- /dev/null ++++ b/test/Feature/BitcastAlias.leq36.ll +@@ -0,0 +1,35 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1195,36 +1848,55 @@ index 000000000000..5bd301936e13 + +define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone { +entry: -+ %call = call i32 (i64) bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) ++ %call = call i32 (i64)* bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) + %r = icmp eq i32 %call, 52 + br i1 %r, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/BitcastAliasMD2U.ll b/test/Feature/BitcastAliasMD2U.ll -index 24eabaa57c8c..cef8ac5459ca 100644 ---- a/test/Feature/BitcastAliasMD2U.ll -+++ b/test/Feature/BitcastAliasMD2U.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: llvm-as %s -f -o %t1.bc - ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 -diff --git a/test/Feature/BitcastAliasMD2U.llvm37.ll b/test/Feature/BitcastAliasMD2U.llvm37.ll -new file mode 100644 -index 000000000000..7eddd3d6a01c ---- /dev/null -+++ b/test/Feature/BitcastAliasMD2U.llvm37.ll -@@ -0,0 +1,37 @@ +diff --git a/test/Feature/BitcastAlias.ll b/test/Feature/BitcastAlias.ll +index e0e3653feebc..5bd301936e13 100644 +--- a/test/Feature/BitcastAlias.ll ++++ b/test/Feature/BitcastAlias.ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; LLVM 3.7 no longer accepts '*' with a 'call' +; REQUIRES: geq-llvm-3.7 + ; RUN: llvm-as %s -f -o %t1.bc + ; RUN: rm -rf %t.klee-out + ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 +@@ -20,15 +23,15 @@ declare i32 @puts(i8*) + + define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone { + entry: +- %call = call i32 (i64)* bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) ++ %call = call i32 (i64) bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) + %r = icmp eq i32 %call, 52 + br i1 %r, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/BitcastAliasMD2U.leq36.ll b/test/Feature/BitcastAliasMD2U.leq36.ll +new file mode 100644 +index 000000000000..cef8ac5459ca +--- /dev/null ++++ b/test/Feature/BitcastAliasMD2U.leq36.ll +@@ -0,0 +1,35 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 @@ -1247,44 +1919,55 @@ index 000000000000..7eddd3d6a01c + +define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone { +entry: -+ %call = call i32 (i64) bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) ++ %call = call i32 (i64)* bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) + %r = icmp eq i32 %call, 52 + br i1 %r, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/ConstantArray.ll b/test/Feature/ConstantArray.ll -index 161b2a167610..a4986ff4bc7f 100644 ---- a/test/Feature/ConstantArray.ll -+++ b/test/Feature/ConstantArray.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: llvm-as %s -f -o %t1.bc - ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc 2>&1 | FileCheck %s -@@ -48,4 +49,4 @@ exit: - ; CHECK: 1:9 - - ret i32 0 --} -\ No newline at end of file -+} -diff --git a/test/Feature/ConstantArray.llvm37.ll b/test/Feature/ConstantArray.llvm37.ll -new file mode 100644 -index 000000000000..195b4cb014e4 ---- /dev/null -+++ b/test/Feature/ConstantArray.llvm37.ll -@@ -0,0 +1,55 @@ +diff --git a/test/Feature/BitcastAliasMD2U.ll b/test/Feature/BitcastAliasMD2U.ll +index 24eabaa57c8c..7eddd3d6a01c 100644 +--- a/test/Feature/BitcastAliasMD2U.ll ++++ b/test/Feature/BitcastAliasMD2U.ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; LLVM 3.7 requires a type as the first argument to 'load' +; LLVM 3.7 no longer accepts '*' with a 'call' +; REQUIRES: geq-llvm-3.7 + ; RUN: llvm-as %s -f -o %t1.bc + ; RUN: rm -rf %t.klee-out + ; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 +@@ -20,15 +23,15 @@ declare i32 @puts(i8*) + + define i32 @main(i32 %argc, i8** nocapture %argv) nounwind readnone { + entry: +- %call = call i32 (i64)* bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) ++ %call = call i32 (i64) bitcast (i32 (i32)* @foo to i32 (i64)*)(i64 52) + %r = icmp eq i32 %call, 52 + br i1 %r, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/ConstantArray.leq36.ll b/test/Feature/ConstantArray.leq36.ll +new file mode 100644 +index 000000000000..a4986ff4bc7f +--- /dev/null ++++ b/test/Feature/ConstantArray.leq36.ll +@@ -0,0 +1,52 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc 2>&1 | FileCheck %s @@ -1300,22 +1983,22 @@ index 000000000000..195b4cb014e4 +define i32 @main() { +entry: + %a = alloca %struct.dirent -+ %tmp1 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0 ++ %tmp1 = getelementptr %struct.dirent* %a, i32 0 + %tmp2 = bitcast %struct.dirent* %tmp1 to <2 x i32>* + ; Initialize with constant vector + store <2 x i32> , <2 x i32>* %tmp2 + br label %exit +exit: + ; Print first initialized element -+ %idx = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 0 -+ %val = load i32, i32* %idx -+ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i32 %val) ++ %idx = getelementptr %struct.dirent* %a, i32 0, i32 0 ++ %val = load i32* %idx ++ call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str, i32 0, i32 0), i32 %val) + ; CHECK: 0:42 + + ; Print second initialized element -+ %idx2 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 1 -+ %val2 = load i32, i32* %idx2 -+ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i32 0, i32 0), i32 %val2) ++ %idx2 = getelementptr %struct.dirent* %a, i32 0, i32 1 ++ %val2 = load i32* %idx2 ++ call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str2, i32 0, i32 0), i32 %val2) + ; CHECK: 1:4096 + + ; Initialize with constant array @@ -1323,36 +2006,93 @@ index 000000000000..195b4cb014e4 + store [2 x i32][i32 7, i32 9], [2 x i32]* %array + + ; Print first initialized element -+ %idx3 = getelementptr [2 x i32], [2 x i32]* %array, i32 0, i32 0 -+ %val3 = load i32, i32* %idx3 -+ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i32 %val3) ++ %idx3 = getelementptr [2 x i32]* %array, i32 0, i32 0 ++ %val3 = load i32* %idx3 ++ call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str, i32 0, i32 0), i32 %val3) + ; CHECK: 0:7 + + ; Print second initialized element -+ %idx4 = getelementptr [2 x i32], [2 x i32]* %array, i32 0, i32 1 -+ %val4 = load i32, i32* %idx4 -+ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i32 0, i32 0), i32 %val4) ++ %idx4 = getelementptr [2 x i32]* %array, i32 0, i32 1 ++ %val4 = load i32* %idx4 ++ call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str2, i32 0, i32 0), i32 %val4) + ; CHECK: 1:9 + + ret i32 0 +} -diff --git a/test/Feature/ConstantStruct.ll b/test/Feature/ConstantStruct.ll -index 4fe6b5d0e041..073544d38d2f 100644 ---- a/test/Feature/ConstantStruct.ll -+++ b/test/Feature/ConstantStruct.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Feature/ConstantArray.ll b/test/Feature/ConstantArray.ll +index 161b2a167610..195b4cb014e4 100644 +--- a/test/Feature/ConstantArray.ll ++++ b/test/Feature/ConstantArray.ll +@@ -1,3 +1,7 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; LLVM 3.7 requires a type as the first argument to 'load' ++; LLVM 3.7 no longer accepts '*' with a 'call' ++; REQUIRES: geq-llvm-3.7 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/ConstantStruct.llvm37.ll b/test/Feature/ConstantStruct.llvm37.ll + ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc 2>&1 | FileCheck %s +@@ -13,22 +17,22 @@ declare void @klee_print_expr(i8*, ...) + define i32 @main() { + entry: + %a = alloca %struct.dirent +- %tmp1 = getelementptr %struct.dirent* %a, i32 0 ++ %tmp1 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0 + %tmp2 = bitcast %struct.dirent* %tmp1 to <2 x i32>* + ; Initialize with constant vector + store <2 x i32> , <2 x i32>* %tmp2 + br label %exit + exit: + ; Print first initialized element +- %idx = getelementptr %struct.dirent* %a, i32 0, i32 0 +- %val = load i32* %idx +- call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str, i32 0, i32 0), i32 %val) ++ %idx = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 0 ++ %val = load i32, i32* %idx ++ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i32 %val) + ; CHECK: 0:42 + + ; Print second initialized element +- %idx2 = getelementptr %struct.dirent* %a, i32 0, i32 1 +- %val2 = load i32* %idx2 +- call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str2, i32 0, i32 0), i32 %val2) ++ %idx2 = getelementptr %struct.dirent, %struct.dirent* %a, i32 0, i32 1 ++ %val2 = load i32, i32* %idx2 ++ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i32 0, i32 0), i32 %val2) + ; CHECK: 1:4096 + + ; Initialize with constant array +@@ -36,16 +40,16 @@ exit: + store [2 x i32][i32 7, i32 9], [2 x i32]* %array + + ; Print first initialized element +- %idx3 = getelementptr [2 x i32]* %array, i32 0, i32 0 +- %val3 = load i32* %idx3 +- call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str, i32 0, i32 0), i32 %val3) ++ %idx3 = getelementptr [2 x i32], [2 x i32]* %array, i32 0, i32 0 ++ %val3 = load i32, i32* %idx3 ++ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i32 %val3) + ; CHECK: 0:7 + + ; Print second initialized element +- %idx4 = getelementptr [2 x i32]* %array, i32 0, i32 1 +- %val4 = load i32* %idx4 +- call void(i8*, ...)* @klee_print_expr(i8* getelementptr inbounds ([2 x i8]* @.str2, i32 0, i32 0), i32 %val4) ++ %idx4 = getelementptr [2 x i32], [2 x i32]* %array, i32 0, i32 1 ++ %val4 = load i32, i32* %idx4 ++ call void(i8*, ...) @klee_print_expr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i32 0, i32 0), i32 %val4) + ; CHECK: 1:9 + + ret i32 0 +-} +\ No newline at end of file ++} +diff --git a/test/Feature/ConstantStruct.leq36.ll b/test/Feature/ConstantStruct.leq36.ll new file mode 100644 -index 000000000000..e4b3d07bdc08 +index 000000000000..073544d38d2f --- /dev/null -+++ b/test/Feature/ConstantStruct.llvm37.ll -@@ -0,0 +1,35 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Feature/ConstantStruct.leq36.ll +@@ -0,0 +1,34 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1379,30 +2119,43 @@ index 000000000000..e4b3d07bdc08 + br i1 %r, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/GetElementPtr.ll b/test/Feature/GetElementPtr.ll -index da94441c685e..43f33e27aaf1 100644 ---- a/test/Feature/GetElementPtr.ll -+++ b/test/Feature/GetElementPtr.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Feature/ConstantStruct.ll b/test/Feature/ConstantStruct.ll +index 4fe6b5d0e041..e4b3d07bdc08 100644 +--- a/test/Feature/ConstantStruct.ll ++++ b/test/Feature/ConstantStruct.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; REQUIRES: geq-llvm-3.7 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/GetElementPtr.llvm37.ll b/test/Feature/GetElementPtr.llvm37.ll +@@ -24,10 +26,10 @@ entry: + br i1 %r, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/GetElementPtr.leq36.ll b/test/Feature/GetElementPtr.leq36.ll new file mode 100644 -index 000000000000..f7f8aada8dc5 +index 000000000000..43f33e27aaf1 --- /dev/null -+++ b/test/Feature/GetElementPtr.llvm37.ll -@@ -0,0 +1,31 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Feature/GetElementPtr.leq36.ll +@@ -0,0 +1,30 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1419,36 +2172,57 @@ index 000000000000..f7f8aada8dc5 +define i32 @main() { +entry: + %addr = alloca i8, align 4 -+ %addrp1 = getelementptr i8, i8* %addr, i32 1 -+ %addrp1m1 = getelementptr i8, i8* %addrp1, i32 -1 ++ %addrp1 = getelementptr i8* %addr, i32 1 ++ %addrp1m1 = getelementptr i8* %addrp1, i32 -1 + %test = icmp eq i8* %addr, %addrp1m1 + br i1 %test, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/InsertExtractValue.ll b/test/Feature/InsertExtractValue.ll -index 83e8f851ccea..431e14c4225a 100644 ---- a/test/Feature/InsertExtractValue.ll -+++ b/test/Feature/InsertExtractValue.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Feature/GetElementPtr.ll b/test/Feature/GetElementPtr.ll +index da94441c685e..f7f8aada8dc5 100644 +--- a/test/Feature/GetElementPtr.ll ++++ b/test/Feature/GetElementPtr.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; REQUIRES: geq-llvm-3.7 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/InsertExtractValue.llvm37.ll b/test/Feature/InsertExtractValue.llvm37.ll +@@ -14,16 +16,16 @@ declare i32 @puts(i8*) + define i32 @main() { + entry: + %addr = alloca i8, align 4 +- %addrp1 = getelementptr i8* %addr, i32 1 +- %addrp1m1 = getelementptr i8* %addrp1, i32 -1 ++ %addrp1 = getelementptr i8, i8* %addr, i32 1 ++ %addrp1m1 = getelementptr i8, i8* %addrp1, i32 -1 + %test = icmp eq i8* %addr, %addrp1m1 + br i1 %test, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/InsertExtractValue.leq36.ll b/test/Feature/InsertExtractValue.leq36.ll new file mode 100644 -index 000000000000..fff6da7cd07a +index 000000000000..431e14c4225a --- /dev/null -+++ b/test/Feature/InsertExtractValue.llvm37.ll -@@ -0,0 +1,35 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Feature/InsertExtractValue.leq36.ll +@@ -0,0 +1,34 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1475,30 +2249,43 @@ index 000000000000..fff6da7cd07a + br i1 %r, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/Overflow.ll b/test/Feature/Overflow.ll -index 35dfbd10fe02..2ab047727817 100644 ---- a/test/Feature/Overflow.ll -+++ b/test/Feature/Overflow.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Feature/InsertExtractValue.ll b/test/Feature/InsertExtractValue.ll +index 83e8f851ccea..fff6da7cd07a 100644 +--- a/test/Feature/InsertExtractValue.ll ++++ b/test/Feature/InsertExtractValue.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; REQUIRES: geq-llvm-3.7 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/Overflow.llvm37.ll b/test/Feature/Overflow.llvm37.ll +@@ -24,10 +26,10 @@ entry: + br i1 %r, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/Overflow.leq36.ll b/test/Feature/Overflow.leq36.ll new file mode 100644 -index 000000000000..1dbe12168ed2 +index 000000000000..2ab047727817 --- /dev/null -+++ b/test/Feature/Overflow.llvm37.ll -@@ -0,0 +1,46 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Feature/Overflow.leq36.ll +@@ -0,0 +1,45 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1536,30 +2323,43 @@ index 000000000000..1dbe12168ed2 + br i1 %o1, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/OverflowMul.ll b/test/Feature/OverflowMul.ll -index 7026aa74bfbe..1b14d3806cf6 100644 ---- a/test/Feature/OverflowMul.ll -+++ b/test/Feature/OverflowMul.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 +diff --git a/test/Feature/Overflow.ll b/test/Feature/Overflow.ll +index 35dfbd10fe02..1dbe12168ed2 100644 +--- a/test/Feature/Overflow.ll ++++ b/test/Feature/Overflow.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; REQUIRES: geq-llvm-3.7 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/OverflowMul.llvm37.ll b/test/Feature/OverflowMul.llvm37.ll +@@ -35,10 +37,10 @@ bb1_1: + br i1 %o1, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/OverflowMul.leq36.ll b/test/Feature/OverflowMul.leq36.ll new file mode 100644 -index 000000000000..3173e43c271c +index 000000000000..1b14d3806cf6 --- /dev/null -+++ b/test/Feature/OverflowMul.llvm37.ll -@@ -0,0 +1,46 @@ -+; LLVM 3.7 requires a type as the first argument to 'getelementptr' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Feature/OverflowMul.leq36.ll +@@ -0,0 +1,45 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -1597,22 +2397,127 @@ index 000000000000..3173e43c271c + br i1 %o1, label %bbtrue, label %bbfalse + +bbtrue: -+ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + +bbfalse: -+ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/_utils.llvm37._ll b/test/Feature/_utils.llvm37._ll -new file mode 100644 -index 000000000000..d825df3a7bcf ---- /dev/null -+++ b/test/Feature/_utils.llvm37._ll -@@ -0,0 +1,74 @@ +diff --git a/test/Feature/OverflowMul.ll b/test/Feature/OverflowMul.ll +index 7026aa74bfbe..3173e43c271c 100644 +--- a/test/Feature/OverflowMul.ll ++++ b/test/Feature/OverflowMul.ll +@@ -1,3 +1,5 @@ ++; LLVM 3.7 requires a type as the first argument to 'getelementptr' ++; REQUIRES: geq-llvm-3.7 + ; RUN: llvm-as %s -f -o %t1.bc + ; RUN: rm -rf %t.klee-out + ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 +@@ -35,10 +37,10 @@ bb1_1: + br i1 %o1, label %bbtrue, label %bbfalse + + bbtrue: +- %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.passstr, i64 0, i64 0)) nounwind ++ %0 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.passstr, i64 0, i64 0)) nounwind + ret i32 0 + + bbfalse: +- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8]* @.failstr, i64 0, i64 0)) nounwind ++ %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 + } +diff --git a/test/Feature/_utils._ll b/test/Feature/_utils._ll +index 32a73bb1356d..d825df3a7bcf 100644 +--- a/test/Feature/_utils._ll ++++ b/test/Feature/_utils._ll +@@ -1,3 +1,6 @@ +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; LLVM 3.7 requires a type as the first argument to 'load' + + define i32 @util_make_and_i1(i32 %a, i32 %b) { + %a_i1 = icmp ne i32 %a, 0 + %b_i1 = icmp ne i32 %b, 0 +@@ -17,26 +20,26 @@ define i32 @util_make_or_i1(i32 %a, i32 %b) { + define i16 @util_make_concat2(i8 %a, i8 %b) { + %tmp = alloca i16 + %tmp8 = bitcast i16* %tmp to i8* +- %p0 = getelementptr i8* %tmp8, i32 0 +- %p1 = getelementptr i8* %tmp8, i32 1 ++ %p0 = getelementptr i8, i8* %tmp8, i32 0 ++ %p1 = getelementptr i8, i8* %tmp8, i32 1 + store i8 %b, i8* %p0 + store i8 %a, i8* %p1 +- %concat = load i16* %tmp ++ %concat = load i16, i16* %tmp + ret i16 %concat + } + + define i32 @util_make_concat4(i8 %a, i8 %b, i8 %c, i8 %d) { + %tmp = alloca i32 + %tmp8 = bitcast i32* %tmp to i8* +- %p0 = getelementptr i8* %tmp8, i32 0 +- %p1 = getelementptr i8* %tmp8, i32 1 +- %p2 = getelementptr i8* %tmp8, i32 2 +- %p3 = getelementptr i8* %tmp8, i32 3 ++ %p0 = getelementptr i8, i8* %tmp8, i32 0 ++ %p1 = getelementptr i8, i8* %tmp8, i32 1 ++ %p2 = getelementptr i8, i8* %tmp8, i32 2 ++ %p3 = getelementptr i8, i8* %tmp8, i32 3 + store i8 %d, i8* %p0 + store i8 %c, i8* %p1 + store i8 %b, i8* %p2 + store i8 %a, i8* %p3 +- %concat = load i32* %tmp ++ %concat = load i32, i32* %tmp + ret i32 %concat + } + +@@ -44,14 +47,14 @@ define i64 @util_make_concat8(i8 %a, i8 %b, i8 %c, i8 %d, + i8 %e, i8 %f, i8 %g, i8 %h) { + %tmp = alloca i64 + %tmp8 = bitcast i64* %tmp to i8* +- %p0 = getelementptr i8* %tmp8, i32 0 +- %p1 = getelementptr i8* %tmp8, i32 1 +- %p2 = getelementptr i8* %tmp8, i32 2 +- %p3 = getelementptr i8* %tmp8, i32 3 +- %p4 = getelementptr i8* %tmp8, i32 4 +- %p5 = getelementptr i8* %tmp8, i32 5 +- %p6 = getelementptr i8* %tmp8, i32 6 +- %p7 = getelementptr i8* %tmp8, i32 7 ++ %p0 = getelementptr i8, i8* %tmp8, i32 0 ++ %p1 = getelementptr i8, i8* %tmp8, i32 1 ++ %p2 = getelementptr i8, i8* %tmp8, i32 2 ++ %p3 = getelementptr i8, i8* %tmp8, i32 3 ++ %p4 = getelementptr i8, i8* %tmp8, i32 4 ++ %p5 = getelementptr i8, i8* %tmp8, i32 5 ++ %p6 = getelementptr i8, i8* %tmp8, i32 6 ++ %p7 = getelementptr i8, i8* %tmp8, i32 7 + store i8 %h, i8* %p0 + store i8 %g, i8* %p1 + store i8 %f, i8* %p2 +@@ -60,7 +63,7 @@ define i64 @util_make_concat8(i8 %a, i8 %b, i8 %c, i8 %d, + store i8 %c, i8* %p5 + store i8 %b, i8* %p6 + store i8 %a, i8* %p7 +- %concat = load i64* %tmp ++ %concat = load i64, i64* %tmp + ret i64 %concat + } + +@@ -68,4 +71,4 @@ define i32 @util_make_select(i32 %cond, i32 %t, i32 %f) { + %cond_i1 = icmp ne i32 %cond, 0 + %res = select i1 %cond_i1, i32 %t, i32 %f + ret i32 %res +-} +\ No newline at end of file ++} +diff --git a/test/Feature/_utils.leq36._ll b/test/Feature/_utils.leq36._ll +new file mode 100644 +index 000000000000..32a73bb1356d +--- /dev/null ++++ b/test/Feature/_utils.leq36._ll +@@ -0,0 +1,71 @@ +define i32 @util_make_and_i1(i32 %a, i32 %b) { + %a_i1 = icmp ne i32 %a, 0 + %b_i1 = icmp ne i32 %b, 0 @@ -1632,26 +2537,26 @@ index 000000000000..d825df3a7bcf +define i16 @util_make_concat2(i8 %a, i8 %b) { + %tmp = alloca i16 + %tmp8 = bitcast i16* %tmp to i8* -+ %p0 = getelementptr i8, i8* %tmp8, i32 0 -+ %p1 = getelementptr i8, i8* %tmp8, i32 1 ++ %p0 = getelementptr i8* %tmp8, i32 0 ++ %p1 = getelementptr i8* %tmp8, i32 1 + store i8 %b, i8* %p0 + store i8 %a, i8* %p1 -+ %concat = load i16, i16* %tmp ++ %concat = load i16* %tmp + ret i16 %concat +} + +define i32 @util_make_concat4(i8 %a, i8 %b, i8 %c, i8 %d) { + %tmp = alloca i32 + %tmp8 = bitcast i32* %tmp to i8* -+ %p0 = getelementptr i8, i8* %tmp8, i32 0 -+ %p1 = getelementptr i8, i8* %tmp8, i32 1 -+ %p2 = getelementptr i8, i8* %tmp8, i32 2 -+ %p3 = getelementptr i8, i8* %tmp8, i32 3 ++ %p0 = getelementptr i8* %tmp8, i32 0 ++ %p1 = getelementptr i8* %tmp8, i32 1 ++ %p2 = getelementptr i8* %tmp8, i32 2 ++ %p3 = getelementptr i8* %tmp8, i32 3 + store i8 %d, i8* %p0 + store i8 %c, i8* %p1 + store i8 %b, i8* %p2 + store i8 %a, i8* %p3 -+ %concat = load i32, i32* %tmp ++ %concat = load i32* %tmp + ret i32 %concat +} + @@ -1659,14 +2564,14 @@ index 000000000000..d825df3a7bcf + i8 %e, i8 %f, i8 %g, i8 %h) { + %tmp = alloca i64 + %tmp8 = bitcast i64* %tmp to i8* -+ %p0 = getelementptr i8, i8* %tmp8, i32 0 -+ %p1 = getelementptr i8, i8* %tmp8, i32 1 -+ %p2 = getelementptr i8, i8* %tmp8, i32 2 -+ %p3 = getelementptr i8, i8* %tmp8, i32 3 -+ %p4 = getelementptr i8, i8* %tmp8, i32 4 -+ %p5 = getelementptr i8, i8* %tmp8, i32 5 -+ %p6 = getelementptr i8, i8* %tmp8, i32 6 -+ %p7 = getelementptr i8, i8* %tmp8, i32 7 ++ %p0 = getelementptr i8* %tmp8, i32 0 ++ %p1 = getelementptr i8* %tmp8, i32 1 ++ %p2 = getelementptr i8* %tmp8, i32 2 ++ %p3 = getelementptr i8* %tmp8, i32 3 ++ %p4 = getelementptr i8* %tmp8, i32 4 ++ %p5 = getelementptr i8* %tmp8, i32 5 ++ %p6 = getelementptr i8* %tmp8, i32 6 ++ %p7 = getelementptr i8* %tmp8, i32 7 + store i8 %h, i8* %p0 + store i8 %g, i8* %p1 + store i8 %f, i8* %p2 @@ -1675,7 +2580,7 @@ index 000000000000..d825df3a7bcf + store i8 %c, i8* %p5 + store i8 %b, i8* %p6 + store i8 %a, i8* %p7 -+ %concat = load i64, i64* %tmp ++ %concat = load i64* %tmp + ret i64 %concat +} + @@ -1684,26 +2589,14 @@ index 000000000000..d825df3a7bcf + %res = select i1 %cond_i1, i32 %t, i32 %f + ret i32 %res +} -diff --git a/test/Intrinsics/objectsize.ll b/test/Intrinsics/objectsize.ll -index 4bb59596ad2f..7ad4b6fc4fad 100644 ---- a/test/Intrinsics/objectsize.ll -+++ b/test/Intrinsics/objectsize.ll -@@ -1,3 +1,4 @@ -+; REQUIRES: lt-llvm-3.7 - ; RUN: %llvmas %s -o=%t.bc - ; RUN: rm -rf %t.klee-out - ; RUN: %klee -exit-on-error --output-dir=%t.klee-out -disable-opt %t.bc -diff --git a/test/Intrinsics/objectsize.llvm37.ll b/test/Intrinsics/objectsize.llvm37.ll +\ No newline at end of file +diff --git a/test/Intrinsics/objectsize.leq36.ll b/test/Intrinsics/objectsize.leq36.ll new file mode 100644 -index 000000000000..3a111f99c619 +index 000000000000..7ad4b6fc4fad --- /dev/null -+++ b/test/Intrinsics/objectsize.llvm37.ll -@@ -0,0 +1,37 @@ -+; Unfortunately LLVM 2.9 has a different suffix for the ``llvm.objectsize`` instrinsic -+; so this LLVM IR fails to verify for that version. -+; -+; LLVM 3.7 requires a type as the first argument to 'load' -+; REQUIRES: geq-llvm-3.7 ++++ b/test/Intrinsics/objectsize.leq36.ll +@@ -0,0 +1,33 @@ ++; REQUIRES: lt-llvm-3.7 +; RUN: %llvmas %s -o=%t.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee -exit-on-error --output-dir=%t.klee-out -disable-opt %t.bc @@ -1714,13 +2607,13 @@ index 000000000000..3a111f99c619 +define i32 @main() nounwind uwtable { +entry: + %a = alloca i8*, align 8 -+ %0 = load i8*, i8** %a, align 8 ++ %0 = load i8** %a, align 8 + %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %0, i1 true) + %cmp = icmp ne i64 %1, 0 + br i1 %cmp, label %abort.block, label %continue.block + +continue.block: -+ %2 = load i8*, i8** %a, align 8 ++ %2 = load i8** %a, align 8 + %3 = call i64 @llvm.objectsize.i64.p0i8(i8* %2, i1 false) + %cmp1 = icmp ne i64 %3, -1 + br i1 %cmp1, label %abort.block, label %exit.block @@ -1736,6 +2629,35 @@ index 000000000000..3a111f99c619 +declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) nounwind readnone + +declare void @abort() noreturn nounwind +diff --git a/test/Intrinsics/objectsize.ll b/test/Intrinsics/objectsize.ll +index 4bb59596ad2f..3a111f99c619 100644 +--- a/test/Intrinsics/objectsize.ll ++++ b/test/Intrinsics/objectsize.ll +@@ -1,3 +1,8 @@ ++; Unfortunately LLVM 2.9 has a different suffix for the ``llvm.objectsize`` instrinsic ++; so this LLVM IR fails to verify for that version. ++; ++; LLVM 3.7 requires a type as the first argument to 'load' ++; REQUIRES: geq-llvm-3.7 + ; RUN: %llvmas %s -o=%t.bc + ; RUN: rm -rf %t.klee-out + ; RUN: %klee -exit-on-error --output-dir=%t.klee-out -disable-opt %t.bc +@@ -8,13 +13,13 @@ target triple = "x86_64-unknown-linux-gnu" + define i32 @main() nounwind uwtable { + entry: + %a = alloca i8*, align 8 +- %0 = load i8** %a, align 8 ++ %0 = load i8*, i8** %a, align 8 + %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %0, i1 true) + %cmp = icmp ne i64 %1, 0 + br i1 %cmp, label %abort.block, label %continue.block + + continue.block: +- %2 = load i8** %a, align 8 ++ %2 = load i8*, i8** %a, align 8 + %3 = call i64 @llvm.objectsize.i64.p0i8(i8* %2, i1 false) + %cmp1 = icmp ne i64 %3, -1 + br i1 %cmp1, label %abort.block, label %exit.block diff --git a/test/lit.cfg b/test/lit.cfg index 00b429b697a5..e570f9b227e3 100644 --- a/test/lit.cfg @@ -1750,24 +2672,39 @@ index 00b429b697a5..e570f9b227e3 100644 config.llvm_version_minor) config.available_features.add("llvm-" + current_llvm_version) diff --git a/test/regression/2007-08-16-invalid-constant-value.c b/test/regression/2007-08-16-invalid-constant-value.c -index 5b17e68b5412..53014f97827c 100644 +index 5b17e68b5412..fd011f2e02ba 100644 --- a/test/regression/2007-08-16-invalid-constant-value.c +++ b/test/regression/2007-08-16-invalid-constant-value.c @@ -1,3 +1,4 @@ -+// REQUIRES: lt-llvm-3.7 ++// REQUIRES: geq-llvm-3.7 // RUN: rm -f %t4.out %t4.err %t4.log // RUN: %llvmgcc %s -emit-llvm -O2 -c -o %t1.bc // RUN: llvm-as -f %p/../Feature/_utils._ll -o %t2.bc -diff --git a/test/regression/2007-08-16-invalid-constant-value.llvm37.c b/test/regression/2007-08-16-invalid-constant-value.llvm37.c +@@ -18,12 +19,12 @@ int main() { + // value was being created when implied value did not + // subtract using the proper type (so overflowed into + // invalid bits) +- if (util_make_concat2(a+0xCD,0xCD) == 0xABCD) { ++ if (util_make_concat2(a + 0xCD, 0xCD) == 0xABCD) { + assert(!klee_is_symbolic(a)); + printf("add constant case: %d\n", a); + } + +- if (util_make_concat2(0x0B-a,0xCD) == 0xABCD) { ++ if (util_make_concat2(0x0B - a, 0xCD) == 0xABCD) { + assert(!klee_is_symbolic(a)); + printf("sub constant case: %d\n", a); + } +diff --git a/test/regression/2007-08-16-invalid-constant-value.leq36.c b/test/regression/2007-08-16-invalid-constant-value.leq36.c new file mode 100644 -index 000000000000..f2c1f9c4bb2c +index 000000000000..bf9f7561f718 --- /dev/null -+++ b/test/regression/2007-08-16-invalid-constant-value.llvm37.c ++++ b/test/regression/2007-08-16-invalid-constant-value.leq36.c @@ -0,0 +1,33 @@ -+// REQUIRES: geq-llvm-3.7 ++// REQUIRES: lt-llvm-3.7 +// RUN: rm -f %t4.out %t4.err %t4.log +// RUN: %llvmgcc %s -emit-llvm -O2 -c -o %t1.bc -+// RUN: llvm-as -f %p/../Feature/_utils.llvm37._ll -o %t2.bc ++// RUN: llvm-as -f %p/../Feature/_utils.leq36._ll -o %t2.bc +// RUN: llvm-link %t1.bc %t2.bc -o %t3.bc +// RUN: rm -rf %t.klee-out +// RUN: %klee --output-dir=%t.klee-out %t3.bc @@ -1785,12 +2722,12 @@ index 000000000000..f2c1f9c4bb2c + // value was being created when implied value did not + // subtract using the proper type (so overflowed into + // invalid bits) -+ if (util_make_concat2(a + 0xCD, 0xCD) == 0xABCD) { ++ if (util_make_concat2(a+0xCD,0xCD) == 0xABCD) { + assert(!klee_is_symbolic(a)); + printf("add constant case: %d\n", a); + } + -+ if (util_make_concat2(0x0B - a, 0xCD) == 0xABCD) { ++ if (util_make_concat2(0x0B-a,0xCD) == 0xABCD) { + assert(!klee_is_symbolic(a)); + printf("sub constant case: %d\n", a); + } @@ -1798,5 +2735,5 @@ index 000000000000..f2c1f9c4bb2c + return 0; +} -- -2.16.3 +2.17.0 diff --git a/0004-llvm37-handle-getRegisteredOptions.patch b/0004-llvm37-handle-getRegisteredOptions.patch index 1717ce8..8ad24c9 100644 --- a/0004-llvm37-handle-getRegisteredOptions.patch +++ b/0004-llvm37-handle-getRegisteredOptions.patch @@ -4,7 +4,7 @@ Subject: llvm37: handle getRegisteredOptions Patch-mainline: no In LLVM 3.7 and later, getRegisteredOptions takes no arguments and -return the map. +returns the map directly. Signed-off-by: Jiri Slaby --- @@ -29,5 +29,5 @@ index aaba72f4b5b7..3c117db9fa7b 100644 i++) { if (i->second->Category != &Category) { -- -2.16.3 +2.17.0 diff --git a/0005-llvm-make-KLEE-compile-against-LLVM-3.8.patch b/0005-llvm-make-KLEE-compile-against-LLVM-3.8.patch index 2732ac3..4d21660 100644 --- a/0005-llvm-make-KLEE-compile-against-LLVM-3.8.patch +++ b/0005-llvm-make-KLEE-compile-against-LLVM-3.8.patch @@ -7,18 +7,18 @@ Signed-off-by: Jiri Slaby --- 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 ++++++- + 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(-) diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index f7c71e8d2dfc..a7d2eaac2a18 100644 +index f0781e5b882a..2c7e8d4d52a6 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -2212,8 +2212,13 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { +@@ -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()); @@ -33,7 +33,7 @@ index f7c71e8d2dfc..a7d2eaac2a18 100644 break; } diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp -index d9ec35aa3405..76f079a81cfd 100644 +index f2a989e28439..7881f0e84be5 100644 --- a/lib/Core/StatsTracker.cpp +++ b/lib/Core/StatsTracker.cpp @@ -637,7 +637,11 @@ static std::vector getSuccs(Instruction *i) { @@ -49,26 +49,26 @@ index d9ec35aa3405..76f079a81cfd 100644 return res; diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp -index 4846b4ce72b3..6b08ef40e09e 100644 +index 3729ff82cd9d..e10e886e8915 100644 --- a/lib/Module/IntrinsicCleaner.cpp +++ b/lib/Module/IntrinsicCleaner.cpp -@@ -52,6 +52,10 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { - for (BasicBlock::iterator i = b.begin(), ie = b.end(); - (i != ie) && (block_split == false);) { +@@ -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(&*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 LowerIntrinsic deletion makes iterator invalid. - ++i; - if(ii) { -@@ -104,8 +108,12 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { + // 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 our one ++ // ctor needs the iterator, but we already increased ours + IRBuilder<> builder(ii->getParent(), i_); +#else IRBuilder<> builder(ii->getParent(), ii); @@ -76,7 +76,7 @@ index 4846b4ce72b3..6b08ef40e09e 100644 +#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 @@ -266,5 +266,5 @@ index ab9dfe286ffb..3d73ae07fcb5 100644 // create directory and try to link klee-last if (mkdir(d.c_str(), 0775) == 0) { -- -2.16.3 +2.17.0 diff --git a/0006-llvm-make-KLEE-compile-against-LLVM-3.9.patch b/0006-llvm-make-KLEE-compile-against-LLVM-3.9.patch index fc985aa..0c7a1c4 100644 --- a/0006-llvm-make-KLEE-compile-against-LLVM-3.9.patch +++ b/0006-llvm-make-KLEE-compile-against-LLVM-3.9.patch @@ -15,10 +15,10 @@ Signed-off-by: Jiri Slaby 7 files changed, 98 insertions(+), 5 deletions(-) diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index a7d2eaac2a18..3d54af877844 100644 +index 2c7e8d4d52a6..b2178cccefd2 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -1307,10 +1307,18 @@ void Executor::executeCall(ExecutionState &state, +@@ -1305,10 +1305,18 @@ void Executor::executeCall(ExecutionState &state, // // Alignment requirements for scalar types is the same as their size if (argWidth > Expr::Int64) { @@ -37,7 +37,7 @@ index a7d2eaac2a18..3d54af877844 100644 } } -@@ -1343,10 +1351,18 @@ void Executor::executeCall(ExecutionState &state, +@@ -1341,10 +1349,18 @@ void Executor::executeCall(ExecutionState &state, Expr::Width argWidth = arguments[i]->getWidth(); if (argWidth > Expr::Int64) { @@ -288,5 +288,5 @@ index 3d73ae07fcb5..c0ea4fa54551 100644 if (Watchdog) { if (MaxTime==0) { -- -2.16.3 +2.17.0 diff --git a/0007-llvm38-test-change-some-tests.patch b/0007-llvm38-test-change-some-tests.patch index bc99699..c1b8437 100644 --- a/0007-llvm38-test-change-some-tests.patch +++ b/0007-llvm38-test-change-some-tests.patch @@ -3,43 +3,31 @@ Date: Wed, 1 Nov 2017 09:25:47 +0100 Subject: llvm38: test, change some tests Patch-mainline: no -alias in LLVM 3.8 has a new format, it adds a AliaseeTy parameter. So +alias in LLVM 3.8 has a new format, it adds an AliaseeTy parameter. So handle this in the tests. [v2] add comments about what was changed and why Signed-off-by: Jiri Slaby --- - test/Feature/BitcastAlias.llvm37.ll | 1 + - test/Feature/BitcastAlias.llvm38.ll | 38 +++++++++++++++++++++++++++++++++ - test/Feature/BitcastAliasMD2U.llvm37.ll | 1 + - test/Feature/BitcastAliasMD2U.llvm38.ll | 38 +++++++++++++++++++++++++++++++++ - 4 files changed, 78 insertions(+) - create mode 100644 test/Feature/BitcastAlias.llvm38.ll - create mode 100644 test/Feature/BitcastAliasMD2U.llvm38.ll + test/Feature/BitcastAlias.leq37.ll | 38 ++++++++++++++++++++++++++ + test/Feature/BitcastAlias.ll | 5 ++-- + test/Feature/BitcastAliasMD2U.leq37.ll | 38 ++++++++++++++++++++++++++ + test/Feature/BitcastAliasMD2U.ll | 5 ++-- + 4 files changed, 82 insertions(+), 4 deletions(-) + create mode 100644 test/Feature/BitcastAlias.leq37.ll + create mode 100644 test/Feature/BitcastAliasMD2U.leq37.ll -diff --git a/test/Feature/BitcastAlias.llvm37.ll b/test/Feature/BitcastAlias.llvm37.ll -index 5bd301936e13..e860acb24594 100644 ---- a/test/Feature/BitcastAlias.llvm37.ll -+++ b/test/Feature/BitcastAlias.llvm37.ll -@@ -1,6 +1,7 @@ - ; LLVM 3.7 requires a type as the first argument to 'getelementptr' - ; LLVM 3.7 no longer accepts '*' with a 'call' - ; REQUIRES: geq-llvm-3.7 -+; REQUIRES: lt-llvm-3.8 - ; RUN: llvm-as %s -f -o %t1.bc - ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 -diff --git a/test/Feature/BitcastAlias.llvm38.ll b/test/Feature/BitcastAlias.llvm38.ll +diff --git a/test/Feature/BitcastAlias.leq37.ll b/test/Feature/BitcastAlias.leq37.ll new file mode 100644 -index 000000000000..5111f18e53aa +index 000000000000..e860acb24594 --- /dev/null -+++ b/test/Feature/BitcastAlias.llvm38.ll ++++ b/test/Feature/BitcastAlias.leq37.ll @@ -0,0 +1,38 @@ -+; LLVM 3.8 requires a type as the first argument to 'alias' +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; LLVM 3.7 no longer accepts '*' with a 'call' -+; REQUIRES: geq-llvm-3.8 ++; REQUIRES: geq-llvm-3.7 ++; REQUIRES: lt-llvm-3.8 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 @@ -48,7 +36,7 @@ index 000000000000..5111f18e53aa +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-unknown-linux-gnu" + -+@foo = alias i32 (i32), i32 (i32)* @__foo ++@foo = alias i32 (i32)* @__foo + +define i32 @__foo(i32 %i) nounwind { +entry: @@ -74,28 +62,38 @@ index 000000000000..5111f18e53aa + %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} -diff --git a/test/Feature/BitcastAliasMD2U.llvm37.ll b/test/Feature/BitcastAliasMD2U.llvm37.ll -index 7eddd3d6a01c..c29ec8a62243 100644 ---- a/test/Feature/BitcastAliasMD2U.llvm37.ll -+++ b/test/Feature/BitcastAliasMD2U.llvm37.ll +diff --git a/test/Feature/BitcastAlias.ll b/test/Feature/BitcastAlias.ll +index 5bd301936e13..5111f18e53aa 100644 +--- a/test/Feature/BitcastAlias.ll ++++ b/test/Feature/BitcastAlias.ll @@ -1,6 +1,7 @@ ++; LLVM 3.8 requires a type as the first argument to 'alias' ; LLVM 3.7 requires a type as the first argument to 'getelementptr' ; LLVM 3.7 no longer accepts '*' with a 'call' - ; REQUIRES: geq-llvm-3.7 -+; REQUIRES: lt-llvm-3.8 +-; REQUIRES: geq-llvm-3.7 ++; REQUIRES: geq-llvm-3.8 ; RUN: llvm-as %s -f -o %t1.bc ; RUN: rm -rf %t.klee-out - ; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 -diff --git a/test/Feature/BitcastAliasMD2U.llvm38.ll b/test/Feature/BitcastAliasMD2U.llvm38.ll + ; RUN: %klee --output-dir=%t.klee-out -disable-opt %t1.bc > %t2 +@@ -9,7 +10,7 @@ + target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" + target triple = "x86_64-unknown-linux-gnu" + +-@foo = alias i32 (i32)* @__foo ++@foo = alias i32 (i32), i32 (i32)* @__foo + + define i32 @__foo(i32 %i) nounwind { + entry: +diff --git a/test/Feature/BitcastAliasMD2U.leq37.ll b/test/Feature/BitcastAliasMD2U.leq37.ll new file mode 100644 -index 000000000000..7ef74a8da43c +index 000000000000..c29ec8a62243 --- /dev/null -+++ b/test/Feature/BitcastAliasMD2U.llvm38.ll ++++ b/test/Feature/BitcastAliasMD2U.leq37.ll @@ -0,0 +1,38 @@ -+; LLVM 3.8 requires a type as the first argument to 'alias' +; LLVM 3.7 requires a type as the first argument to 'getelementptr' +; LLVM 3.7 no longer accepts '*' with a 'call' -+; REQUIRES: geq-llvm-3.8 ++; REQUIRES: geq-llvm-3.7 ++; REQUIRES: lt-llvm-3.8 +; RUN: llvm-as %s -f -o %t1.bc +; RUN: rm -rf %t.klee-out +; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 @@ -104,7 +102,7 @@ index 000000000000..7ef74a8da43c +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-unknown-linux-gnu" + -+@foo = alias i32 (i32), i32 (i32)* @__foo ++@foo = alias i32 (i32)* @__foo + +define i32 @__foo(i32 %i) nounwind { +entry: @@ -130,6 +128,28 @@ index 000000000000..7ef74a8da43c + %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.failstr, i64 0, i64 0)) nounwind + ret i32 0 +} +diff --git a/test/Feature/BitcastAliasMD2U.ll b/test/Feature/BitcastAliasMD2U.ll +index 7eddd3d6a01c..7ef74a8da43c 100644 +--- a/test/Feature/BitcastAliasMD2U.ll ++++ b/test/Feature/BitcastAliasMD2U.ll +@@ -1,6 +1,7 @@ ++; LLVM 3.8 requires a type as the first argument to 'alias' + ; LLVM 3.7 requires a type as the first argument to 'getelementptr' + ; LLVM 3.7 no longer accepts '*' with a 'call' +-; REQUIRES: geq-llvm-3.7 ++; REQUIRES: geq-llvm-3.8 + ; RUN: llvm-as %s -f -o %t1.bc + ; RUN: rm -rf %t.klee-out + ; RUN: %klee --output-dir=%t.klee-out -disable-opt -search=nurs:md2u %t1.bc > %t2 +@@ -9,7 +10,7 @@ + target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" + target triple = "x86_64-unknown-linux-gnu" + +-@foo = alias i32 (i32)* @__foo ++@foo = alias i32 (i32), i32 (i32)* @__foo + + define i32 @__foo(i32 %i) nounwind { + entry: -- -2.16.3 +2.17.0 diff --git a/0008-llvm40-handle-different-header-names.patch b/0008-llvm40-handle-different-header-names.patch index e727e00..1008dc1 100644 --- a/0008-llvm40-handle-different-header-names.patch +++ b/0008-llvm40-handle-different-header-names.patch @@ -84,5 +84,5 @@ index c0ea4fa54551..154a76feb361 100644 #include #include -- -2.16.3 +2.17.0 diff --git a/0009-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch b/0009-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch index 777d453..ef44937 100644 --- a/0009-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch +++ b/0009-llvm-APFloat-members-are-functions-in-LLVM-4.0.patch @@ -9,10 +9,10 @@ Signed-off-by: Jiri Slaby 1 file changed, 9 insertions(+) diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index 3d54af877844..dca1fe3a6b93 100644 +index b2178cccefd2..75132e0db71b 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -1450,12 +1450,21 @@ static bool isDebugIntrinsic(const Function *f, KModule *KM) { +@@ -1448,12 +1448,21 @@ static bool isDebugIntrinsic(const Function *f, KModule *KM) { static inline const llvm::fltSemantics * fpWidthToSemantics(unsigned width) { switch(width) { @@ -35,5 +35,5 @@ index 3d54af877844..dca1fe3a6b93 100644 return 0; } -- -2.16.3 +2.17.0 diff --git a/0010-llvm40-errorOr-and-similar.patch b/0010-llvm40-errorOr-and-similar.patch index abc3193..a9f89db 100644 --- a/0010-llvm40-errorOr-and-similar.patch +++ b/0010-llvm40-errorOr-and-similar.patch @@ -5,7 +5,7 @@ Patch-mainline: no Signed-off-by: Jiri Slaby --- - lib/Module/ModuleUtil.cpp | 50 ++++++++++++++++++++++++++++++++++++++--------- + lib/Module/ModuleUtil.cpp | 50 ++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/lib/Module/ModuleUtil.cpp b/lib/Module/ModuleUtil.cpp @@ -124,5 +124,5 @@ index 8aa070743048..ad847de0b368 100644 #else if (auto ec = module->materializeAllPermanently()) { -- -2.16.3 +2.17.0 diff --git a/0011-llvm-use-chrono-helpers-from-LLVM-4.0.patch b/0011-llvm-use-chrono-helpers-from-LLVM-4.0.patch index f140773..c2c4859 100644 --- a/0011-llvm-use-chrono-helpers-from-LLVM-4.0.patch +++ b/0011-llvm-use-chrono-helpers-from-LLVM-4.0.patch @@ -8,11 +8,11 @@ chrono. So switch to that in klee for LLVM 4.0 too. Signed-off-by: Jiri Slaby --- - include/klee/Internal/Support/Timer.h | 8 ++++++++ - include/klee/Internal/System/Time.h | 11 +++++++++++ - lib/Core/StatsTracker.cpp | 24 ++++++++++++++++++++++++ - lib/Support/Time.cpp | 32 ++++++++++++++++++++++++++++++++ - lib/Support/Timer.cpp | 16 ++++++++++++++++ + include/klee/Internal/Support/Timer.h | 8 +++++++ + include/klee/Internal/System/Time.h | 11 +++++++++ + lib/Core/StatsTracker.cpp | 24 ++++++++++++++++++++ + lib/Support/Time.cpp | 32 +++++++++++++++++++++++++++ + lib/Support/Timer.cpp | 16 ++++++++++++++ 5 files changed, 91 insertions(+) diff --git a/include/klee/Internal/Support/Timer.h b/include/klee/Internal/Support/Timer.h @@ -69,7 +69,7 @@ index 220e260c975e..12522c866439 100644 } diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp -index 76f079a81cfd..246c106cc9f4 100644 +index 7881f0e84be5..0be727fbc346 100644 --- a/lib/Core/StatsTracker.cpp +++ b/lib/Core/StatsTracker.cpp @@ -286,6 +286,29 @@ void StatsTracker::done() { @@ -195,5 +195,5 @@ index da96981079ae..a223b39ada57 100644 + +#endif -- -2.16.3 +2.17.0 diff --git a/0012-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch b/0012-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch index c59be6d..bded69b 100644 --- a/0012-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch +++ b/0012-llvm-PointerType-is-not-SequentialType-in-LLVM-4.patch @@ -8,7 +8,7 @@ So handle the type specially whenever needed. Signed-off-by: Jiri Slaby --- include/klee/util/GetElementPtrTypeIterator.h | 4 ++++ - lib/Core/Executor.cpp | 22 +++++++++++++++++++--- + lib/Core/Executor.cpp | 22 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/klee/util/GetElementPtrTypeIterator.h b/include/klee/util/GetElementPtrTypeIterator.h @@ -27,10 +27,10 @@ index 5fb9f4ec5c2f..bf7cb6ff0bea 100644 CurTy = 0; } diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index dca1fe3a6b93..50a6345e8767 100644 +index 75132e0db71b..1c08870b7a20 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -2600,8 +2600,7 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, TypeIt ib, TypeIt ie) { +@@ -2598,8 +2598,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 @@ index dca1fe3a6b93..50a6345e8767 100644 uint64_t elementSize = kmodule->targetData->getTypeStoreSize(set->getElementType()); Value *operand = ii.getOperand(); -@@ -2615,7 +2614,24 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, TypeIt ib, TypeIt ie) { +@@ -2613,7 +2612,24 @@ void Executor::computeOffsets(KGEPInstruction *kgepi, TypeIt ib, TypeIt ie) { } else { kgepi->indices.push_back(std::make_pair(index, elementSize)); } @@ -67,5 +67,5 @@ index dca1fe3a6b93..50a6345e8767 100644 } kgepi->offset = constantOffset->getZExtValue(); -- -2.16.3 +2.17.0 diff --git a/0013-llvm40-gep_type_iterator-has-no-operator.patch b/0013-llvm40-gep_type_iterator-has-no-operator.patch index d965d7a..078880f 100644 --- a/0013-llvm40-gep_type_iterator-has-no-operator.patch +++ b/0013-llvm40-gep_type_iterator-has-no-operator.patch @@ -12,7 +12,7 @@ Signed-off-by: Jiri Slaby 1 file changed, 4 insertions(+) diff --git a/lib/Core/ExecutorUtil.cpp b/lib/Core/ExecutorUtil.cpp -index a0f4de3dc43a..6397443647ec 100644 +index a352db3339c4..7718ae9d0ccb 100644 --- a/lib/Core/ExecutorUtil.cpp +++ b/lib/Core/ExecutorUtil.cpp @@ -213,7 +213,11 @@ namespace klee { @@ -28,5 +28,5 @@ index a0f4de3dc43a..6397443647ec 100644 const StructLayout *SL = kmodule->targetData->getStructLayout(STy); base = base->Add( -- -2.16.3 +2.17.0 diff --git a/0014-llvm50-avoid-on-function-arg_begin.patch b/0014-llvm50-avoid-on-function-arg_begin.patch index 20f5340..89e5783 100644 --- a/0014-llvm50-avoid-on-function-arg_begin.patch +++ b/0014-llvm50-avoid-on-function-arg_begin.patch @@ -46,5 +46,5 @@ index 154a76feb361..def83b584167 100644 args.push_back(Constant::getNullValue(ft->getParamType(4))); // app_fini args.push_back(Constant::getNullValue(ft->getParamType(5))); // rtld_fini -- -2.16.3 +2.17.0 diff --git a/0015-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch b/0015-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch index f26a6fa..3584369 100644 --- a/0015-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch +++ b/0015-llvm50-integerPartWidth-is-from-llvm-APFloatBase.patch @@ -28,5 +28,5 @@ index f73d1614c250..5433d9211ead 100644 } } -- -2.16.3 +2.17.0 diff --git a/0016-llvm50-handle-getOrInsertFunction-terminator.patch b/0016-llvm50-handle-getOrInsertFunction-terminator.patch index e3cda44..bf02382 100644 --- a/0016-llvm50-handle-getOrInsertFunction-terminator.patch +++ b/0016-llvm50-handle-getOrInsertFunction-terminator.patch @@ -12,9 +12,9 @@ Signed-off-by: Jiri Slaby --- include/klee/Config/Version.h | 6 ++++++ lib/Module/Checks.cpp | 8 ++++---- - lib/Module/IntrinsicCleaner.cpp | 2 +- + lib/Module/IntrinsicCleaner.cpp | 3 ++- tools/klee/main.cpp | 20 ++++++++++---------- - 4 files changed, 21 insertions(+), 15 deletions(-) + 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/include/klee/Config/Version.h b/include/klee/Config/Version.h index 532051602fe3..a02ce28baaae 100644 @@ -58,15 +58,16 @@ index aac63e1d9854..406b3045e527 100644 } diff --git a/lib/Module/IntrinsicCleaner.cpp b/lib/Module/IntrinsicCleaner.cpp -index 6b08ef40e09e..c9e909272b33 100644 +index e10e886e8915..d4f93bdc591e 100644 --- a/lib/Module/IntrinsicCleaner.cpp +++ b/lib/Module/IntrinsicCleaner.cpp -@@ -208,7 +208,7 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { +@@ -214,7 +214,8 @@ bool IntrinsicCleanerPass::runOnBasicBlock(BasicBlock &b, Module &M) { + // Intrisic instruction "llvm.trap" found. Directly lower it to // a call of the abort() function. Function *F = cast( - M.getOrInsertFunction( -- "abort", Type::getVoidTy(ctx), NULL)); -+ "abort", Type::getVoidTy(ctx) KLEE_LLVM_GOIF_TERMINATOR)); +- M.getOrInsertFunction("abort", Type::getVoidTy(ctx), NULL)); ++ M.getOrInsertFunction("abort", Type::getVoidTy(ctx) ++ KLEE_LLVM_GOIF_TERMINATOR)); F->setDoesNotReturn(); F->setDoesNotThrow(); @@ -115,5 +116,5 @@ index def83b584167..ff87d210b863 100644 f = mainModule->getFunction("__ctype_get_mb_cur_max"); -- -2.16.3 +2.17.0 diff --git a/0017-llvm50-SwitchInst-case-functions-now-return-pointers.patch b/0017-llvm50-SwitchInst-case-functions-now-return-pointers.patch index b170439..5aacc40 100644 --- a/0017-llvm50-SwitchInst-case-functions-now-return-pointers.patch +++ b/0017-llvm50-SwitchInst-case-functions-now-return-pointers.patch @@ -15,10 +15,10 @@ Signed-off-by: Jiri Slaby 1 file changed, 4 insertions(+) diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index 50a6345e8767..5411efe36402 100644 +index 1c08870b7a20..ee6821b6dc18 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -1643,7 +1643,11 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { +@@ -1641,7 +1641,11 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { // switch to an internal rep. llvm::IntegerType *Ty = cast(si->getCondition()->getType()); ConstantInt *ci = ConstantInt::get(Ty, CE->getZExtValue()); @@ -31,5 +31,5 @@ index 50a6345e8767..5411efe36402 100644 } else { // Handle possible different branch targets -- -2.16.3 +2.17.0 diff --git a/0018-llvm50-handle-new-file_magic-s-location.patch b/0018-llvm50-handle-new-file_magic-s-location.patch index 661dfa0..078e079 100644 --- a/0018-llvm50-handle-new-file_magic-s-location.patch +++ b/0018-llvm50-handle-new-file_magic-s-location.patch @@ -65,5 +65,5 @@ index ad847de0b368..5f967410568c 100644 Expected > arch = object::createBinary(Buffer, &Context); -- -2.16.3 +2.17.0 diff --git a/0019-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch b/0019-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch index 956eaa3..c06925a 100644 --- a/0019-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch +++ b/0019-llvm50-use-MutableArrayRef-for-APFloat-convertToInte.patch @@ -13,10 +13,10 @@ Signed-off-by: Jiri Slaby 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp -index 5411efe36402..5353f581ab36 100644 +index ee6821b6dc18..9004b46e8f15 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp -@@ -2296,7 +2296,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { +@@ -2294,7 +2294,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 @@ index 5411efe36402..5353f581ab36 100644 llvm::APFloat::rmTowardZero, &isExact); bindLocal(ki, state, ConstantExpr::alloc(value, resultType)); break; -@@ -2313,7 +2318,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { +@@ -2311,7 +2316,12 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { uint64_t value = 0; bool isExact = true; @@ -45,5 +45,5 @@ index 5411efe36402..5353f581ab36 100644 bindLocal(ki, state, ConstantExpr::alloc(value, resultType)); break; -- -2.16.3 +2.17.0 diff --git a/0020-llvm50-AllocaInst-takes-address-space.patch b/0020-llvm50-AllocaInst-takes-address-space.patch index c57f86f..0e90c31 100644 --- a/0020-llvm50-AllocaInst-takes-address-space.patch +++ b/0020-llvm50-AllocaInst-takes-address-space.patch @@ -35,5 +35,5 @@ index ff87d210b863..c85fee861f03 100644 /* Insert void klee_init_env(int* argc, char*** argv) */ std::vector params; -- -2.16.3 +2.17.0 diff --git a/0021-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch b/0021-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch new file mode 100644 index 0000000..5440ffb --- /dev/null +++ b/0021-llvm60-SetVersionPrinter-now-passes-down-a-stream.patch @@ -0,0 +1,85 @@ +From: Jiri Slaby +Date: Mon, 21 May 2018 15:12:44 +0200 +Subject: llvm60: SetVersionPrinter now passes down a stream +Patch-mainline: no + +I.e. klee::printVersion should now have a parameter -- the output +stream. Change both the prototype and the implementation to handle this +properly. + +Signed-off-by: Jiri Slaby +--- + include/klee/Internal/Support/PrintVersion.h | 8 +++++++ + lib/Support/PrintVersion.cpp | 23 ++++++++++++++------ + 2 files changed, 24 insertions(+), 7 deletions(-) + +diff --git a/include/klee/Internal/Support/PrintVersion.h b/include/klee/Internal/Support/PrintVersion.h +index 2c375ad2b946..87f73a002914 100644 +--- a/include/klee/Internal/Support/PrintVersion.h ++++ b/include/klee/Internal/Support/PrintVersion.h +@@ -10,8 +10,16 @@ + #ifndef KLEE_PRINT_VERSION_H + #define KLEE_PRINT_VERSION_H + ++#include "llvm/Support/raw_ostream.h" ++ ++#include "klee/Config/Version.h" ++ + namespace klee { ++#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0) ++ void printVersion(llvm::raw_ostream &OS); ++#else + void printVersion(); ++#endif + } + + #endif +diff --git a/lib/Support/PrintVersion.cpp b/lib/Support/PrintVersion.cpp +index d39249df023f..b7f2b6ff347a 100644 +--- a/lib/Support/PrintVersion.cpp ++++ b/lib/Support/PrintVersion.cpp +@@ -9,25 +9,34 @@ + + #include "klee/Internal/Support/PrintVersion.h" + #include "klee/Config/config.h" ++#include "klee/Config/Version.h" + #include "llvm/Support/raw_ostream.h" + #include "llvm/Support/CommandLine.h" + + #include "klee/Config/CompileTimeInfo.h" + ++#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0) ++void klee::printVersion(llvm::raw_ostream &OS) ++#else + void klee::printVersion() ++#endif + { +- llvm::outs() << PACKAGE_STRING " (" PACKAGE_URL ")\n"; ++#if LLVM_VERSION_CODE < LLVM_VERSION(6, 0) ++ llvm::raw_ostream &OS = llvm::outs(); ++#endif ++ ++ OS << PACKAGE_STRING " (" PACKAGE_URL ")\n"; + #ifdef KLEE_ENABLE_TIMESTAMP +- llvm::outs() << " Built " __DATE__ " (" __TIME__ ")\n"; ++ OS << " Built " __DATE__ " (" __TIME__ ")\n"; + #endif +- llvm::outs() << " Build mode: " << KLEE_BUILD_MODE "\n"; +- llvm::outs() << " Build revision: "; ++ OS << " Build mode: " << KLEE_BUILD_MODE "\n"; ++ OS << " Build revision: "; + #ifdef KLEE_BUILD_REVISION +- llvm::outs() << KLEE_BUILD_REVISION "\n"; ++ OS << KLEE_BUILD_REVISION "\n"; + #else +- llvm::outs() << "unknown\n"; ++ OS << "unknown\n"; + #endif + // Show LLVM version information +- llvm::outs() << "\n"; ++ OS << "\n"; + llvm::cl::PrintVersionMessage(); + } +-- +2.17.0 + diff --git a/0022-llvm60-handle-headers-renaming.patch b/0022-llvm60-handle-headers-renaming.patch new file mode 100644 index 0000000..5aefa01 --- /dev/null +++ b/0022-llvm60-handle-headers-renaming.patch @@ -0,0 +1,37 @@ +From: Jiri Slaby +Date: Mon, 21 May 2018 15:14:41 +0200 +Subject: llvm60: handle headers renaming +Patch-mainline: no + +Some headers were moved from llvm/Target/ to llvm/CodeGen/. Handle that. + +Signed-off-by: Jiri Slaby +--- + lib/Module/RaiseAsm.cpp | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/lib/Module/RaiseAsm.cpp b/lib/Module/RaiseAsm.cpp +index d9b3e40154ba..d478ff828796 100644 +--- a/lib/Module/RaiseAsm.cpp ++++ b/lib/Module/RaiseAsm.cpp +@@ -18,10 +18,16 @@ + #include "llvm/Support/raw_ostream.h" + #include "llvm/Support/Host.h" + #include "llvm/Support/TargetRegistry.h" ++#if LLVM_VERSION_CODE >= LLVM_VERSION(6, 0) ++#include "llvm/CodeGen/TargetLowering.h" ++#include "llvm/CodeGen/TargetSubtargetInfo.h" ++#include "llvm/Target/TargetMachine.h" ++#elif LLVM_VERSION_CODE >= LLVM_VERSION(3, 6) + #include "llvm/Target/TargetLowering.h" +-#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 6) + #include "llvm/Target/TargetMachine.h" + #include "llvm/Target/TargetSubtargetInfo.h" ++#else ++#include "llvm/Target/TargetLowering.h" + #endif + + using namespace llvm; +-- +2.17.0 + diff --git a/_servicedata b/_servicedata index f05a2a0..3ad9d87 100644 --- a/_servicedata +++ b/_servicedata @@ -1,4 +1,4 @@ git://github.com/klee/klee.git - 33964e5d935f903b2850f6576f93ce229fb00918 \ No newline at end of file + 4e0ec744a8170f3d82aa1a8658fd523442781da2 \ No newline at end of file diff --git a/klee-1.4.0+20180518.tar.xz b/klee-1.4.0+20180518.tar.xz deleted file mode 100644 index c7ac475..0000000 --- a/klee-1.4.0+20180518.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ac616443c0b3dd6fd8a24fc4d95dc35ff27bd1bca116c92556434640e0e5338 -size 591008 diff --git a/klee-1.4.0+20180522.tar.xz b/klee-1.4.0+20180522.tar.xz new file mode 100644 index 0000000..eed9978 --- /dev/null +++ b/klee-1.4.0+20180522.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:397ccfba7f13d4b9b3c03a5c714fad5c9361817486da9b68afcab36c579ab347 +size 591752 diff --git a/klee.changes b/klee.changes index ab35f9c..bcb5de4 100644 --- a/klee.changes +++ b/klee.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Wed May 23 12:25:13 UTC 2018 - opensuse-packaging@opensuse.org + +- Update to version 1.4.0+20180522: + * clang-format on lib/Module/{IntrinsicCleaner.cpp,Passes.h} + * some housekeeping in Passes.h and IntrinsicCleaner.cpp + * CompressionStream: fix sporadic segfaults (uninitialised avail_in) + * Removed .c_str() from getSourceLocation calls + * Renamed printFileLine to getSourceLocation (as suggested by @delcypher) to reflect the fact that it simply returns a string + * Simplified printFileLine by using std::to_string, and removed unneeded version that takes an argument a stream + * stop using DEBUG macro name + * fix some casts for LLP64 compilers + ------------------------------------------------------------------- Mon May 21 09:30:16 UTC 2018 - opensuse-packaging@opensuse.org diff --git a/klee.spec b/klee.spec index 3fae5a5..8eb4a6b 100644 --- a/klee.spec +++ b/klee.spec @@ -19,7 +19,7 @@ %define llvm_version_minor 0 %define llvm_version %{llvm_version_major} -%define version_unconverted 1.4.0+20180518 +%define version_unconverted 1.4.0+20180522 %ifarch %{ix86} x86_64 %define with_uclibc 1 @@ -31,7 +31,7 @@ Name: klee Summary: LLVM Execution Engine License: NCSA Group: Development/Languages/Other -Version: 1.4.0+20180518 +Version: 1.4.0+20180522 Release: 0 Url: http://klee.github.io/ Source0: %{name}-%{version}.tar.xz