automation/eclair: add deviations for MISRA C:2012 Rule 16.3

MISRA C:2012 Rule 16.3 states that an unconditional break statement
shall terminate every switch-clause.

Update ECLAIR configuration to take into account:
  - continue, goto, return statements;
  - functions with attribute noreturn;
  - pseudo-keyword fallthrough;
  - macro BUG();
  - comments.

Update docs/misra/deviations.rst accordingly.

Signed-off-by: Federico Serafini <federico.serafini@bugseng.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Federico Serafini authored and Stefano Stabellini committed 2023-12-19 17:08:21 -08:00
1 parent 1b42304fd1
commit a128d8da91
2 files changed
+60

No files matched your search

@@ -332,6 +332,34 @@ therefore have the same behavior of a boolean"
-config=MC3R1.R14.4,etypes+={deliberate, "stmt(child(cond,child(expr,ref(^<?domain>?::is_dying$))))","src_type(enum)"}
-doc_end
#
# Series 16.
#
-doc_begin="Switch clauses ending with continue, goto, return statements are
safe."
-config=MC3R1.R16.3,terminals+={safe, "node(continue_stmt||goto_stmt||return_stmt)"}
-doc_end
-doc_begin="Switch clauses ending with a call to a function that does not give
the control back (i.e., a function with attribute noreturn) are safe."
-config=MC3R1.R16.3,terminals+={safe, "call(property(noreturn))"}
-doc_end
-doc_begin="Switch clauses ending with pseudo-keyword \"fallthrough\" are
safe."
-config=MC3R1.R16.3,reports+={safe, "any_area(end_loc(any_exp(text(/fallthrough;/))))"}
-doc_end
-doc_begin="Switch clauses ending with failure method \"BUG()\" are safe."
-config=MC3R1.R16.3,reports+={safe, "any_area(end_loc(any_exp(text(/BUG\\(\\);/))))"}
-doc_end
-doc_begin="Switch clauses not ending with the break statement are safe if an
explicit comment indicating the fallthrough intention is present."
-config=MC3R1.R16.3,reports+={safe, "any_area(end_loc(any_exp(text(^(?s).*/\\* [fF]all ?through.? \\*/.*$,0..1))))"}
-doc_end
#
# Series 20.
#
+32
View File
@@ -276,6 +276,38 @@ Deviations related to MISRA C:2012 Rules:
therefore have the same behavior of a boolean.
- Project-wide deviation; tagged as `deliberate` for ECLAIR.
* - R16.3
- Switch clauses ending with continue, goto, return statements are safe.
- Tagged as `safe` for ECLAIR.
* - R16.3
- Switch clauses ending with a call to a function that does not give
the control back (i.e., a function with attribute noreturn) are safe.
- Tagged as `safe` for ECLAIR.
* - R16.3
- Switch clauses ending with pseudo-keyword \"fallthrough\" are safe.
- Tagged as `safe` for ECLAIR.
* - R16.3
- Switch clauses ending with failure method \"BUG()\" are safe.
- Tagged as `safe` for ECLAIR.
* - R16.3
- Existing switch clauses not ending with the break statement are safe if
an explicit comment indicating the fallthrough intention is present.
However, the use of such comments in new code is deprecated:
the pseudo-keyword "fallthrough" shall be used.
- Tagged as `safe` for ECLAIR. The accepted comments are:
- /\* fall through \*/
- /\* fall through. \*/
- /\* fallthrough \*/
- /\* fallthrough. \*/
- /\* Fall through \*/
- /\* Fall through. \*/
- /\* Fallthrough \*/
- /\* Fallthrough. \*/
* - R20.7
- Code violating Rule 20.7 is safe when macro parameters are used:
(1) as function arguments;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.