gcov-7.c

来自「用于进行gcc测试」· C语言 代码 · 共 88 行

C
88
字号
/* 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>extern void abort (void);extern void exit (int);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) */}intpassed (){  return (val == 31 &&          longjmp_taken == 2 &&	  foo_enter == 3 &&	  foo_exit == 1 &&	  bar_enter == 3 &&	  bar_exit == 2);	}voidleave (int i){  if (i == 0) {      abort ();    }  exit (0);}intmain(){  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 calls branches { -b gcov-7.c } } } */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?