@@ -53,8 +53,11 @@ module TypesCompatibleConfig implements TypeEquivalenceSig {
53
53
or
54
54
// Enum types are compatible with one of char, int, or signed int, but the implementation
55
55
// decides.
56
- [ t1 , t2 ] instanceof Enum and
57
- ( [ t1 , t2 ] instanceof CharType or [ t1 , t2 ] instanceof IntType )
56
+ t1 instanceof Enum and
57
+ ( t2 instanceof CharType or t2 instanceof IntType )
58
+ or
59
+ t2 instanceof Enum and
60
+ ( t1 instanceof CharType or t1 instanceof IntType )
58
61
}
59
62
60
63
bindingset [ t1, t2]
@@ -348,8 +351,15 @@ module FunctionDeclarationTypeEquivalence<TypeEquivalenceSig Config> {
348
351
predicate equalParameterTypes ( FunctionDeclarationEntry f1 , FunctionDeclarationEntry f2 ) {
349
352
f1 .getDeclaration ( ) = f2 .getDeclaration ( ) and
350
353
forall ( int i | exists ( [ f1 , f2 ] .getParameterDeclarationEntry ( i ) ) |
351
- TypeEquivalence< Config , FunctionSignatureType > :: equalTypes ( f1 .getParameterDeclarationEntry ( i )
352
- .getType ( ) , f2 .getParameterDeclarationEntry ( i ) .getType ( ) )
354
+ equalParameterTypesAt ( f1 , f2 , pragma [ only_bind_into ] ( i ) )
355
+ )
356
+ }
357
+
358
+ predicate equalParameterTypesAt ( FunctionDeclarationEntry f1 , FunctionDeclarationEntry f2 , int i ) {
359
+ pragma [ only_bind_out ] ( f1 .getDeclaration ( ) ) = pragma [ only_bind_out ] ( f2 .getDeclaration ( ) ) and
360
+ TypeEquivalence< Config , FunctionSignatureType > :: equalTypes (
361
+ f1 .getParameterDeclarationEntry ( i ) .getType ( ) ,
362
+ f2 .getParameterDeclarationEntry ( i ) .getType ( )
353
363
)
354
364
}
355
365
}
0 commit comments