From 08dc0e10f4c6528bdb8207230edbbc5e8e2fce2f Mon Sep 17 00:00:00 2001 From: Janis Johnson Date: Fri, 7 Sep 2001 16:42:54 +0000 Subject: Test gcov output for functions that use longjmp. From-SVN: r45468 --- gcc/testsuite/gcc.misc-tests/gcov-7.c | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-7.c diff --git a/gcc/testsuite/gcc.misc-tests/gcov-7.c b/gcc/testsuite/gcc.misc-tests/gcov-7.c new file mode 100644 index 0000000..e0ed7a3 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-7.c @@ -0,0 +1,84 @@ +/* Check that gcov correctly reports line counts, branch percentages, + * and call return percentages for functions that call longjmp. */ + +/* { dg-options "-fprofile-arcs -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +#include + +jmp_buf env; +int val; +int longjmp_taken; +int bar_enter, bar_exit; +int foo_enter, foo_exit; + +void bar (int i) +{ + bar_enter++; /* count(3) */ + /* branch(67) */ + if (i == 0) { + /* branch(end) */ + longjmp_taken++; /* count(1) */ + longjmp (env, 1); + } + val += i+1; + bar_exit++; /* count(2) */ +} + +void foo (int i) +{ + foo_enter++; /* count(3) */ + /* branch(67) */ + if (i == 1) { + /* branch(end) */ + longjmp_taken++; /* count(1) */ + longjmp (env, 2); + } + /* returns(50) */ + bar (i); /* count(2) */ + /* returns(100) */ + bar (7); /* count(1) */ + /* returns(end) */ + val += 16; + foo_exit++; /* count(1) */ +} + +int +passed () +{ + return (val == 31 && + longjmp_taken == 2 && + foo_enter == 3 && + foo_exit == 1 && + bar_enter == 3 && + bar_exit == 2); + +} + +void +leave (int i) +{ + if (i == 0) { + abort (); + } + exit (0); +} + +int +main() +{ + int retval; + + /* branch(33) */ + if ((retval = setjmp (env))) { + /* branch(end) */ + val += retval; /* count(2) */ + } + /* returns(33) */ + foo (val); /* count(3) */ + /* returns(0) */ + leave (passed()); /* count(1) */ + /* returns(end) */ +} + +/* { dg-final { run-gcov -b gcov-7.c } } */ -- cgit v1.1