brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · fd019d2 Raw
49 lines · cpp
1// Test various levels of coverage2//3// UNSUPPORTED: system-windows4//5// RUN: rm -rf %t-dir && mkdir %t-dir6// RUN: %clangxx -fsanitize=shift                        -DGOOD_SHIFT=1 -O1 -fsanitize-coverage=func,trace-pc-guard  %s -o %t7// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN8// RUN: %clangxx -fsanitize=undefined                    -DGOOD_SHIFT=1 -O1 -fsanitize-coverage=func,trace-pc-guard  %s -o %t9// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN10 11// Also works without any sanitizer.12// RUN: %clangxx                                         -DGOOD_SHIFT=1 -O1 -fsanitize-coverage=func,trace-pc-guard  %s -o %t13// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN14 15// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=func,trace-pc-guard  %s -o %t16// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_WARN17// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=bb,trace-pc-guard  %s -o %t18// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 --check-prefix=CHECK_WARN19// RUN: %clangxx -fsanitize=shift -O1 -fsanitize-coverage=edge,trace-pc-guard  %s -o %t20// RUN: %env_ubsan_opts=coverage=1:verbosity=1:coverage_dir='"%t-dir"' %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3 --check-prefix=CHECK_WARN21 22// Coverage is not yet implemented in TSan or TySan.23// XFAIL: ubsan-tsan24// XFAIL: ubsan-tysan25// UNSUPPORTED: ubsan-standalone-static26// No coverage support27// UNSUPPORTED: target={{.*openbsd.*}}28 29volatile int sink;30int main(int argc, char **argv) {31  int shift = argc * 33;32#if GOOD_SHIFT33  shift = 3;34#endif35  if ((argc << shift) == 16)  // False.36    return 1;37  return 0;38}39 40// CHECK_WARN: shift exponent 33 is too large41// CHECK_NOWARN-NOT: ERROR42// FIXME: Currently, coverage instrumentation kicks in after ubsan, so we get43// more than the minimal number of instrumented blocks.44// FIXME: Currently, ubsan with -fno-sanitize-recover and w/o asan will fail45// to dump coverage.46// CHECK1:  1 PCs written47// CHECK2:  2 PCs written48// CHECK3:  2 PCs written49