 
                            The [[noreturn]] attribute specifies that a function does not return. The C++ Standard, [dcl.attr.noreturn] paragraph 2 [ISO/IEC 14882-2014], states the following:
If a function
fis called wherefwas previously declared with thenoreturnattribute andfeventually returns, the behavior is undefined.
A function that specifies [[noreturn]] can prohibit returning by throwing an exception, entering an infinite loop, or calling another function designated with the [[noreturn]] attribute.
Noncompliant Code Example
In this noncompliant code example, if the value 0 is passed, control will flow off the end of the function, resulting in an implicit return and undefined behavior:.
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <cstdlib>
 
[[noreturn]] void f(int i) {
  if (i > 0)
    throw "Received positive input";
  else if (i < 0)
    std::exit(0);
} | 
Compliant Solution
In this compliant solution, the function does not return on any code path:.
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <cstdlib>
 
[[noreturn]] void f(int i) {
  if (i > 0)
    throw "Received positive input";
  std::exit(0);
} | 
Risk Assessment
Returning from a function marked [[noreturn]] results in undefined behavior that might be exploited to cause data-integrity violations.
| Rule | Severity | Likelihood | Detectable | 
|---|
| Repairable | Priority | Level | 
|---|
| MSC53-CPP | Medium | Unlikely | 
| Yes | No | 
| P4 | L3 | 
Automated Detection
| Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée | 
 | invalid-noreturn | Fully checked | ||||||
| Axivion Bauhaus Suite | 
 | CertC++-MSC53 | |||||||
| Clang | 
 | -Winvalid-noreturn | |||||||
| CodeSonar | 
 | LANG.STRUCT.RFNR | Return from noreturn | ||||||
| Helix QAC | 
 | DF2886 | |||||||
| Klocwork | 
 | CERT.MSC.NORETURN_FUNC_RETURNS | |||||||
| Parasoft C/C++test | 
 | CERT_CPP-MSC53-a | Never return from functions that should not return | ||||||
| Polyspace Bug Finder | 
 | CERT C++: MSC53-CPP | Checks for [[noreturn | 
| ]]functions returning to caller (rule fully covered) | |||||||||
| PVS-Studio | 
 | V1082 | |||||||
| RuleChecker | 
 | invalid-noreturn | Fully checked | ||||||
| SonarQube C/C++ Plugin | 
 | S935 | 
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Bibliography
...
...