C and C++


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

要旨

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.

プロパティ

クラス名 Inappropriate Argument to <tgmath.h> Macro
日本語クラス名 Inappropriate Argument to <tgmath.h> Macro
クラス分類 信頼性 (reliability)
ニーモニック LANG.TYPE.IARGT.TGMATH
カテゴリー
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
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Inappropriate Argument to <tgmath.h> Macro"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#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;
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。