CertC++-MSC53ΒΆ

Do not return from a function declared [[noreturn]]

Required inputs: IR

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 f is called where f was previously declared with the noreturn attribute and f eventually 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.

#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.

#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 Remediation Cost Priority Level
MSC53-CPP Medium Unlikely Low P2 L3
Bibliography
[ ISO/IEC 14882-2014] Subclause 7.6.3, " noreturn Attribute"
Excerpt from SEI CERT C++ Coding Standard [https://cmu-sei.github.io/secure-coding-standards/sei-cert-cpp-coding-standard/rules/miscellaneous-msc/msc53-cpp], Copyright (C) 1995-2026 Carnegie Mellon University. See section 9.4. "3rd-Party Licenses" in the documentation for full details.

Possible Messages

Key

Text

Severity

Disabled

noreturn_violation

Do not return from a noreturn function.

None

False

Options