summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/gcov/gcov-4.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/gcov/gcov-4.C')
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov-4.C41
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-4.C b/gcc/testsuite/g++.dg/gcov/gcov-4.C
new file mode 100644
index 000000000..2f83ff1be
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gcov/gcov-4.C
@@ -0,0 +1,41 @@
+/* Check that execution counts and branch probabilities for various C
+ constructs are reported correctly by gcov. */
+
+#include <stdio.h>
+
+/* { dg-options "-fprofile-arcs -ftest-coverage -fno-exceptions" } */
+/* { dg-do run { target native } } */
+
+class foo {
+public:
+ foo() { printf("foo()\n"); };
+ ~foo() { printf("~foo()\n"); };
+ void method(void) { printf("method()\n"); };
+};
+
+int func(int i, int j) __attribute__((noinline));
+
+int func(int i, int j){
+ if (j) {
+ printf("unreachable\n");
+ return 3;
+ }
+
+ foo f;
+
+ if (i == 1) {
+ f.method();
+ f.method();
+ } else {
+ f.method();
+ printf("unreachable\n");
+ return 2; /* count(#####) */
+ }
+ f.method();
+ return 0;
+}
+
+int main() {
+ return func(1, 0);
+}
+/* { dg-final { run-gcov gcov-4.C } } */