@@ -971,6 +971,8 @@ module MakeImplCommon<InputSig Lang> {
971
971
}
972
972
973
973
signature module TypeFlowInput {
974
+ predicate enableTypeFlow ( ) ;
975
+
974
976
/** Holds if the edge is possibly needed in the direction `call` to `c`. */
975
977
predicate relevantCallEdgeIn ( DataFlowCall call , DataFlowCallable c ) ;
976
978
@@ -1036,24 +1038,27 @@ module MakeImplCommon<InputSig Lang> {
1036
1038
*/
1037
1039
pragma [ nomagic]
1038
1040
private predicate trackedArgTypeCand ( ArgNode arg ) {
1039
- exists ( ParamNode p , DataFlowType at , DataFlowType pt |
1040
- at = getNodeType ( arg ) and
1041
- pt = getNodeType ( p ) and
1042
- relevantCallEdge ( _, _, arg , p ) and
1043
- typeStrongerThan0 ( pt , at )
1044
- )
1045
- or
1046
- exists ( ParamNode p , DataFlowType at , DataFlowType pt |
1047
- at = getNodeType ( arg ) and
1048
- pt = getNodeType ( p ) and
1049
- paramMustFlow ( p , arg ) and
1050
- relevantCallEdge ( _, _, arg , _) and
1051
- typeStrongerThan0 ( at , pt )
1052
- )
1053
- or
1054
- exists ( ParamNode p |
1055
- trackedParamTypeCand ( p ) and
1056
- relevantCallEdge ( _, _, arg , p )
1041
+ Input:: enableTypeFlow ( ) and
1042
+ (
1043
+ exists ( ParamNode p , DataFlowType at , DataFlowType pt |
1044
+ at = getNodeType ( arg ) and
1045
+ pt = getNodeType ( p ) and
1046
+ relevantCallEdge ( _, _, arg , p ) and
1047
+ typeStrongerThan0 ( pt , at )
1048
+ )
1049
+ or
1050
+ exists ( ParamNode p , DataFlowType at , DataFlowType pt |
1051
+ at = getNodeType ( arg ) and
1052
+ pt = getNodeType ( p ) and
1053
+ paramMustFlow ( p , arg ) and
1054
+ relevantCallEdge ( _, _, arg , _) and
1055
+ typeStrongerThan0 ( at , pt )
1056
+ )
1057
+ or
1058
+ exists ( ParamNode p |
1059
+ trackedParamTypeCand ( p ) and
1060
+ relevantCallEdge ( _, _, arg , p )
1061
+ )
1057
1062
)
1058
1063
}
1059
1064
@@ -1276,10 +1281,14 @@ module MakeImplCommon<InputSig Lang> {
1276
1281
predicate typeFlowValidEdgeIn ( DataFlowCall call , DataFlowCallable c , boolean cc ) {
1277
1282
Input:: relevantCallEdgeIn ( call , c ) and
1278
1283
cc = [ true , false ] and
1279
- forall ( ArgNode arg , ParamNode p |
1280
- callEdge ( call , c , arg , p ) and trackedArgType ( arg ) and paramMustFlow ( _, arg )
1281
- |
1282
- validArgParamIn ( arg , p , cc )
1284
+ (
1285
+ not Input:: enableTypeFlow ( )
1286
+ or
1287
+ forall ( ArgNode arg , ParamNode p |
1288
+ callEdge ( call , c , arg , p ) and trackedArgType ( arg ) and paramMustFlow ( _, arg )
1289
+ |
1290
+ validArgParamIn ( arg , p , cc )
1291
+ )
1283
1292
)
1284
1293
}
1285
1294
@@ -1313,8 +1322,12 @@ module MakeImplCommon<InputSig Lang> {
1313
1322
*/
1314
1323
predicate typeFlowValidEdgeOut ( DataFlowCall call , DataFlowCallable c ) {
1315
1324
Input:: relevantCallEdgeOut ( call , c ) and
1316
- forall ( ArgNode arg , ParamNode p | callEdge ( call , c , arg , p ) and trackedParamType ( p ) |
1317
- validArgParamOut ( arg , p )
1325
+ (
1326
+ not Input:: enableTypeFlow ( )
1327
+ or
1328
+ forall ( ArgNode arg , ParamNode p | callEdge ( call , c , arg , p ) and trackedParamType ( p ) |
1329
+ validArgParamOut ( arg , p )
1330
+ )
1318
1331
)
1319
1332
}
1320
1333
}
0 commit comments