about summary refs log tree commit diff homepage
path: root/test
AgeCommit message (Collapse)Author
2020-11-03fix: bcmp with n==0Alastair Reid
This was executing the loop when n==0 leading to an out of bound pointer error. Found while verifying Rust code that compares strings.
2020-10-30Add test for atexit orderTomas Jasek
2020-10-30Mark the StaticDestructor test as failing on macOSCristian Cadar
2020-10-30Optimize StaticDestructor test to be less fragile to compiler optimizations.Cristian Cadar
2020-10-12MergingSearcher: remove random-path incompatibilityFrank Busse
2020-10-12address MartinNowack's remaining feedbackJulian Büning
2020-10-12Exception handling only for LLVM >= 8.0.0Julian Büning
2020-10-12Implemented support for C++ ExceptionsFelix Rath
We implement the Itanium ABI unwinding base-API, and leave the C++-specific parts to libcxxabi. Co-authored-by: Lukas Wölfer <lukas.woelfer@rwth-aachen.de>
2020-10-09implement fneg instructionJulian Büning
2020-10-09fix: fabs() working on the wrong argumentDavid Laprell
2020-10-09Add testcase for weakly linked globalsMartin Nowack
2020-10-06Added support for klee_open_merge and klee_close_merge in replay, together ↵Cristian Cadar
with a test case.
2020-09-30tests: add tests for empty .stats and additional/missing columnsFrank Busse
2020-09-30tests: support .test and introduce %klee-statsFrank Busse
2020-09-17Add test for klee-zestiTimotej Kapus
2020-09-02More robust handling of unknown intrinsicsAlastair Reid
- If an unknown intrinsic appears in the bitcode file, it is reported but execution can proceed. - If an unknown intrinsic is encountered during execution of some path, - the intrinsic is reported - this path is treated as an error - execution of other paths can proceed To be more precise, there is a list of "known unknown intrinsics". Intrinsics not on this list will prevent execution.
2020-08-28Definition of __cxa_thread_atexit_impl for the KLEE libc.Alastair Reid
This is a thread-local version of __cxa_atexit (but, in the absence of threads, it is sufficient to just call __cxa_atexit). The test is based on the existing test for atexit in test/Runtime/Uclibc/2008-03-04-libc-atexit-uses-dso-handle.c The motivation for adding this function is to support the Rust standard library that calls __cxa_thread_atexit_impl. This function is usually a weak symbol but, in KLEE, this behaves like a call to an unknown function and chaos ensues. Worse, it happens just as the program is cleanly shutting itself down, so programs that are cleanly exiting crash with the wrong message.
2020-08-07New intrinsic: klee_is_replayAlastair Reid
This instrinsic detects whether the program is being executed symbolically or concretely (i.e., using the libkleeRuntest library). The intended usage (illustrated in the test program) is to allow the test program to display the input values by invoking any libraries it wants to. This is especially valuable if you are constructing complex, structured values and for languages like Rust (or C++) that have rich libraries and print libraries. For example, you might pick a symbolic value N with the assumption "0 <= N < 10" and then pick N symbolic values and write them to an array. The resulting ktest file is a bit hard to understand compared with the output of the standard print function in Rust/C++.
2020-06-29Implement fshr/fshl intrinsicsAlastair Reid
Changes: - IntrinsicCleaner accepts fshr/fshl as accepted intrinsics - Executor::executeCall converts fshr/fshl to urem/zext/concat/shift/extract - Klee/main suppresses warnings about externals that are LLVM reserved (i.e., begin with "llvm.") - New test exercises 32 and 7 bit versions including oversize shift values Test values are based on LLVM's test for fshl/fshr - Changes that depend on existence of fshr/fshl are guarded by #if LLVM_VERSION_CODE >= LLVM_VERSION(7, 0) or ; REQUIRES: geq-llvm-7.0
2020-06-25Enforce fork/branch limits in branch() and fix double terminationFrank Busse
* extend help messages for -max-memory and -max-memory-inhibit * introduces branchingPermitted() * enforces fork/branch limits in branch() (vector version) * changes main loop * calls updateStates() before checkMemoryUsage() * calls updateStates() again in case we early terminate states This should prevent double termination for now. Other solutions are imho more expensive as we would have to compare possibly large vectors of states (either states(arr) in checkMemoryUsage() or removedStates in terminateState()).
2020-06-25fix Executor: initializeGlobalAliasesJulian Büning
2020-06-25add simple unknown bitcast alias test from the original issueJulian Büning
2020-06-25add known bitcast test for comparisonJulian Büning
2020-06-25regression test for unknown bitcast aliasJulian Büning
2020-06-19Added test reported in https://github.com/klee/klee/issues/189 for byval ↵Cristian Cadar
variadic arguments
2020-06-19Renamed Vararg.c to VarArg.c for consistency with the other var arg tests ↵Cristian Cadar
and reformatted comments.
2020-06-19Added test checking for correct alignment of variadic argumentsCristian Cadar
2020-06-19Added test checking that KLEE correctly handles variadic arguments with the ↵Cristian Cadar
byval attribute
2020-06-06[Module] Add testcase for inline asm liftingMartin Nowack
2020-05-01Add test case from #1257 to reproduce behaviourMartin Nowack
2020-04-30Removed the Internal directory from include/kleeCristian Cadar
2020-04-09[posix-runtime] Improve model to handle full-path symbolic filesTimotej Kapus
2020-04-09[posix-runtime] Add test for full path consistency for symbolic filesTimotej Kapus
2020-04-08test: add a new test for readStringAtAddressMarek Chalupa
Read strings from different parts of objects.
2020-03-22[posix-runtime] Simple GET/SET_LK modelTimotej Kapus
2020-03-19Additional test for dealing with vector instructionsCristian Cadar
2020-03-02fix lit.cfg: numerical comparison of LLVM version numbersJulian Büning
2020-03-02test/lit.cfg: add LLVM 10.0Julian Büning
2020-01-18Fix handling of debug information for functionsMartin Nowack
Tracking function locations separately correctly without prefixing it with a directory.
2020-01-13Assume assembly.ll is local to the run.istats fileMartin Nowack
Assuming a `klee-out-*` directory is moved to a different path location, subsequent analysis of the run.istats with KCachegrind focusing on assembly is impossible as the `assembly.ll` cannot be found. The reason is that the absolute path of the object file (assembly.ll) is hard-coded as part of the generated run.istats. To fix this, assume that the file is local to the `run.istats`.
2020-01-10Fix update_list_order.cMartin Nowack
2019-12-12[optimize-array] Fix value transformationTimotej Kapus
Value transformation operates on word instead of byte arrays. That means the Read indicies need to be adjusted to reflect that. Previously IndexCleanerVisitor tried to remove the multiplications in the index to covert byte indicies to word indicies. However as the two added test cases show this is not sufficent. Therefore we remove the IndexCleanerVisistor and just divide the index with word size which should always be correct.
2019-12-12[optimize-array] Fix hole index in buildMixedSelectExprTimotej Kapus
buildMixedSelectExpr was using the byte index for holes in the select condition instead of the word based one. This only occured if there was more than 1 hole.
2019-12-12[optimize-array] Fix update list read orderTimotej Kapus
ArrayExprOptimizer read the UpdateList in the wrong order, which meant that it used least recent update instead of the most recent one. This patch fixes this as well as adds a test to illustrate the issue.
2019-11-15Implement @llvm.is.constant() intrinsic handling and add a test for it.Gleb Popov
2019-11-07Handle llvm.objectsize explicitlyMartin Nowack
llvm.objectsize is used in several optimisation during compile time. Lowering these intrinsics took a conservative approach returning always the value for unknown. Instead, lower to the object's real size, if possible. Otherwise, a conservative value is used. Since LLVM 4.0, the function `llvm::lowerObjectSizeCall()` does exactly this. Use this function or preserve the old behaviour for older LLVM versions.
2019-11-07Added test for 3-argument main.Cristian Cadar
2019-11-05Most libc++ tests require uclibc; add missing REQUIRES statements or remove ↵Cristian Cadar
dependency.
2019-11-05Mark all constant global memory objects as constantMartin Nowack
Fixes #264. We first aggregate all constant memory objects initialise them and initialise their counter parts in the concrete memory. After that, we mark memory objects as constant such that they can't be modified (i.e. this includes marking them symbolic).
2019-11-05[test] Fix missing includesMartin Nowack
Fix multiple missing includes