186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// Test various levels of coverage 286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// 3cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_msan -DINIT_VAR=1 -O1 -fsanitize-coverage=func %s -o %t 486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: mkdir -p %T/coverage-levels 586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: MSAN_OPTIONS=coverage=1:verbosity=1:coverage_dir=%T/coverage-levels %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_NOWARN 6cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_msan -O1 -fsanitize-coverage=func %s -o %t 786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: MSAN_OPTIONS=coverage=1:verbosity=1:coverage_dir=%T/coverage-levels not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 --check-prefix=CHECK_WARN 8cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_msan -O1 -fsanitize-coverage=bb %s -o %t 986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: MSAN_OPTIONS=coverage=1:verbosity=1:coverage_dir=%T/coverage-levels not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 --check-prefix=CHECK_WARN 10cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clangxx_msan -O1 -fsanitize-coverage=edge %s -o %t 1186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// RUN: MSAN_OPTIONS=coverage=1:verbosity=1:coverage_dir=%T/coverage-levels not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3 --check-prefix=CHECK_WARN 1286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// 1386277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesvolatile int sink; 1486277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesint main(int argc, char **argv) { 1586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines int var; 1686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#if INIT_VAR 1786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines var = 0; 1886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#endif 1986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines if (argc == 0) 2086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines sink = 0; 2186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines return *(volatile int*)&var; 2286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 2386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 2486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// CHECK_WARN: WARNING: MemorySanitizer: use-of-uninitialized-value 2586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// CHECK_NOWARN-NOT: ERROR 2686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// CHECK1: 1 PCs written 27c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// CHECK2: 1 PCs written 28c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// CHECK3: 2 PCs written 29