coccinelle: Add script to check rule 14.4
Controlling expression shall have essentially boolean type. Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
This commit is contained in:
parent
0bbe5e4fda
commit
a025fb2747
1 changed files with 100 additions and 0 deletions
100
scripts/coccinelle/boolean.cocci
Normal file
100
scripts/coccinelle/boolean.cocci
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
// Check violations for rule 14.4
|
||||
// https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_14_04.c
|
||||
//
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2021 Intel Corporation
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
virtual report
|
||||
|
||||
|
||||
@initialize:python@
|
||||
@@
|
||||
|
||||
@rule1_base@
|
||||
identifier function, v;
|
||||
type T1, T2;
|
||||
parameter list[n] P1;
|
||||
parameter list[n1] P2;
|
||||
@@
|
||||
(
|
||||
T1 function(P1, T2 v, P2) {...}
|
||||
|
|
||||
T1 function(P1, T2 *v, P2) {...}
|
||||
)
|
||||
|
||||
@ script:python @
|
||||
t << rule1_base.T2;
|
||||
v << rule1_base.v;
|
||||
@@
|
||||
|
||||
if t == "bool":
|
||||
cocci.include_match(False)
|
||||
|
||||
@rule1@
|
||||
identifier rule1_base.v;
|
||||
position p;
|
||||
@@
|
||||
(
|
||||
while (v@p) {...}
|
||||
|
|
||||
if (v@p) {...}
|
||||
)
|
||||
|
||||
@ script:python @
|
||||
p << rule1.p;
|
||||
@@
|
||||
|
||||
msg = "WARNING: Violation to rule 14.4 (Controlling expression shall have essentially Boolean type)"
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
|
||||
@rule2_base@
|
||||
identifier v;
|
||||
type T;
|
||||
@@
|
||||
T v;
|
||||
...
|
||||
|
||||
@ script:python @
|
||||
t << rule2_base.T;
|
||||
v << rule2_base.v;
|
||||
@@
|
||||
|
||||
if t == "bool":
|
||||
cocci.include_match(False)
|
||||
|
||||
|
||||
@rule2@
|
||||
position p;
|
||||
identifier rule2_base.v;
|
||||
@@
|
||||
while (v@p) {...}
|
||||
|
||||
@ script:python @
|
||||
p << rule2.p;
|
||||
@@
|
||||
|
||||
msg = "WARNING: Violation to rule 14.4 (Controlling expression shall have essentially Boolean type)"
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
|
||||
@rule3@
|
||||
position p;
|
||||
constant c;
|
||||
@@
|
||||
(
|
||||
while (c@p) {...}
|
||||
|
|
||||
while (!c@p) {...}
|
||||
|
|
||||
if (c@p) {...}
|
||||
|
|
||||
if (!c@p) {...}
|
||||
)
|
||||
|
||||
@ script:python @
|
||||
p << rule3.p;
|
||||
@@
|
||||
|
||||
msg = "WARNING: Violation to rule 14.4 (Controlling expression shall have essentially Boolean type)"
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
Loading…
Reference in a new issue