 
                            If control reaches the closing curly brace (}) of a non-void function without evaluating a return statement, using the return value of the function call is undefined behavior. (See undefined behavior 8886.)
Noncompliant Code Example
...
MSC37-C-EX1: According to the C Standard, 5.1.2.23.34, paragraph 1 [ISO/IEC 9899:20112024], "Reaching the } that terminates the main function returns a value of 0." As a result, it is permissible for control to reach the end of the main() function without executing a return statement.
...
Using the return value from a non-void function where control reaches the end of the function without evaluating a return statement can lead to buffer overflow vulnerabilities as well as other unexpected program behaviors.
| Rule | Severity | Likelihood | Detectable | RepairableRemediation Cost | Priority | Level | 
|---|---|---|---|---|---|---|
| MSC37-C | High | Unlikely | Yes | NoLow | P9P6 | L2 | 
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Automated Detection
| Tool | Version | Checker | Description | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Astrée | 
 | return-implicit | Fully checked | ||||||||||||||||||||
| Axivion Bauhaus Suite | 
 | CertC-MSC37 | |||||||||||||||||||||
| CodeSonar | 
 | LANG.STRUCT.MRS | Missing return statement | ||||||||||||||||||||
| Coverity | 
 | MISSING_RETURN | Implemented | ||||||||||||||||||||
| Cppcheck | 
 | missingReturn | |||||||||||||||||||||
| Cppcheck Premium | 
 | missingReturn | |||||||||||||||||||||
| Helix QAC | 
 | 2888, C++C++ | 4022 DF2888 | ||||||||||||||||||||
| Klocwork | 
 | FUNCRET.GEN FUNCRET.IMPLICIT | |||||||||||||||||||||
| LDRA tool suite | 
 | 2 D, 36 S, 66 S | Fully implemented | ||||||||||||||||||||
| Parasoft C/C++test | 
 | CERT_C-MSC37-a | All exit paths from a function, except main(), with non-void return type shall have an explicit return statement with an expression | ||||||||||||||||||||
| PC-lint Plus | 
 | 533 | Fully supported | ||||||||||||||||||||
| Polyspace Bug Finder | 
 | CERT C: Rule MSC37-C | Checks for missing return statement (rule fully covered) | ||||||||||||||||||||
| PRQA QA-CRuleChecker | 
 | PRQA QA-C_v | PRQA QA-C_v | 2888 | PRQA QA-C++ | ||||||||||||||||||
| Include Page | cplusplus:PRQA QA-C++_V | cplusplus:PRQA QA-C++_V | 2888, 4022 | RuleChecker | |||||||||||||||||||
| Include Page | RuleChecker_V | RuleChecker_V | return-implicitFully checked | 
 | return-implicit | Fully checked | |||||||||||||||||
| Security Reviewer - Static Reviewer | 
 | RTOS_09 | Fully implemented | ||||||||||||||||||||
| SonarQube C/C++ Plugin | 
 | S935 | |||||||||||||||||||||
| TrustInSoft Analyzer | 
 | Body of function falls-through | Exhaustively verified. | 
Related Guidelines
Key here (explains table format and definitions)
...
Bibliography
| [ISO/IEC 9899:20112024] | 5.1.2.23.34, "Program Termination" | 
...