mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 19:03:59 +08:00
gcov-profile/114715 - missing coverage for switch
The following avoids missing coverage for the line of a switch statement which happens when gimplification emits a BIND_EXPR wrapping the switch as that prevents us from setting locations on the containing statements via annotate_all_with_location. Instead set the location of the GIMPLE switch directly. PR gcov-profile/114715 * gimplify.cc (gimplify_switch_expr): Set the location of the GIMPLE switch. * gcc.misc-tests/gcov-24.c: New testcase.
This commit is contained in:
parent
a3281dd0f4
commit
9d573f71e8
@ -3013,6 +3013,7 @@ gimplify_switch_expr (tree *expr_p, gimple_seq *pre_p)
|
||||
|
||||
switch_stmt = gimple_build_switch (SWITCH_COND (switch_expr),
|
||||
default_case, labels);
|
||||
gimple_set_location (switch_stmt, EXPR_LOCATION (switch_expr));
|
||||
/* For the benefit of -Wimplicit-fallthrough, if switch_body_seq
|
||||
ends with a GIMPLE_LABEL holding SWITCH_BREAK_LABEL_P LABEL_DECL,
|
||||
wrap the GIMPLE_SWITCH up to that GIMPLE_LABEL into a GIMPLE_BIND,
|
||||
|
30
gcc/testsuite/gcc.misc-tests/gcov-24.c
Normal file
30
gcc/testsuite/gcc.misc-tests/gcov-24.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* { dg-options "-fprofile-arcs -ftest-coverage" } */
|
||||
/* { dg-do run { target native } } */
|
||||
|
||||
int main()
|
||||
{
|
||||
int a = 1;
|
||||
int b = 2;
|
||||
int c = -3;
|
||||
switch(a) /* count(1) */
|
||||
{
|
||||
case 1: /* count(1) */
|
||||
c = 3;
|
||||
switch(b) { /* count(1) */
|
||||
case 1: /* count(#####) */
|
||||
c = 4;
|
||||
break;
|
||||
case 2: /* count(1) */
|
||||
c = 5;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2: /* count(#####) */
|
||||
c = 6;
|
||||
break;
|
||||
default: /* count(#####) */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { run-gcov gcov-24.c } } */
|
Loading…
Reference in New Issue
Block a user