Main Content

MISRA C:2023 Rule 17.10

A function declared with a _Noreturn function specifier shall have void return type

Since R2024a

Description

Rule Definition

A function declared with a _Noreturn function specifier shall have void return type.

Rationale

A function declared with a _Noreturn specifier is not supposed to return to its caller and therefore must not have a return type other than void.

Polyspace Implementation

The rule checker reports a violation if a function declared with a _Noreturn specifier has a return type other than void.

This rule violation is reported only if you specify a C standard version of C11 or later for the Bug Finder analysis. For more information, see C standard version (-c-version).

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

In this example:

  • The functions checkID() and asessID() are declared _Noreturn but have int32_t return type. Therefore, the functions violate the rule.

  • The function verifyID() also declared _Noreturn has a void return type and does not violate the rule.

#include <stdint.h>

_Noreturn int32_t checkID(int32_t ID);    //Noncompliant
_Noreturn void verifyID(int32_t ID);      //Compliant

_Noreturn int32_t assessID(int32_t ID) {  //Noncompliant
    if (ID < 0) {
        abort();
    }
    return ID;
}

Check Information

Group: Functions
Category: Required
AGC Category: Required

Version History

Introduced in R2024a