forked from OSchip/llvm-project
[ubsan] partially enable -fsanitize-coverage=N with ubsan. It will work as usual in most cases but will not dump coverage on error with -fno-sanitize-recover (that'll be a separate fix)
llvm-svn: 225234
This commit is contained in:
parent
cb0799c16d
commit
fb42a5a292
|
@ -43,6 +43,7 @@ void __ubsan::InitIfNecessary() {
|
|||
// Initialize UBSan-specific flags.
|
||||
InitializeFlags();
|
||||
SuppressionContext::InitIfNecessary();
|
||||
InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);
|
||||
ubsan_inited = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
// Test various levels of coverage
|
||||
//
|
||||
// RUN: mkdir -p %T/coverage-levels
|
||||
// RUN: OPT=coverage=1:verbosity=1:coverage_dir=%T/coverage-levels
|
||||
// RUN: %clangxx -fsanitize=shift -DGOOD_SHIFT=1 -O1 -fsanitize-coverage=1 %s -o %t
|
||||
// RUN: UBSAN_OPTIONS=$OPT ASAN_OPTIONS=$OPT %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN
|
||||
// RUN: %clangxx -fsanitize=undefined -DGOOD_SHIFT=1 -O1 -fsanitize-coverage=1 %s -o %t
|
||||
// RUN: UBSAN_OPTIONS=$OPT ASAN_OPTIONS=$OPT %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN
|
||||
|
||||
// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=1 %s -o %t
|
||||
// RUN: UBSAN_OPTIONS=$OPT ASAN_OPTIONS=$OPT %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_WARN
|
||||
// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=2 %s -o %t
|
||||
// RUN: UBSAN_OPTIONS=$OPT ASAN_OPTIONS=$OPT %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 --check-prefix=CHECK_WARN
|
||||
// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=3 %s -o %t
|
||||
// RUN: UBSAN_OPTIONS=$OPT ASAN_OPTIONS=$OPT %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3 --check-prefix=CHECK_WARN
|
||||
|
||||
volatile int sink;
|
||||
int main(int argc, char **argv) {
|
||||
int shift = argc * 32;
|
||||
#if GOOD_SHIFT
|
||||
shift = 3;
|
||||
#endif
|
||||
if ((argc << shift) == 16) // False.
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// CHECK_WARN: shift exponent 32 is too large
|
||||
// CHECK_NOWARN-NOT: ERROR
|
||||
// FIXME: Currently, coverage instrumentation kicks in after ubsan, so we get
|
||||
// more than the minimal number of instrumented blocks.
|
||||
// FIXME: Currently, ubsan with -fno-sanitize-recover and w/o asan will fail
|
||||
// to dump coverage.
|
||||
// CHECK1: 1 PCs written
|
||||
// CHECK2: 3 PCs written
|
||||
// CHECK3: 4 PCs written
|
Loading…
Reference in New Issue