https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84572

            Bug ID: 84572
           Summary: Wrong number of execution of a line
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

Following test-case:

$ cat gcovbug.c
#include <stdio.h>
#include <stdint.h>

#define LCCG_StructAttrib RT_CC_STRUCT_ATTRIB
#define RT_CC_STRUCT_ATTRIB

typedef uint8_t  RT_TD_IEC_BOOL;

typedef int8_t   RT_TD_IEC_SINT;
typedef int16_t  RT_TD_IEC_INT;
typedef int32_t  RT_TD_IEC_DINT;
typedef int64_t  RT_TD_IEC_LINT;

typedef RT_TD_IEC_BOOL      LC_TD_BOOL;

typedef RT_TD_IEC_SINT      LC_TD_SINT;
typedef RT_TD_IEC_INT       LC_TD_INT;
typedef RT_TD_IEC_DINT      LC_TD_DINT;
typedef RT_TD_IEC_LINT      LC_TD_LINT;

/*                            Typedefs                         */
typedef struct _LC_TD_FunctionBlock_COVERAGE
{
  LC_TD_INT LC_VD_INPUT_VAR;
  LC_TD_BOOL LC_VD_ENO;
  LC_TD_INT LC_VD_X;
  LC_TD_INT LC_VD_Y;
} LCCG_StructAttrib LC_TD_FunctionBlock_COVERAGE;

void  lcfu___COVERAGE(LC_TD_FunctionBlock_COVERAGE* LC_this);

int main(void)
{
  LC_TD_FunctionBlock_COVERAGE test;
  test.LC_VD_INPUT_VAR = 2;
  test.LC_VD_ENO = 0;
  test.LC_VD_X = 0;
  test.LC_VD_Y = 0;
  lcfu___COVERAGE(&test);

  return 0;
}

void  lcfu___COVERAGE(LC_TD_FunctionBlock_COVERAGE* LC_this)
{
  {
    LC_TD_DINT caseSelector;
    caseSelector = LC_this->LC_VD_INPUT_VAR;

    if
((caseSelector==(LC_TD_DINT)1L)||(caseSelector==(LC_TD_DINT)2L)||((caseSelector>=(LC_TD_DINT)33L)
&& (caseSelector<=(LC_TD_DINT)44L)))
    {
      LC_this->LC_VD_X = (LC_TD_INT)3;
      if ((LC_TD_BOOL)(LC_this->LC_VD_INPUT_VAR == (LC_TD_INT)2))
      {
        LC_this->LC_VD_Y = (LC_TD_INT)666;
      }
    }
    else
    {
      LC_this->LC_VD_X = (LC_TD_INT)4;
    }
  }
}

has following coverage:

        1:   44:void  lcfu___COVERAGE(LC_TD_FunctionBlock_COVERAGE* LC_this)
        -:   45:{
        -:   46:  {
        -:   47:    LC_TD_DINT caseSelector;
        1:   48:    caseSelector = LC_this->LC_VD_INPUT_VAR;
        -:   49:    
       1*:   50:    if
((caseSelector==(LC_TD_DINT)1L)||(caseSelector==(LC_TD_DINT)2L)||((caseSelector>=(LC_TD_DINT)33L)
&& (caseSelector<=(LC_TD_DINT)44L)))
        -:   51:    {
        1:   52:      LC_this->LC_VD_X = (LC_TD_INT)3;
        2:   53:      if ((LC_TD_BOOL)(LC_this->LC_VD_INPUT_VAR ==
(LC_TD_INT)2))
        -:   54:      {
        1:   55:        LC_this->LC_VD_Y = (LC_TD_INT)666;
        -:   56:      }
        -:   57:    }
        -:   58:    else
        -:   59:    {
    #####:   60:      LC_this->LC_VD_X = (LC_TD_INT)4;
        -:   61:    }
        -:   62:  }

Reply via email to