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: }