08dc0e10f4
From-SVN: r45468
85 lines
1.5 KiB
C
85 lines
1.5 KiB
C
/* 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 } } */
|