@@ -1435,27 +1435,19 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1435
1435
string model , CachedCallContextSensitivity:: CcNoCall ctx
1436
1436
) {
1437
1437
exists (
1438
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , string model1 , string model2 ,
1439
- CachedCallContextSensitivity:: CcNoCall ctx1 , CachedCallContextSensitivity :: CcNoCall ctx2
1438
+ ArgNode arg , string model1 , string model2 , CachedCallContextSensitivity :: CcNoCall ctx1 ,
1439
+ CachedCallContextSensitivity:: CcNoCall ctx2
1440
1440
|
1441
1441
model = mergeModels ( model1 , model2 ) and
1442
- (
1443
- // call may restrict the set of call sites that can be returned to
1444
- ctx2 .( CachedCallContextSensitivity:: CcReturn ) .isReturn ( callable , call )
1445
- or
1446
- // call does not restrict the set of call sites that can be returned to
1447
- not exists ( CachedCallContextSensitivity:: CcReturn ret | ret .isReturn ( callable , call ) ) and
1448
- CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( ctx2 )
1449
- ) and
1450
1442
ctx = mergeContexts ( ctx1 , ctx2 )
1451
1443
|
1452
1444
// flow through: no prior read
1453
1445
parameterValueFlowArg ( p , arg , mustBeNone , model1 , ctx1 ) and
1454
- argumentValueFlowsThrough ( call , callable , arg , read , node , model2 )
1446
+ argumentValueFlowsThrough ( arg , read , node , model2 , ctx2 )
1455
1447
or
1456
1448
// flow through: no read inside method
1457
1449
parameterValueFlowArg ( p , arg , read , model1 , ctx1 ) and
1458
- argumentValueFlowsThrough ( call , callable , arg , mustBeNone , node , model2 )
1450
+ argumentValueFlowsThrough ( arg , mustBeNone , node , model2 , ctx2 )
1459
1451
)
1460
1452
}
1461
1453
@@ -1470,27 +1462,32 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1470
1462
1471
1463
pragma [ nomagic]
1472
1464
private predicate argumentValueFlowsThrough0 (
1473
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReturnKind kind ,
1474
- ReadStepTypesOption read , string model
1465
+ DataFlowCall call , ArgNode arg , ReturnKind kind , ReadStepTypesOption read , string model ,
1466
+ CachedCallContextSensitivity :: CcNoCall outerCtx
1475
1467
) {
1476
- exists ( ParamNode param , CachedCallContextSensitivity:: CcNoCall ctx |
1468
+ exists (
1469
+ ParamNode param , DataFlowCallable callable ,
1470
+ CachedCallContextSensitivity:: CcNoCall innerCtx
1471
+ |
1477
1472
viableParamArg ( call , param , arg ) and
1478
- parameterValueFlowReturn ( param , kind , read , model , ctx ) and
1479
- callable = nodeGetEnclosingCallable ( param )
1473
+ parameterValueFlowReturn ( param , kind , read , model , innerCtx ) and
1474
+ callable = nodeGetEnclosingCallable ( param ) and
1475
+ outerCtx = CachedCallContextSensitivity:: getCallContextReturn ( callable , call )
1480
1476
|
1481
- CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( ctx )
1477
+ CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( innerCtx )
1482
1478
or
1483
- call = CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , ctx )
1479
+ call =
1480
+ CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , innerCtx )
1484
1481
)
1485
1482
}
1486
1483
1487
1484
pragma [ nomagic]
1488
1485
private predicate argumentValueFlowsThrough (
1489
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReadStepTypesOption read ,
1490
- Node out , string model
1486
+ ArgNode arg , ReadStepTypesOption read , Node out , string model ,
1487
+ CachedCallContextSensitivity :: CcNoCall ctx
1491
1488
) {
1492
- exists ( ReturnKind kind |
1493
- argumentValueFlowsThrough0 ( call , callable , arg , kind , read , model ) and
1489
+ exists ( DataFlowCall call , ReturnKind kind |
1490
+ argumentValueFlowsThrough0 ( call , arg , kind , read , model , ctx ) and
1494
1491
out = getAnOutNode ( call , kind )
1495
1492
|
1496
1493
// normal flow through
@@ -1515,7 +1512,7 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1515
1512
predicate argumentValueFlowsThrough (
1516
1513
ArgNode arg , ReadStepTypesOption read , Node out , string model
1517
1514
) {
1518
- argumentValueFlowsThrough ( _ , _ , arg , read , out , model )
1515
+ argumentValueFlowsThrough ( arg , read , out , model , _ )
1519
1516
}
1520
1517
1521
1518
/**
0 commit comments