C and C++


LANG.STRUCT.GLABEL : 異なるブロック内のラベルへジャンプするgoto文

要旨

goto 文が参照するラベルが含まれるブロックは、 その goto 文を含みません。

このクラスは goto 文の使用 の部分集合となります。

プロパティ

クラス名 Label Not In Enclosing Block
日本語クラス名 異なるブロック内のラベルへジャンプするgoto文
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.GLABEL
カテゴリー
MisraC2023 MisraC2023:15.3 Any label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statement
Misra2012 Misra2012:15.3 Any label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statement
Misra2004 Misra2004:14.4 The goto statement shall not be used
AUTOSARC++14 AUTOSARC++14:M6-6-1 Any label referenced by a goto statement shall be declared in the same block, or in a block enclosing the goto statement.
MisraC++2008 MisraC++2008:6-6-1 Any label referenced by a goto statement shall be declared in the same block, or in a block enclosing the goto statement.
MisraC++2023 MisraC++2023:9.6.2 A goto statement shall reference a label in a surrounding block
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Label Not In Enclosing Block"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

int lang_struct_glabel(int i){
    int a = 1;
    if (i < 10) { 
        goto lA;   /* 'Label Not in Enclosing Block' warning issued here. */
    }
    if (i < 20){
        lA: a= 5;
    }
    return a;
}

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

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