The analyzer has detected that a function body contains a label with no 'goto' statement referring to it. It might be the programmer's mistake, resulting in a jump to a wrong label somewhere in the code.
Here's a synthetic example of incorrect code:
string SomeFunc(const string &fStr) { string str; while(true) { getline(cin,str); if (str == fStr) goto retRes; else if(str == "stop") goto retRes; } retRes: return str; badRet: return "fail"; }
The function body contains the 'badRet' label, which no 'goto' statement refers to, while another label in this function, 'retRes', has an associated 'goto' statement. The programmer made a mistake and duplicated the jump to the 'retRes' label instead of the 'badRet' label.
The correct version of this code can look as follows:
string SomeFunc(const string &fStr) { string str; while(true) { getline(cin,str); if (str == fStr) goto retRes; else if(str == "stop") goto badRet; } retRes: return str; badRet: return "fail"; }
Here's another example of this error:
int DeprecatedFunc(size_t lhs, size_t rhs, bool cond) { if (cond) return lhs*3+rhs; else return lhs*2 + rhs*7; badLbl: return -1; }
For this code, the analyzer will output a low-severity-level warning as the 'badLbl' label is a leftover after some changes in the function, while all the 'goto' statements referring to it were deleted.
The analyzer won't output the warning when the function body contains a 'goto' statement referring to the label in question, this statement being commented out or excluded through the '#ifdef' directive.
You can look at examples of errors detected by the V729 diagnostic. |