mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-18 20:31:00 +08:00
Test gcov output for functions that use longjmp.
From-SVN: r45468
This commit is contained in:
parent
518c36b65e
commit
08dc0e10f4
84
gcc/testsuite/gcc.misc-tests/gcov-7.c
Normal file
84
gcc/testsuite/gcc.misc-tests/gcov-7.c
Normal file
@ -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 <setjmp.h>
|
||||
|
||||
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 } } */
|
Loading…
x
Reference in New Issue
Block a user