Message ID | 5c60e98d70ae94c155fd56ec13b764b7a8f6161c.1719219962.git.federico.serafini@bugseng.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [XEN,v2] automation/eclair: configure Rule 13.6 and custom service B.UNEVALEFF | expand |
On Mon, 24 Jun 2024, Federico Serafini wrote: > Rule 13.6 states that "The operand of the `sizeof' operator shall not > contain any expression which has potential side effects". > > Define service B.UNEVALEFF as an extension of Rule 13.6 to > check for unevalued side effects also for typeof and alignof operators. > > Update ECLAIR configuration to deviate uses of BUILD_BUG_ON and > alternative_v?call[0-9] for both Rule 13.6 and B.UNEVALEFF. > > Add service B.UNEVALEFF to the accepted.ecl guidelines to check > "violations" in the weekly analysis. > > Signed-off-by: Federico Serafini <federico.serafini@bugseng.com> > Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
On Mon, 24 Jun 2024, Stefano Stabellini wrote: > On Mon, 24 Jun 2024, Federico Serafini wrote: > > Rule 13.6 states that "The operand of the `sizeof' operator shall not > > contain any expression which has potential side effects". > > > > Define service B.UNEVALEFF as an extension of Rule 13.6 to > > check for unevalued side effects also for typeof and alignof operators. > > > > Update ECLAIR configuration to deviate uses of BUILD_BUG_ON and > > alternative_v?call[0-9] for both Rule 13.6 and B.UNEVALEFF. > > > > Add service B.UNEVALEFF to the accepted.ecl guidelines to check > > "violations" in the weekly analysis. > > > > Signed-off-by: Federico Serafini <federico.serafini@bugseng.com> > > Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com> > > Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Hi Oleksii, I am asking for a release-ack on this rule: it widens the checks done by ECLAIR but only for non-blocking rules (a rule not causing a gitlab-ci failure). Hence, there should be no effect on gitlab-ci. Cheers, Stefano
On Mon, 2024-06-24 at 17:26 -0700, Stefano Stabellini wrote: > On Mon, 24 Jun 2024, Stefano Stabellini wrote: > > On Mon, 24 Jun 2024, Federico Serafini wrote: > > > Rule 13.6 states that "The operand of the `sizeof' operator shall > > > not > > > contain any expression which has potential side effects". > > > > > > Define service B.UNEVALEFF as an extension of Rule 13.6 to > > > check for unevalued side effects also for typeof and alignof > > > operators. > > > > > > Update ECLAIR configuration to deviate uses of BUILD_BUG_ON and > > > alternative_v?call[0-9] for both Rule 13.6 and B.UNEVALEFF. > > > > > > Add service B.UNEVALEFF to the accepted.ecl guidelines to check > > > "violations" in the weekly analysis. > > > > > > Signed-off-by: Federico Serafini <federico.serafini@bugseng.com> > > > Signed-off-by: Nicola Vetrini <nicola.vetrini@bugseng.com> > > > > Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > > Hi Oleksii, Hi Stefano, > > I am asking for a release-ack on this rule: it widens the checks done > by > ECLAIR but only for non-blocking rules (a rule not causing a gitlab- > ci > failure). Hence, there should be no effect on gitlab-ci. Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@gmail.com> ~ Oleksii
diff --git a/automation/eclair_analysis/ECLAIR/B.UNEVALEFF.ecl b/automation/eclair_analysis/ECLAIR/B.UNEVALEFF.ecl new file mode 100644 index 0000000000..92d8db8986 --- /dev/null +++ b/automation/eclair_analysis/ECLAIR/B.UNEVALEFF.ecl @@ -0,0 +1,10 @@ +-clone_service=MC3R1.R13.6,B.UNEVALEFF + +-config=B.UNEVALEFF,summary="The operand of the `alignof' and `typeof' operators shall not contain any expression which has potential side effects" +-config=B.UNEVALEFF,stmt_child_matcher= +{"stmt(node(utrait_expr)&&operator(alignof))", expr, 0, "stmt(any())", {}}, +{"stmt(node(utrait_type)&&operator(alignof))", type, 0, "stmt(any())", {}}, +{"stmt(node(utrait_expr)&&operator(preferred_alignof))", expr, 0, "stmt(any())", {}}, +{"stmt(node(utrait_type)&&operator(preferred_alignof))", type, 0, "stmt(any())", {}}, +{"type(node(typeof_expr))", expr, 0, "stmt(any())", {}}, +{"type(node(typeof_type))", type, 0, "stmt(any())", {}} diff --git a/automation/eclair_analysis/ECLAIR/accepted_guidelines.sh b/automation/eclair_analysis/ECLAIR/accepted_guidelines.sh index b308bd4cda..368135122c 100755 --- a/automation/eclair_analysis/ECLAIR/accepted_guidelines.sh +++ b/automation/eclair_analysis/ECLAIR/accepted_guidelines.sh @@ -11,3 +11,5 @@ accepted_rst=$1 grep -Eo "\`(Dir|Rule) [0-9]+\.[0-9]+" ${accepted_rst} \ | sed -e 's/`Rule /MC3R1.R/' -e 's/`Dir /MC3R1.D/' -e 's/.*/-enable=&/' > ${script_dir}/accepted.ecl + +echo "-enable=B.UNEVALEFF" >> ${script_dir}/accepted.ecl diff --git a/automation/eclair_analysis/ECLAIR/analysis.ecl b/automation/eclair_analysis/ECLAIR/analysis.ecl index 9134e59617..df0b551812 100644 --- a/automation/eclair_analysis/ECLAIR/analysis.ecl +++ b/automation/eclair_analysis/ECLAIR/analysis.ecl @@ -52,6 +52,7 @@ their Standard Library equivalents." -eval_file=adopted.ecl -eval_file=out_of_scope.ecl +-eval_file=B.UNEVALEFF.ecl -eval_file=deviations.ecl -eval_file=call_properties.ecl -eval_file=tagging.ecl diff --git a/automation/eclair_analysis/ECLAIR/deviations.ecl b/automation/eclair_analysis/ECLAIR/deviations.ecl index e2653f77eb..580d9edb8d 100644 --- a/automation/eclair_analysis/ECLAIR/deviations.ecl +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl @@ -328,6 +328,16 @@ of the short-circuit evaluation strategy of such logical operators." -config=MC3R1.R13.5,reports+={disapplied,"any()"} -doc_end +-doc_begin="Macros alternative_v?call[0-9] use sizeof and typeof to check that the argument types match the corresponding parameter ones." +-config=MC3R1.R13.6,reports+={deliberate,"any_area(any_loc(any_exp(macro(^alternative_vcall[0-9]$))&&file(^xen/arch/x86/include/asm/alternative\\.h*$)))"} +-config=B.UNEVALEFF,reports+={deliberate,"any_area(any_loc(any_exp(macro(^alternative_v?call[0-9]$))&&file(^xen/arch/x86/include/asm/alterantive\\.h*$)))"} +-doc_end + +-doc_begin="Anything, no matter how complicated, inside the BUILD_BUG_ON macro is subject to a compile-time evaluation without relevant side effects." +-config=MC3R1.R13.6,reports+={safe,"any_area(any_loc(any_exp(macro(name(BUILD_BUG_ON)))))"} +-config=B.UNEVALEFF,reports+={safe,"any_area(any_loc(any_exp(macro(name(BUILD_BUG_ON)))))"} +-doc_end + # # Series 14 # diff --git a/docs/misra/deviations.rst b/docs/misra/deviations.rst index 36959aa44a..65dce6267f 100644 --- a/docs/misra/deviations.rst +++ b/docs/misra/deviations.rst @@ -279,6 +279,16 @@ Deviations related to MISRA C:2012 Rules: the short-circuit evaluation strategy for logical operators. - Project-wide deviation; tagged as `disapplied` for ECLAIR. + * - R13.6 + - On x86, macros alternative_v?call[0-9] use sizeof and typeof to check + that the argument types match the corresponding parameter ones. + - Tagged as `deliberate` for ECLAIR. + + * - R13.6 + - Anything, no matter how complicated, inside the BUILD_BUG_ON macro is + subject to a compile-time evaluation without relevant side effects." + - Tagged as `safe` for ECLAIR. + * - R14.2 - The severe restrictions imposed by this rule on the use of 'for' statements are not counterbalanced by the presumed facilitation of the