diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/gcov/gcov-5.C')
-rw-r--r-- | gcc/testsuite/g++.dg/gcov/gcov-5.C | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-5.C b/gcc/testsuite/g++.dg/gcov/gcov-5.C new file mode 100644 index 000000000..9ada41802 --- /dev/null +++ b/gcc/testsuite/g++.dg/gcov/gcov-5.C @@ -0,0 +1,50 @@ +/* Check that execution counts for template functions + are reported correctly by gcov. */ + +#include <stdio.h> +#include <stdlib.h> + +/* { dg-options "-fprofile-arcs -ftest-coverage -fno-inline" } */ +/* { dg-do run { target native } } */ + +class A { + int count; + public: + A(int c) { count = c; } + void func(void) { printf("func\n"); } + bool done(void) { + return (count == 0) ? true : (count-- != 0); + } + void run(void) { abort(); } +}; + +//typedef A T; +template<class T> +void WithoutBrace(T *a) { + while (!a->done()) + a->run(); /* count(#####) */ +} /* count(1) */ + +template<class T> +void WithBrace(T *a) +{ + while (!a->done()) + { + a->run(); /* count(#####) */ + } +} /* count(1) */ + +A *func(A *a) +{ + WithoutBrace(a); + WithBrace(a); + return a; +} + +int main() { + A a(0); + func(&a); + return 0; +} + +/* { dg-final { run-gcov gcov-5.C } } */ |