Main Content

MISRA C:2012 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.

This rule comes from MISRA C™: 2012 Amendment 3.

Rationale

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

Polyspace Implementation

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

This checker reports a rule violation only if you specify the C language standard as 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 with a _Noreturn specifier but have an int32_t return type. Therefore, the functions violate the rule.

  • The function verifyID() is also declared with a _Noreturn specifier, but 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