1313
1414import cpp
1515import 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
1836from FunctionDeclarationEntry f1 , FunctionDeclarationEntry f2 , string case
1937where
@@ -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 )
4755select f1 , "The " + case + " of re-declaration of $@ is not compatible with declaration $@" , f1 ,
0 commit comments