|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] misra: tailor the definition of Rule 12.2 to C standard types
On Wed, 16 Jul 2025, Dmytro Prokopchuk1 wrote:
> From: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
>
> The definition of MISRA C Rule 12.2 ("The right hand operand of a shift
> operator shall lie in the range zero to one less than the width in bits
> of the essential type of the left hand operand") is concerned with the
> essential type of an expression, while the C Undefined Behaviour is
> related to C standard types, which may be wider but not narrower than
> the MISRA C essential type. For this reason, it is safe to consider the
> C standard type, rather than the essential type when checking the rule.
>
> To avoid regressions, tag the rule as clean and add it to the
> monitored set.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> automation/eclair_analysis/ECLAIR/deviations.ecl | 8 ++++++++
> automation/eclair_analysis/ECLAIR/monitored.ecl | 1 +
> automation/eclair_analysis/ECLAIR/tagging.ecl | 1 +
> docs/misra/deviations.rst | 8 ++++++++
> 4 files changed, 18 insertions(+)
>
> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl
> b/automation/eclair_analysis/ECLAIR/deviations.ecl
> index 8504e850c1..483507e7b9 100644
> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> @@ -413,6 +413,14 @@ write or not"
> }
> -doc_end
>
> +#
> +# Series 12
> +#
> +
> +-doc_begin="Consider the C standard type instead of the essential type for
> the purposes of determining the width in bits of the operand."
> +-config=MC3A2.R12.2,out_of_bounds=negative_or_too_big_for_type
> +-doc_end
> +
> #
> # Series 13
> #
> diff --git a/automation/eclair_analysis/ECLAIR/monitored.ecl
> b/automation/eclair_analysis/ECLAIR/monitored.ecl
> index e2ad224d79..00bff9edbe 100644
> --- a/automation/eclair_analysis/ECLAIR/monitored.ecl
> +++ b/automation/eclair_analysis/ECLAIR/monitored.ecl
> @@ -48,6 +48,7 @@
> -enable=MC3A2.R11.7
> -enable=MC3A2.R11.8
> -enable=MC3A2.R11.9
> +-enable=MC3A2.R12.2
> -enable=MC3A2.R12.5
> -enable=MC3A2.R13.1
> -enable=MC3A2.R13.2
> diff --git a/automation/eclair_analysis/ECLAIR/tagging.ecl
> b/automation/eclair_analysis/ECLAIR/tagging.ecl
> index f39beced9b..879485b680 100644
> --- a/automation/eclair_analysis/ECLAIR/tagging.ecl
> +++ b/automation/eclair_analysis/ECLAIR/tagging.ecl
> @@ -63,6 +63,7 @@ MC3A2.R11.2||
> MC3A2.R11.6||
> MC3A2.R11.7||
> MC3A2.R11.9||
> +MC3A2.R12.2||
> MC3A2.R12.5||
> MC3A2.R13.2||
> MC3A2.R13.6||
> diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
> index 620e97f0bd..e78179fcb8 100644
> --- a/docs/misra/deviations.rst
> +++ b/docs/misra/deviations.rst
> @@ -386,6 +386,14 @@ Deviations related to MISRA C:2012 Rules:
> integers for this purpose is allowed.
> - Tagged as `deliberate` for ECLAIR.
>
> + * - R12.2
> + - The width in bits of the C standard type is considered instead of
> + the width of the essential type of the left-hand operand of a shift
> + operator. This is safe because the occurrence of Undefined Behavior
> + only relates to the width of the C standard type, which is possibly
> + wider than its essential type.
> + - Project-wide deviation.
> +
> * - R13.5
> - All developers and reviewers can be safely assumed to be well aware of
> the short-circuit evaluation strategy for logical operators.
> --
> 2.43.0
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |