# V729. Function body contains the 'X' label that is not used by any 'goto' statements.

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.