diff options
author | Cristian Cadar <c.cadar@imperial.ac.uk> | 2020-11-28 20:56:14 +0000 |
---|---|---|
committer | MartinNowack <2443641+MartinNowack@users.noreply.github.com> | 2020-12-04 15:57:01 +0000 |
commit | 9be3e76ed1f9eb0ec86531e2437091f7f1f02c88 (patch) | |
tree | 3589e114ad33c053a38c94f69dfd415efaeb30f7 /test/VectorInstructions/oob-llvm-lt11.c | |
parent | 549206763cab1154fe05fc7a9a5f0e089405dcbd (diff) | |
download | klee-9be3e76ed1f9eb0ec86531e2437091f7f1f02c88.tar.gz |
Move all overflows from the vector instructions tests into a new file, as the overflow behaviour is different in LLVM 11.
Diffstat (limited to 'test/VectorInstructions/oob-llvm-lt11.c')
-rw-r--r-- | test/VectorInstructions/oob-llvm-lt11.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/VectorInstructions/oob-llvm-lt11.c b/test/VectorInstructions/oob-llvm-lt11.c new file mode 100644 index 00000000..9d80ef7d --- /dev/null +++ b/test/VectorInstructions/oob-llvm-lt11.c @@ -0,0 +1,44 @@ +// REQUIRES: lt-llvm-11.0 +// RUN: %clang %s -emit-llvm %O0opt -g -c -o %t1.bc +// RUN: rm -rf %t.klee-out +// NOTE: Have to pass `--optimize=false` to avoid vector operations being +// constant folded away. +// RUN: %klee --output-dir=%t.klee-out --optimize=false %t1.bc > %t.stdout.log 2> %t.stderr.log +// RUN: FileCheck -input-file=%t.stderr.log %s + +#include "klee/klee.h" + +#include <assert.h> +#include <stdint.h> +#include <stdio.h> + +typedef uint32_t v4ui __attribute__((vector_size(16))); +int main() { + v4ui f = {1, 2, 3, 4}; + int k = klee_range(0, 10, "k"); + + if (k == 0) { + // CHECK-DAG: [[@LINE+1]]: Out of bounds write when inserting element + f[4] = 255; // Out of bounds write + } + + if (k == 1) { + // CHECK-DAG: [[@LINE+1]]: Out of bounds read when extracting element + printf("f[4] = %u\n", f[5]); // Out of bounds + } + + if (k > 6) { + // Performing read should be ExtractElement instruction. + // For now this is an expected limitation. + // CHECK-DAG: [[@LINE+1]]: ExtractElement, support for symbolic index not implemented + uint32_t readValue = f[k]; + } + else { + // Performing write should be InsertElement instructions. + // For now this is an expected limitation. + // CHECK-DAG: [[@LINE+1]]: InsertElement, support for symbolic index not implemented + f[k] = 255; + } + + return 0; +} |