メインコンテンツ

AUTOSAR ランナブルの実装の無効な結果

戻り値または出力引数が AUTOSAR 仕様に違反している

説明

このチェックでは、AUTOSAR ランナブルを実装する関数が評価されます。このチェックは、実行時にランナブルからの出力引数と戻り値が AUTOSAR 仕様に違反している可能性があるかどうかを判別します。

このチェックが有効になるのは、Polyspace® ユーザー インターフェイスで、または polyspace-autosar コマンドを使用して、AUTOSAR ARXML 仕様に基づく Code Prover 解析を実行する場合のみです。詳細については、AUTOSAR コードに対する Polyspace の実行を参照してください。

このチェックの診断

[結果の詳細] ペインの情報を使用して、戻り値または引数が AUTOSAR XML 仕様のデータ制約に違反しているかどうか、NULL 値になる可能性があるかどうかを判断します。明確なエラーを示す ! アイコンまたは潜在的なエラーを示す ? アイコンを確認します。

出力引数および戻り値ごとに、チェックでは以下の違反を調べます。

  • データ制約違反:

    このランナブル foo の実装では、アプリケーション エラーを表す戻り値に、有限の値セットをもつ列挙データ型が含まれるとします。解析では、実行時に戻り値がそのセット以外の値を取得する可能性があるかどうかを確認します。

    iOperations_ApplicationError foo(
        Rte_Instance const self,
        app_Array_2_n320to320ConstRef aInput,
        app_Array_2_n320to320Ref aOutput,
        app_Enum001Ref aOut2) {
    ...
    }
    チェックでは、以下のようなメッセージが表示される可能性があります。このメッセージは、引数の値 (この場合は値 43) が制約範囲から外れていることを示しています。

    一般的に、解析では、ランナブルの各出力引数と戻り値が、それぞれの AUTOSAR データ型で許容された制約範囲内にあるかどうかを検証します。ARXML ファイルのデータ制約を参照することで、AUTOSAR データ型の値を制限します。

  • NULL または割り当てられていないポインター:

    このランナブル foo の実装では、最初の出力引数 aOutput がポインターであるとします。解析では、このポインターが非 NULL であるかどうか、ランナブルから返された時点で可能性のあるすべての実行パスに対してこのポインターが割り当てられているかどうかをチェックします。

    iOperations_ApplicationError foo(
        Rte_Instance const self,
        app_Array_2_n320to320ConstRef aInput,
        app_Array_2_n320to320Ref aOutput,
        app_Enum001Ref aOut2) {
    ...
    }
    チェックでは、以下のようなメッセージが表示される可能性があります。

    一般的に、解析では、ランナブルからのポインター出力引数が非 NULL であるかどうか、ランナブルから返された時点でこの出力引数が割り当てられているかどうかを検証します。

    解析では、既定で、ランナブルへのポインター引数と Rte_ 関数から返されるポインターは NULL ではないと仮定します。この仮定を変更する場合は、polyspace-autosar コマンドのオプション -U を使用してマクロ RTE_PTR2USERCODE_SAFE の定義を解除します。

    保守的な仮定を使用した AUTOSAR コードに対する Polyspace の実行を参照してください。

このチェックは、ランナブルからの戻り値を最初に考慮し、次に出力引数を考慮します。ランナブルからの戻り値がエラーを示している場合、チェックではエラーのある実行パスの出力引数を確認しません。

たとえば、この例では、出力引数 aOut2 が NULL ではない場合のみ、戻り値が RTE_E_OK になります。このチェックでは、(戻り値が RTE_E_OK ではない) 他の実行パスは考慮されません。したがって、aOut2 は NULL にならないと判断されます。

// Runnable implementation
iOperations_ApplicationError foo(
    Rte_Instance const self,
    app_Array_2_n320to320ConstRef aInput,
    app_Array_2_n320to320Ref aOutput,
        app_Enum001Ref aOut2)
{
    iOperations_ApplicationError rc = E_NOT_OK;


    if (aOut2!=NULL_PTR)
    {
        // set invalid value will trigger STD_LIB RED in prove-runnable wrapper
        *aOut2 = 4;
        rc = RTE_E_OK;
    }
    return rc;
}

こうした動作になる理由は次のとおりです。ランナブルからの戻り値が特定の実行パスでエラー ステータスを示している場合、エラー ステータスを評価して是正措置を取ることができます。これらのパスに対して実行時チェックは必要ありません。特定の状況では、エラー ステータスに関する詳しい情報を提供する 1 つ以上の出力引数を使用する場合もあります。ランナブルの実行が完了したときに、これらの出力引数が NULL になりうるかどうかのチェックが必要な場合があります。この要件がある場合は、テクニカル サポートにお問い合わせください。

チェックでは、以下の状況にはフラグが設定されません。

  • ランナブル本体内に出力引数がまったく記述されていない (または、特定の実行パスに記述されていない)。

  • ランナブル本体内で戻り値が初期化されていない (または、特定の実行パスで初期化されていない)。

解析では、戻り値が初期化されている場合か、出力引数が記述されている場合のみ、データ制約との一致をチェックします。

結果情報

グループ: Other
言語: C
頭字語: AUTOSAR_IMPL

バージョン履歴

R2018a で導入