diff options
author | Xinliang David Li <davidxl@google.com> | 2016-01-20 00:11:36 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2016-01-20 00:11:36 +0000 |
commit | 9fa74a0cb00bd3d057b3ef468d93d4cd0c9d6d80 (patch) | |
tree | d7c77d9a4941c523d312797503a6edd115d98f80 | |
parent | 583bf74a684cb6c6c3138272f033788038505509 (diff) |
[coverage] Add a test case to cover coverage testing with comdat
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@258255 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/profile/Inputs/instrprof-comdat-1.cpp | 17 | ||||
-rw-r--r-- | test/profile/Inputs/instrprof-comdat-2.cpp | 12 | ||||
-rw-r--r-- | test/profile/Inputs/instrprof-comdat.h | 19 | ||||
-rw-r--r-- | test/profile/instrprof-comdat.test | 6 |
4 files changed, 54 insertions, 0 deletions
diff --git a/test/profile/Inputs/instrprof-comdat-1.cpp b/test/profile/Inputs/instrprof-comdat-1.cpp new file mode 100644 index 000000000..bd574ec3f --- /dev/null +++ b/test/profile/Inputs/instrprof-comdat-1.cpp @@ -0,0 +1,17 @@ +#include "instrprof-comdat.h" +int g; +extern int bar(int); + +int main() { + + FOO<int> Foo; + + int Res = Foo.DoIt(10); + + if (Res > 10) + g = bar(10); + else + g = bar(1) + bar(2); + return 0; +} + diff --git a/test/profile/Inputs/instrprof-comdat-2.cpp b/test/profile/Inputs/instrprof-comdat-2.cpp new file mode 100644 index 000000000..ce68d54e8 --- /dev/null +++ b/test/profile/Inputs/instrprof-comdat-2.cpp @@ -0,0 +1,12 @@ +#include "instrprof-comdat.h" + +int bar(int I) { + + FOO<long> Foo; + FOO<int> Foo2; + + if (I > 5) + return (int)Foo.DoIt(10); + else + return (int)Foo2.DoIt(I); +} diff --git a/test/profile/Inputs/instrprof-comdat.h b/test/profile/Inputs/instrprof-comdat.h new file mode 100644 index 000000000..e1227167c --- /dev/null +++ b/test/profile/Inputs/instrprof-comdat.h @@ -0,0 +1,19 @@ +template <class T> class FOO { +public: + FOO() : t(0) {} + + T DoIt(T ti); + +private: + T t; +}; + +template <class T> T FOO<T>::DoIt(T ti) { // HEADER: 2| [[@LINE]]|template + for (T I = 0; I < ti; I++) { // HEADER: 22| [[@LINE]]| for (T + t += I; // HEADER: 20| [[@LINE]]| t += I; + if (I > ti / 2) // HEADER: 20| [[@LINE]]| if (I > ti + t -= 1; // HEADER: 8| [[@LINE]]| t -= 1; + } // HEADER: 10| [[@LINE]]| } + // HEADER: 1| [[@LINE]]| + return t; // HEADER: 1| [[@LINE]]| return t; +} diff --git a/test/profile/instrprof-comdat.test b/test/profile/instrprof-comdat.test new file mode 100644 index 000000000..ea20da557 --- /dev/null +++ b/test/profile/instrprof-comdat.test @@ -0,0 +1,6 @@ +RUN: mkdir -p %t.d +RUN: %clang_profgen -xc++ -o %t.d/comdat -fcoverage-mapping %S/Inputs/instrprof-comdat-1.cpp %S/Inputs/instrprof-comdat-2.cpp +RUN: LLVM_PROFILE_FILE=%t-comdat.profraw %t.d/comdat +RUN: llvm-profdata merge -o %t.d/comdat.prof %t-comdat.profraw +RUN: llvm-cov show --filename-equivalence --instr-profile=%t.d/comdat.prof %t.d/comdat | FileCheck --check-prefix=HEADER %S/Inputs/instrprof-comdat.h + |