Skip to content

Commit b601c91

Browse files
committed
Declarations4: refactor RULE-8-3 compatible lib and compatible correctness
1 parent ce559bc commit b601c91

File tree

4 files changed

+30
-44
lines changed

4 files changed

+30
-44
lines changed

c/misra/src/rules/RULE-8-3/Compatible.qll

Lines changed: 0 additions & 30 deletions
This file was deleted.

c/misra/src/rules/RULE-8-3/DeclarationsOfAFunctionSameNameAndType.ql

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,25 @@
1313

1414
import cpp
1515
import codingstandards.c.misra
16-
import Compatible
16+
import codingstandards.cpp.Compatible
17+
18+
predicate parameterTypesIncompatible(FunctionDeclarationEntry f1, FunctionDeclarationEntry f2) {
19+
exists(ParameterDeclarationEntry p1, ParameterDeclarationEntry p2, int i |
20+
p1 = f1.getParameterDeclarationEntry(i) and
21+
p2 = f2.getParameterDeclarationEntry(i)
22+
|
23+
not typesCompatible(p1.getType(), p2.getType())
24+
)
25+
}
26+
27+
predicate parameterNamesIncompatible(FunctionDeclarationEntry f1, FunctionDeclarationEntry f2) {
28+
exists(ParameterDeclarationEntry p1, ParameterDeclarationEntry p2, int i |
29+
p1 = f1.getParameterDeclarationEntry(i) and
30+
p2 = f2.getParameterDeclarationEntry(i)
31+
|
32+
not p1.getName() = p2.getName()
33+
)
34+
}
1735

1836
from FunctionDeclarationEntry f1, FunctionDeclarationEntry f2, string case
1937
where
@@ -27,21 +45,11 @@ where
2745
case = "return type"
2846
or
2947
//parameter type check
30-
exists(ParameterDeclarationEntry p1, ParameterDeclarationEntry p2, int i |
31-
p1 = f1.getParameterDeclarationEntry(i) and
32-
p2 = f2.getParameterDeclarationEntry(i)
33-
|
34-
not typesCompatible(p1.getType(), p2.getType())
35-
) and
48+
parameterTypesIncompatible(f1, f2) and
3649
case = "parameter types"
3750
or
3851
//parameter name check
39-
exists(ParameterDeclarationEntry p1, ParameterDeclarationEntry p2, int i |
40-
p1 = f1.getParameterDeclarationEntry(i) and
41-
p2 = f2.getParameterDeclarationEntry(i)
42-
|
43-
not p1.getName() = p2.getName()
44-
) and
52+
parameterNamesIncompatible(f1, f2) and
4553
case = "parameter names"
4654
)
4755
select f1, "The " + case + " of re-declaration of $@ is not compatible with declaration $@", f1,

c/misra/src/rules/RULE-8-3/DeclarationsOfAnObjectSameNameAndType.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import cpp
1515
import codingstandards.c.misra
16-
import Compatible
16+
import codingstandards.cpp.Compatible
1717

1818
from VariableDeclarationEntry decl1, VariableDeclarationEntry decl2
1919
where
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import cpp
2+
3+
predicate typesCompatible(Type t1, Type t2) {
4+
t1 = t2
5+
or
6+
//signed int is same as int ect
7+
t1.(IntegralType).getCanonicalArithmeticType() = t2.(IntegralType).getCanonicalArithmeticType()
8+
}

0 commit comments

Comments
 (0)