From: Janis Johnson Date: Fri, 7 Sep 2001 16:42:54 +0000 (+0000) Subject: Test gcov output for functions that use longjmp. X-Git-Tag: prereleases/libstdc++-3.0.95~2208 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08dc0e10f4c6528bdb8207230edbbc5e8e2fce2f;p=thirdparty%2Fgcc.git Test gcov output for functions that use longjmp. From-SVN: r45468 --- 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 000000000000..e0ed7a3d3c89 --- /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 } } */