https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85332
Drea Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|REOPENED |RESOLVED
--- Comment #5 from Drea Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Anonymous from comment #4)
> This bug still reproduces on current GCC trunk. Re-tested with gcc 17.0.0
> (experimental, 2026-11-01); also reproduced on gcc 13.1.0 and 11.4.0.
Please report a new bug report.
>
> Test case (small.c):
>
> #include <stdlib.h>
> int doit(int sel, int n, void *p)
> {
> int * const p0 = p;
>
> switch (sel)
> {
> case 0:
> do {*p0 += *p0;} while (--n);
> return *p0 == 0;
>
> default:
> abort ();
> }
> }
>
> int main()
> {
> int v0;
> v0 = 1; doit(0, 3, &v0);
> exit (0);
> }
>
> $ gcc -w --coverage small.c && ./a.out && gcov small.c
>
> Current output:
>
> 1: 2:int doit(int sel, int n, void *p)
> 1: 4: int * const p0 = p;
> 1: 6: switch (sel)
> 3: 8: case 0:
> 3: 9: do {*p0 += *p0;} while (--n);
> 1: 10: return *p0 == 0;
>
> Line 8 ("case 0:") is still marked with the wrong count (3), while the case
> label is entered only once from the switch dispatch (the do-while body
> runs 3
> times, but the label itself executes once). This is the same symptom as the
> original report (the wrong count was 2 back then, now it is 3). Could this
> be
> reopened and re-examined?