C and C++


MATH.TYPE.TGMATH.ITA : Inconsistent Types of Arguments to <tgmath.h> Macro

Summary

A multi-argument type-generic macro from <tgmath.h> is used with operand arguments of different standard types.
The relevant macros are: atan2, copysign, fdim, fma, fmax, fmin, fmod, frexp, hypot, ldexp, nextafter, nexttoward, pow, remainder, remquo, scalbn, scalbln

Properties

Class Name Inconsistent Types of Arguments to <tgmath.h> Macro
Significance reliability
Mnemonic MATH.TYPE.TGMATH.ITA
Categories
MisraC2023 MisraC2023:21.23 All operand arguments to any multi-argument type-generic macros declared in <tgmath.h> shall have the same standard type
Misra2012 Misra2012:21.23 All operand arguments to any multi-argument type-generic macros declared in <tgmath.h> shall have the same standard 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="Inconsistent Types of Arguments 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>

float call_atan2(unsigned int u, int i){
    float rv = 0;
    rv += (float) atan2(u, i); /* 'Inconsistent Types of Arguments to <tgmath.h> Macro'
                                *  warning issued here: one operand argument is unsigned int
                                *  and the other is int
                                */
    rv += (float) atan2((float)u, (float)i);          /* ok: both operand arguments are float */
    return rv;
}


int call_rexp(float f){
    int i;
    (void) frexp(f, &i);                              /* ok: second parameter to frexp() is not an operand */
    return i;
}

Relevant Configuration File Parameters

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