MISRA C++:2023 Rule 9.6.4
Description
Rule Definition
        A function declared with the [[noreturn]] attribute shall not
          return. 1
      
Rationale
If you declare a function by using the [[noreturn]] attribute, the compiler expects that the function does not return the flow of execution. That is, if a [[noreturn]] function f() is called from main(), then the compiler expects that the flow of execution is not returned to main(). If such a function eventually returns the flow of execution, it leads to undefined behavior, which can be
        exploited to cause data integrity violations.
If a function has no return statement, then the final closing brace of a function implies an implicit return. Omitting a return statement in the function does not prevent the flow of execution from returning. A [[noreturn]] function can prohibit returning the flow of execution to the calling function by:
- Entering an infinite loop 
- Raising an exception 
- Calling another - [[noreturn]]function
Polyspace Implementation
If a function specified as [[noreturn]] returns the control flow to its caller, Polyspace® flags the [[noreturn]] function.
Troubleshooting
If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
| Group: Statements | 
| Category: Required | 
Version History
Introduced in R2024b
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
- MISRA C:2004 
- MISRA C:2012 
- MISRA C:2023 
- MISRA C++:2008 
- MISRA C++:2023 
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.