sancov test suite

Differential Revision: http://reviews.llvm.org/D14589

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252933 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Mike Aizatsky 2015-11-12 19:34:21 +00:00
parent 8e6493db91
commit 91e7b1246c
9 changed files with 61 additions and 10 deletions

View File

@ -19,11 +19,12 @@ endif()
# Set the depends list as a variable so that it can grow conditionally.
# NOTE: Sync the substitutions in test/lit.cfg when adding to this list.
set(LLVM_TEST_DEPENDS
llvm-config
UnitTests
BugpointPasses
FileCheck
LLVMHello
UnitTests
bugpoint
count
llc
lli
lli-child-target
@ -31,6 +32,7 @@ set(LLVM_TEST_DEPENDS
llvm-as
llvm-bcanalyzer
llvm-c-test
llvm-config
llvm-cov
llvm-cxxdump
llvm-diff
@ -54,14 +56,13 @@ set(LLVM_TEST_DEPENDS
llvm-split
llvm-symbolizer
llvm-tblgen
opt
FileCheck
count
not
obj2yaml
opt
sancov
verify-uselistorder
yaml-bench
yaml2obj
obj2yaml
verify-uselistorder
)
# If Intel JIT events are supported, depend on a tool that tests the listener.

View File

@ -0,0 +1,5 @@
#include <stdio.h>
#include <string>
__attribute__((noinline))
void foo() { printf("foo\n"); }

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,19 @@
// compile & generate coverage data using:
// clang++ -g -o test-linux_x86_64 -fsanitize=address -fsanitize-coverage=edge *.cpp
// ASAN_OPTIONS="coverage=1" ./test-linux_x86_64 && mv test-linux_x86_64.*.sancov test-linux_x86_64.sancov
// ASAN_OPTIONS="coverage=1" ./test-linux_x86_64 1 && mv test-linux_x86_64.*.sancov test-linux_x86_64-1.sancov
#include <stdio.h>
#include <string>
void foo();
__attribute__((noinline))
std::string bar(std::string str) { printf("bar\n"); return str; }
int main(int argc, char **argv) {
if (argc == 2)
foo();
bar("str");
printf("main\n");
}

View File

@ -0,0 +1,13 @@
RUN: sancov -obj %p/Inputs/test-linux_x86_64 -covered_functions %p/Inputs/test-linux_x86_64.sancov | FileCheck %s
RUN: sancov -obj %p/Inputs/test-linux_x86_64 -covered_functions %p/Inputs/test-linux_x86_64-1.sancov | FileCheck --check-prefix=MULTIPLE_FILES %s
RUN: sancov -obj %p/Inputs/test-linux_x86_64 -demangle=0 -covered_functions %p/Inputs/test-linux_x86_64.sancov | FileCheck --check-prefix=NO_DEMANGLE %s
CHECK: Inputs/test.cpp:12 bar(std::string)
CHECK: Inputs/test.cpp:14 main
MULTIPLE_FILES: {{^}}foo.cpp:5 foo()
MULTIPLE_FILES: {{^}}test.cpp:12 bar(std::string)
MULTIPLE_FILES: {{^}}test.cpp:14 main
NO_DEMANGLE: Inputs/test.cpp:12 _Z3barSs
NO_DEMANGLE: Inputs/test.cpp:14 main

View File

@ -0,0 +1,10 @@
RUN: sancov -obj %p/Inputs/test-linux_x86_64 -print %p/Inputs/test-linux_x86_64.sancov | FileCheck %s
CHECK: 0x4db18b
CHECK: 0x4db2d2
CHECK: 0x4db322
CHECK: 0x4db376
CHECK: 0x4db3bd
CHECK: 0x4db3f4
CHECK: 0x4db427
CHECK: 0x4db45a

View File

@ -178,7 +178,7 @@ class CoverageData {
return;
symbolize::LLVMSymbolizer::Options SymbolizerOptions;
SymbolizerOptions.Demangle = ClDemangle;
symbolize::LLVMSymbolizer Symbolizer;
symbolize::LLVMSymbolizer Symbolizer(SymbolizerOptions);
struct FileLoc {
std::string FileName;
@ -226,8 +226,11 @@ class CoverageData {
if (!ProcessedFunctions.insert(FunctionName).second)
continue;
out << FileName.substr(FilePrefix.size()) << ":" << Line << " "
<< FunctionName << "\n";
// Don't strip prefix if we only have a single file.
if (FileName.size() > FilePrefix.size())
FileName = FileName.substr(FilePrefix.size());
out << FileName << ":" << Line << " " << FunctionName << "\n";
}
}
}