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?

Reply via email to