C and C++


LANG.TYPE.IARGT.TGMATH : Inappropriate Argument to <tgmath.h> Macro

Summary

A type-generic macro from <tgmath.h> is used with an operand argument of inappropriate essential type.

This warning class utilizes the notion of essential type category as described in MISRA C:2012 Guidelines for the use of the C language in critical systems.

Properties

Class Name Inappropriate Argument to <tgmath.h> Macro
Significance reliability
Mnemonic LANG.TYPE.IARGT.TGMATH
Categories
MisraC2023 MisraC2023:21.22 All operand arguments to any type-generic macros declared in <tgmath.h> shall have an appropriate essential type
Misra2012 Misra2012:21.22 All operand arguments to any type-generic macros declared in <tgmath.h> shall have an appropriate essential type
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Inappropriate Argument to <tgmath.h> Macro"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <tgmath.h>

typedef enum {red, orange, yellow} color_t;

double call_sqrt(char ch, double d, int i, unsigned int u, color_t col){
    if ( ch<0 || d<0 || i<0 ){return -1;}
    double rv = 0;
    rv += sqrt(ch);  /* 'Inappropriate Argument to <tgmath.h> Macro' warning issued here
                      * - type is essentially character
                      */
    rv += sqrt(col); /* 'Inappropriate Argument to <tgmath.h> Macro' warning issued here
                      * - type is essentially enum
                      */
    rv += sqrt(i);                      /* ok: type is essentially signed */
    rv += sqrt(u);                      /* ok: type is essentially unsigned */
    rv += sqrt(d);                      /* ok: type is essentially real floating */
    return rv;
}

Relevant Configuration File Parameters

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