From 1ac45951a90c2eed70d5232d7cd794060c47162a Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 4 Jul 2022 15:43:52 +0400 Subject: Eliminate .undefined_behavior.err category and simplify tests --- test/Feature/ubsan/ubsan_bool.c | 2 +- test/Feature/ubsan/ubsan_builtin.c | 2 +- test/Feature/ubsan/ubsan_enum.c | 24 ---------------------- test/Feature/ubsan/ubsan_enum.cpp | 24 ++++++++++++++++++++++ .../ubsan_implicit_signed_integer_truncation.c | 2 +- .../ubsan_implicit_unsigned_integer_truncation.c | 2 +- test/Feature/ubsan/ubsan_integer_divide_by_zero.c | 10 ++------- ...ow-applying_nonzero_offset_to_nonnull_pointer.c | 1 + ...applying_nonzero_offset_to_nonnull_pointer_10.c | 1 + ...rflow-applying_nonzero_offset_to_null_pointer.c | 6 +++--- ...overflow-applying_zero_offset_to_null_pointer.c | 5 +++-- test/Feature/ubsan/ubsan_return.c | 16 --------------- test/Feature/ubsan/ubsan_return.cpp | 16 +++++++++++++++ test/Feature/ubsan/ubsan_unreachable.c | 2 +- 14 files changed, 55 insertions(+), 58 deletions(-) delete mode 100644 test/Feature/ubsan/ubsan_enum.c create mode 100644 test/Feature/ubsan/ubsan_enum.cpp delete mode 100644 test/Feature/ubsan/ubsan_return.c create mode 100644 test/Feature/ubsan/ubsan_return.cpp (limited to 'test') diff --git a/test/Feature/ubsan/ubsan_bool.c b/test/Feature/ubsan/ubsan_bool.c index 360af183..6873299d 100644 --- a/test/Feature/ubsan/ubsan_bool.c +++ b/test/Feature/ubsan/ubsan_bool.c @@ -2,7 +2,7 @@ // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s // RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 -// RUN: ls %t.klee-out/ | grep undefined_behavior.err | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .invalid_load.err | wc -l | grep 1 #include "klee/klee.h" diff --git a/test/Feature/ubsan/ubsan_builtin.c b/test/Feature/ubsan/ubsan_builtin.c index 72ff73da..cb04987e 100644 --- a/test/Feature/ubsan/ubsan_builtin.c +++ b/test/Feature/ubsan/ubsan_builtin.c @@ -2,7 +2,7 @@ // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s // RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 -// RUN: ls %t.klee-out/ | grep .undefined_behavior.err | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .invalid_builtin_use.err | wc -l | grep 1 #include "klee/klee.h" diff --git a/test/Feature/ubsan/ubsan_enum.c b/test/Feature/ubsan/ubsan_enum.c deleted file mode 100644 index 1c79629a..00000000 --- a/test/Feature/ubsan/ubsan_enum.c +++ /dev/null @@ -1,24 +0,0 @@ -// RUN: %clangxx %s -fsanitize=enum -emit-llvm -g %O0opt -c -o %t.bc -// RUN: rm -rf %t.klee-out -// RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s -// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 -// RUN: ls %t.klee-out/ | grep .undefined_behavior.err | wc -l | grep 1 - -#include "klee/klee.h" - -enum E { a = 1 } e; - -int main() { - unsigned char x; - volatile bool result; - - klee_make_symbolic(&x, sizeof(x), "x"); - - for (unsigned char *p = (unsigned char *)&e; p != (unsigned char *)(&e + 1); ++p) - *p = x; - - // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: load invalid value - result = (int)e != -1; - - return 0; -} diff --git a/test/Feature/ubsan/ubsan_enum.cpp b/test/Feature/ubsan/ubsan_enum.cpp new file mode 100644 index 00000000..fe01f978 --- /dev/null +++ b/test/Feature/ubsan/ubsan_enum.cpp @@ -0,0 +1,24 @@ +// RUN: %clangxx %s -fsanitize=enum -emit-llvm -g %O0opt -c -o %t.bc +// RUN: rm -rf %t.klee-out +// RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s +// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 +// RUN: ls %t.klee-out/ | grep .invalid_load.err | wc -l | grep 1 + +#include "klee/klee.h" + +enum E { a = 1 } e; + +int main() { + unsigned char x; + volatile bool result; + + klee_make_symbolic(&x, sizeof(x), "x"); + + for (unsigned char *p = (unsigned char *)&e; p != (unsigned char *)(&e + 1); ++p) + *p = x; + + // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: load invalid value + result = (int)e != -1; + + return 0; +} diff --git a/test/Feature/ubsan/ubsan_implicit_signed_integer_truncation.c b/test/Feature/ubsan/ubsan_implicit_signed_integer_truncation.c index 23213808..95002907 100644 --- a/test/Feature/ubsan/ubsan_implicit_signed_integer_truncation.c +++ b/test/Feature/ubsan/ubsan_implicit_signed_integer_truncation.c @@ -2,7 +2,7 @@ // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s // RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 -// RUN: ls %t.klee-out/ | grep .implicit_conversion.err | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .implicit_truncation.err | wc -l | grep 1 #include "klee/klee.h" diff --git a/test/Feature/ubsan/ubsan_implicit_unsigned_integer_truncation.c b/test/Feature/ubsan/ubsan_implicit_unsigned_integer_truncation.c index f14b65ca..0db03cb0 100644 --- a/test/Feature/ubsan/ubsan_implicit_unsigned_integer_truncation.c +++ b/test/Feature/ubsan/ubsan_implicit_unsigned_integer_truncation.c @@ -2,7 +2,7 @@ // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s // RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 -// RUN: ls %t.klee-out/ | grep .implicit_conversion.err | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .implicit_truncation.err | wc -l | grep 1 #include "klee/klee.h" diff --git a/test/Feature/ubsan/ubsan_integer_divide_by_zero.c b/test/Feature/ubsan/ubsan_integer_divide_by_zero.c index c33bab38..09591e29 100644 --- a/test/Feature/ubsan/ubsan_integer_divide_by_zero.c +++ b/test/Feature/ubsan/ubsan_integer_divide_by_zero.c @@ -6,15 +6,9 @@ #include "klee/klee.h" -#if defined(__SIZEOF_INT128__) && !defined(_WIN32) -typedef __int128 intmax; -#else -typedef long long intmax; -#endif - int main() { - intmax x; - volatile intmax result; + int x; + volatile int result; klee_make_symbolic(&x, sizeof(x), "x"); diff --git a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer.c b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer.c index dcbba073..007a8ee2 100644 --- a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer.c +++ b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer.c @@ -17,6 +17,7 @@ int main() { klee_assume(address != 0); char *ptr = (char *)address; + // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: pointer-overflow result = ptr + 1; return 0; diff --git a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer_10.c b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer_10.c index cb126742..20286bcc 100644 --- a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer_10.c +++ b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_nonnull_pointer_10.c @@ -17,6 +17,7 @@ int main() { klee_assume(address != 0); char *ptr = (char *)address; + // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: nullptr-after-nonzero-offset result = ptr + 1; return 0; diff --git a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_null_pointer.c b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_null_pointer.c index 20286bcc..f36dca61 100644 --- a/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_null_pointer.c +++ b/test/Feature/ubsan/ubsan_pointer_overflow-applying_nonzero_offset_to_null_pointer.c @@ -3,7 +3,7 @@ // RUN: %clang %s -fsanitize=pointer-overflow -emit-llvm -g %O0opt -c -o %t.bc // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s -// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 +// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 1 // RUN: ls %t.klee-out/ | grep .ptr.err | wc -l | grep 1 #include "klee/klee.h" @@ -14,11 +14,11 @@ int main() { volatile char *result; klee_make_symbolic(&address, sizeof(address), "address"); - klee_assume(address != 0); + klee_assume(address == 0); char *ptr = (char *)address; - // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: nullptr-after-nonzero-offset + // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: nullptr-with-nonzero-offset result = ptr + 1; return 0; } diff --git a/test/Feature/ubsan/ubsan_pointer_overflow-applying_zero_offset_to_null_pointer.c b/test/Feature/ubsan/ubsan_pointer_overflow-applying_zero_offset_to_null_pointer.c index 301952b9..b39b65e2 100644 --- a/test/Feature/ubsan/ubsan_pointer_overflow-applying_zero_offset_to_null_pointer.c +++ b/test/Feature/ubsan/ubsan_pointer_overflow-applying_zero_offset_to_null_pointer.c @@ -3,7 +3,7 @@ // RUN: %clang %s -fsanitize=pointer-overflow -emit-llvm -g %O0opt -c -o %t.bc // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s -// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 2 +// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 1 // RUN: ls %t.klee-out/ | grep .ptr.err | wc -l | grep 1 #include "klee/klee.h" @@ -14,8 +14,9 @@ int main() { volatile char *result; klee_make_symbolic(&address, sizeof(address), "address"); + klee_assume(address == 0); - char *ptr = (char *)address;; + char *ptr = (char *)address; // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: nullptr-with-offset result = ptr + 0; diff --git a/test/Feature/ubsan/ubsan_return.c b/test/Feature/ubsan/ubsan_return.c deleted file mode 100644 index c2327db4..00000000 --- a/test/Feature/ubsan/ubsan_return.c +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clangxx %s -fsanitize=return -emit-llvm -g %O0opt -c -o %t.bc -// RUN: rm -rf %t.klee-out -// RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s -// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 1 -// RUN: ls %t.klee-out/ | grep .undefined_behavior.err | wc -l | grep 1 - -#include "klee/klee.h" - -int no_return() { - // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: missing-return -} - -int main() { - volatile int result = no_return(); - return 0; -} diff --git a/test/Feature/ubsan/ubsan_return.cpp b/test/Feature/ubsan/ubsan_return.cpp new file mode 100644 index 00000000..05f82098 --- /dev/null +++ b/test/Feature/ubsan/ubsan_return.cpp @@ -0,0 +1,16 @@ +// RUN: %clangxx %s -fsanitize=return -emit-llvm -g %O0opt -c -o %t.bc +// RUN: rm -rf %t.klee-out +// RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s +// RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .missing_return.err | wc -l | grep 1 + +#include "klee/klee.h" + +int no_return() { + // CHECK: runtime/Sanitizer/ubsan/ubsan_handlers.cpp:35: missing-return +} + +int main() { + volatile int result = no_return(); + return 0; +} diff --git a/test/Feature/ubsan/ubsan_unreachable.c b/test/Feature/ubsan/ubsan_unreachable.c index 76e2e909..bfc7f6ad 100644 --- a/test/Feature/ubsan/ubsan_unreachable.c +++ b/test/Feature/ubsan/ubsan_unreachable.c @@ -2,7 +2,7 @@ // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --emit-all-errors --ubsan-runtime %t.bc 2>&1 | FileCheck %s // RUN: ls %t.klee-out/ | grep .ktest | wc -l | grep 1 -// RUN: ls %t.klee-out/ | grep .undefined_behavior.err | wc -l | grep 1 +// RUN: ls %t.klee-out/ | grep .unreachable_call.err | wc -l | grep 1 #include "klee/klee.h" -- cgit 1.4.1