Mailing List Archive

[XEN PATCH v3 5/7] automation/eclair: add deviations for Rule 20.7
These deviations deal with the following cases:
- macro arguments used directly as initializer list arguments;
- uses of the __config_enabled macro, that can't be brought
into compliance without breaking its functionality;
- exclude files that are out of scope (efi headers and cpu_idle);
- uses of alternative_{call,vcall}[0-9] macros.

The existing configuration for R20.7 is reordered so that it matches the
cases listed in its documentation comment.

Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>
---
.../eclair_analysis/ECLAIR/deviations.ecl | 25 +++++++++++++++++--
docs/misra/deviations.rst | 14 ++++++++++-
docs/misra/rules.rst | 2 +-
3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/automation/eclair_analysis/ECLAIR/deviations.ecl
index de9ba723fbc7..70756503f594 100644
--- a/automation/eclair_analysis/ECLAIR/deviations.ecl
+++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
@@ -401,12 +401,33 @@ unexpected result when the structure is given as argument to a sizeof() operator

-doc_begin="Code violating Rule 20.7 is safe when macro parameters are used: (1)
as function arguments; (2) as macro arguments; (3) as array indices; (4) as lhs
-in assignments."
+in assignments; (5) as initializers, possibly designated, in initalizer lists."
-config=MC3R1.R20.7,expansion_context=
{safe, "context(__call_expr_arg_contexts)"},
+{safe, "left_right(^[(,\\[]$,^[),\\]]$)"},
{safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(node(array_subscript_expr), subscript)))"},
{safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(operator(assign), lhs)))"},
-{safe, "left_right(^[(,\\[]$,^[),\\]]$)"}
+{safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(node(init_list_expr||designated_init_expr), init)))"}
+-doc_end
+
+-doc_begin="Violations involving the __config_enabled macros cannot be fixed without
+breaking the macro's logic; futhermore, the macro is only ever used in the context
+of the IS_ENABLED or STATIC_IF/STATIC_IF_NOT macros, so it always receives a literal
+0 or 1 as input, posing no risk to safety."
+-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(any_exp(macro(^___config_enabled$))))"}
+-doc_end
+
+-doc_begin="Violations due to the use of macros defined in files that are
+not in scope for compliance are allowed, as that is imported code."
+-file_tag+={gnu_efi_include, "^xen/include/efi/.*$"}
+-file_tag+={acpi_cpu_idle, "^xen/arch/x86/acpi/cpu_idle\\.c$"}
+-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(file(gnu_efi_include)))"}
+-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(file(acpi_cpu_idle)))"}
+-doc_end
+
+-doc_begin="To avoid compromising readability, the macros alternative_(v)?call[0-9] are allowed
+not to parenthesize their arguments."
+-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(any_exp(macro(^alternative_(v)?call[0-9]$))))"}
-doc_end

-doc_begin="Uses of variadic macros that have one of their arguments defined as
diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
index eb5ef2bd9dd6..5fdacfd420a1 100644
--- a/docs/misra/deviations.rst
+++ b/docs/misra/deviations.rst
@@ -345,7 +345,19 @@ Deviations related to MISRA C:2012 Rules:
(1) as function arguments;
(2) as macro arguments;
(3) as array indices;
- (4) as lhs in assignments.
+ (4) as lhs in assignments;
+ (5) as initializers, possibly designated, in initalizer lists.
+ - Tagged as `safe` for ECLAIR.
+
+ * - R20.7
+ - Violations due to the use of macros defined in files that are not
+ in scope for compliance are allowed, as that is imported code.
+ - Tagged as `safe` for ECLAIR.
+
+ * - R20.7
+ - To avoid compromising readability, the macros `alternative_(v)?call[0-9]`
+ are allowed not to parenthesize their arguments, as there are already
+ sanity checks in place.
- Tagged as `safe` for ECLAIR.

* - R20.12
diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst
index 1e134ccebc48..3914af08495b 100644
--- a/docs/misra/rules.rst
+++ b/docs/misra/rules.rst
@@ -560,7 +560,7 @@ maintainers if you want to suggest a change.
shall be enclosed in parentheses
- Extra parentheses are not required when macro parameters are used
as function arguments, as macro arguments, array indices, lhs in
- assignments
+ assignments or as initializers in initalizer lists.

* - `Rule 20.9 <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_20_09.c>`_
- Required
--
2.34.1
Re: [XEN PATCH v3 5/7] automation/eclair: add deviations for Rule 20.7 [ In reply to ]
On Fri, 29 Mar 2024, Nicola Vetrini wrote:
> These deviations deal with the following cases:
> - macro arguments used directly as initializer list arguments;
> - uses of the __config_enabled macro, that can't be brought
> into compliance without breaking its functionality;
> - exclude files that are out of scope (efi headers and cpu_idle);
> - uses of alternative_{call,vcall}[0-9] macros.
>
> The existing configuration for R20.7 is reordered so that it matches the
> cases listed in its documentation comment.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Re: [XEN PATCH v3 5/7] automation/eclair: add deviations for Rule 20.7 [ In reply to ]
On Fri, 29 Mar 2024, Nicola Vetrini wrote:
> These deviations deal with the following cases:
> - macro arguments used directly as initializer list arguments;
> - uses of the __config_enabled macro, that can't be brought
> into compliance without breaking its functionality;
> - exclude files that are out of scope (efi headers and cpu_idle);
> - uses of alternative_{call,vcall}[0-9] macros.
>
> The existing configuration for R20.7 is reordered so that it matches the
> cases listed in its documentation comment.
>
> Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

> ---
> .../eclair_analysis/ECLAIR/deviations.ecl | 25 +++++++++++++++++--
> docs/misra/deviations.rst | 14 ++++++++++-
> docs/misra/rules.rst | 2 +-
> 3 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/automation/eclair_analysis/ECLAIR/deviations.ecl
> index de9ba723fbc7..70756503f594 100644
> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> @@ -401,12 +401,33 @@ unexpected result when the structure is given as argument to a sizeof() operator
>
> -doc_begin="Code violating Rule 20.7 is safe when macro parameters are used: (1)
> as function arguments; (2) as macro arguments; (3) as array indices; (4) as lhs
> -in assignments."
> +in assignments; (5) as initializers, possibly designated, in initalizer lists."
> -config=MC3R1.R20.7,expansion_context=
> {safe, "context(__call_expr_arg_contexts)"},
> +{safe, "left_right(^[(,\\[]$,^[),\\]]$)"},
> {safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(node(array_subscript_expr), subscript)))"},
> {safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(operator(assign), lhs)))"},
> -{safe, "left_right(^[(,\\[]$,^[),\\]]$)"}
> +{safe, "context(skip_to(__expr_non_syntactic_contexts, stmt_child(node(init_list_expr||designated_init_expr), init)))"}
> +-doc_end
> +
> +-doc_begin="Violations involving the __config_enabled macros cannot be fixed without
> +breaking the macro's logic; futhermore, the macro is only ever used in the context
> +of the IS_ENABLED or STATIC_IF/STATIC_IF_NOT macros, so it always receives a literal
> +0 or 1 as input, posing no risk to safety."
> +-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(any_exp(macro(^___config_enabled$))))"}
> +-doc_end
> +
> +-doc_begin="Violations due to the use of macros defined in files that are
> +not in scope for compliance are allowed, as that is imported code."
> +-file_tag+={gnu_efi_include, "^xen/include/efi/.*$"}
> +-file_tag+={acpi_cpu_idle, "^xen/arch/x86/acpi/cpu_idle\\.c$"}
> +-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(file(gnu_efi_include)))"}
> +-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(file(acpi_cpu_idle)))"}
> +-doc_end
> +
> +-doc_begin="To avoid compromising readability, the macros alternative_(v)?call[0-9] are allowed
> +not to parenthesize their arguments."
> +-config=MC3R1.R20.7,reports+={safe, "any_area(any_loc(any_exp(macro(^alternative_(v)?call[0-9]$))))"}
> -doc_end
>
> -doc_begin="Uses of variadic macros that have one of their arguments defined as
> diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst
> index eb5ef2bd9dd6..5fdacfd420a1 100644
> --- a/docs/misra/deviations.rst
> +++ b/docs/misra/deviations.rst
> @@ -345,7 +345,19 @@ Deviations related to MISRA C:2012 Rules:
> (1) as function arguments;
> (2) as macro arguments;
> (3) as array indices;
> - (4) as lhs in assignments.
> + (4) as lhs in assignments;
> + (5) as initializers, possibly designated, in initalizer lists.
> + - Tagged as `safe` for ECLAIR.
> +
> + * - R20.7
> + - Violations due to the use of macros defined in files that are not
> + in scope for compliance are allowed, as that is imported code.
> + - Tagged as `safe` for ECLAIR.
> +
> + * - R20.7
> + - To avoid compromising readability, the macros `alternative_(v)?call[0-9]`
> + are allowed not to parenthesize their arguments, as there are already
> + sanity checks in place.
> - Tagged as `safe` for ECLAIR.
>
> * - R20.12
> diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst
> index 1e134ccebc48..3914af08495b 100644
> --- a/docs/misra/rules.rst
> +++ b/docs/misra/rules.rst
> @@ -560,7 +560,7 @@ maintainers if you want to suggest a change.
> shall be enclosed in parentheses
> - Extra parentheses are not required when macro parameters are used
> as function arguments, as macro arguments, array indices, lhs in
> - assignments
> + assignments or as initializers in initalizer lists.
>
> * - `Rule 20.9 <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_20_09.c>`_
> - Required
> --
> 2.34.1
>