C and C++


LANG.STRUCT.RFNR : Return from noreturn

Summary

Control returns from a function or method that is declared with one of the following.

Properties

Class Name Return from noreturn
Significance security
Mnemonic LANG.STRUCT.RFNR
Categories
MisraC2023 MisraC2023:17.9 A function declared with a _Noreturn function specifier shall not return to its caller
Misra2012 Misra2012:17.9 A function declared with a _Noreturn function specifier shall not return to its caller
AUTOSARC++14 AUTOSARC++14:A7-6-1 Functions declared with the [[noreturn]] attribute shall not return.
MisraC++2023 MisraC++2023:9.6.4 A function declared with the [[noreturn]] attribute shall not return
CERT-CPP CERT-CPP:MSC53-CPP Do not return from a function declared [[noreturn]]
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Return from noreturn"

Example

#include <cstdlib>

int return_ok(int x){                                        // ok: does not have noreturn attribute
    return x;
}

[[noreturn]] int explicit_return(int x){
    return x;                             // 'Return from noreturn' warning issued here
}

int i = 0;

[[noreturn]] void implicit_return(int x){
    i += x;
}                                         // 'Return from noreturn' warning issued here
                                          // control returns from this function, even though there is no explicit return statement


[[noreturn]] void no_return(int x){                          // ok: there is no execution path on which control returns from this function
    if (x > 0){
        while (x > 0){continue;}
    }
    else if (x > -10){
        throw "Bad x value";
    }
    else {
        std::exit(0);
    }
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.