C and C++


LANG.TYPE.OWID : 他のオペランドにより暗黙拡張される複合式

要旨

(C90 および C99 標準に記述されている) 「通常の算術型変換」を行う演算子において

このチェックは以下で適用されます。

このワーニングクラスは、クリティカルシステム向けのC言語ガイドラインMISRA C:2012実質的な型および 複合式に記載されている概念に基づいています。

プロパティ

クラス名 Expression Value Widened by Other Operand
日本語クラス名 他のオペランドにより暗黙拡張される複合式
クラス分類 スタイル (style)
ニーモニック LANG.TYPE.OWID
カテゴリー
MisraC2023 MisraC2023:10.7 If a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential type
Misra2012 Misra2012:10.7 If a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand shall not have wider essential type
Misra2004 Misra2004:10.1 The value of an expression of integer type shall not be implicitly converted to a different underlying type if: (a) it is not a conversion to a wider integer type of the same signedness, or (b) the expression is complex, or (c) the expression is not constant and is a function argument, or (d) the expression is not constant and is a return expression
  Misra2004:10.2 The value of an expression of floating type shall not be implicitly converted to a different type if: (a) it is not a conversion to a wider floating type, or (b) the expression is complex, or (c) the expression is a function argument, or (d) the expression is a return expression
AUTOSARC++14 AUTOSARC++14:M5-0-3 A cvalue expression shall not be implicitly converted to a different underlying type.
  AUTOSARC++14:M5-0-5 There shall be no implicit floating-integral conversions.
MisraC++2008 MisraC++2008:5-0-3 A cvalue expression shall not be implicitly converted to a different underlying type.
  MisraC++2008:5-0-5 There shall be no implicit floating-integral conversions.
CWE CWE:704 Incorrect Type Conversion or Cast
CERT-C CERT-C:INT18-C Evaluate integer expressions in a larger size before comparing or assigning to that size
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Expression Value Widened by Other Operand"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

void use_longs(long long1, long long2, long long3);

void TYPE_OWID(short sa, long la){
    long l1;
    long l2;
    long l3;

    l1 = sa + la;                             /* neither operand is a composite expression */

    l2 = (2*sa) / la; /* 'Expression Value Widened by Other Operand' warning issued here */

    l3 = (2*la) / sa;                         /* type of sa is not wider than  type of (2*la) */

    use_longs(l1, l2, l3);
}

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

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