# V3525. AUTOSAR. Function with a non-void return type should return a value from all exit paths.

This diagnostic rule is based on the software development guidelines developed by AUTOSAR (AUTomotive Open System ARchitecture).

The analyzer has detected a function with a non-void return type which doesn't return a value on all the paths of execution. According to the C++ standard, this can lead to undefined behavior.

Let's consider an example in which an undefined value is returned only occasionally:

    BOOL IsInterestingString(char *s)
    {
      if (s == NULL)
        return FALSE;
      if (strlen(s) < 4)
        return;
      return (s[0] == '#') ? TRUE : FALSE;
    }

There is a typo in the code. If a string length is less than 4 characters, the function will return an undefined value. Correct variant:

    BOOL IsInterestingString(char *s)
    {
      if (s == NULL)
        return FALSE;
      if (strlen(s) < 4)
        return FALSE;
      return (s[0] == '#') ? TRUE : FALSE;
    }

Note. The analyzer tries to identify the cases when the absence of the return value is not an error. Here's a code example, which will be considered safe:

    int Foo()
    {
      ...
      exit(10);
    }

This diagnostic is classified as:

AUTOSAR-A8.4.2