@@ -628,8 +628,6 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
628
628
override string toString ( ) {
629
629
exists ( DataFlowCall call | this = TReturn ( _, call ) | result = "CcReturn(" + call + ")" )
630
630
}
631
-
632
- predicate isReturn ( DataFlowCallable c , DataFlowCall call ) { this = TReturn ( c , call ) }
633
631
}
634
632
635
633
pragma [ nomagic]
@@ -1435,27 +1433,19 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1435
1433
string model , CachedCallContextSensitivity:: CcNoCall ctx
1436
1434
) {
1437
1435
exists (
1438
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , string model1 , string model2 ,
1439
- CachedCallContextSensitivity:: CcNoCall ctx1 , CachedCallContextSensitivity :: CcNoCall ctx2
1436
+ ArgNode arg , string model1 , string model2 , CachedCallContextSensitivity :: CcNoCall ctx1 ,
1437
+ CachedCallContextSensitivity:: CcNoCall ctx2
1440
1438
|
1441
1439
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
1440
ctx = mergeContexts ( ctx1 , ctx2 )
1451
1441
|
1452
1442
// flow through: no prior read
1453
1443
parameterValueFlowArg ( p , arg , mustBeNone , model1 , ctx1 ) and
1454
- argumentValueFlowsThrough ( call , callable , arg , read , node , model2 )
1444
+ argumentValueFlowsThrough ( arg , read , node , model2 , ctx2 )
1455
1445
or
1456
1446
// flow through: no read inside method
1457
1447
parameterValueFlowArg ( p , arg , read , model1 , ctx1 ) and
1458
- argumentValueFlowsThrough ( call , callable , arg , mustBeNone , node , model2 )
1448
+ argumentValueFlowsThrough ( arg , mustBeNone , node , model2 , ctx2 )
1459
1449
)
1460
1450
}
1461
1451
@@ -1470,27 +1460,32 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1470
1460
1471
1461
pragma [ nomagic]
1472
1462
private predicate argumentValueFlowsThrough0 (
1473
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReturnKind kind ,
1474
- ReadStepTypesOption read , string model
1463
+ DataFlowCall call , ArgNode arg , ReturnKind kind , ReadStepTypesOption read , string model ,
1464
+ CachedCallContextSensitivity :: CcNoCall outerCtx
1475
1465
) {
1476
- exists ( ParamNode param , CachedCallContextSensitivity:: CcNoCall ctx |
1466
+ exists (
1467
+ ParamNode param , DataFlowCallable callable ,
1468
+ CachedCallContextSensitivity:: CcNoCall innerCtx
1469
+ |
1477
1470
viableParamArg ( call , param , arg ) and
1478
- parameterValueFlowReturn ( param , kind , read , model , ctx ) and
1479
- callable = nodeGetEnclosingCallable ( param )
1471
+ parameterValueFlowReturn ( param , kind , read , model , innerCtx ) and
1472
+ callable = nodeGetEnclosingCallable ( param ) and
1473
+ outerCtx = CachedCallContextSensitivity:: getCallContextReturn ( callable , call )
1480
1474
|
1481
- CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( ctx )
1475
+ CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( innerCtx )
1482
1476
or
1483
- call = CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , ctx )
1477
+ call =
1478
+ CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , innerCtx )
1484
1479
)
1485
1480
}
1486
1481
1487
1482
pragma [ nomagic]
1488
1483
private predicate argumentValueFlowsThrough (
1489
- DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReadStepTypesOption read ,
1490
- Node out , string model
1484
+ ArgNode arg , ReadStepTypesOption read , Node out , string model ,
1485
+ CachedCallContextSensitivity :: CcNoCall ctx
1491
1486
) {
1492
- exists ( ReturnKind kind |
1493
- argumentValueFlowsThrough0 ( call , callable , arg , kind , read , model ) and
1487
+ exists ( DataFlowCall call , ReturnKind kind |
1488
+ argumentValueFlowsThrough0 ( call , arg , kind , read , model , ctx ) and
1494
1489
out = getAnOutNode ( call , kind )
1495
1490
|
1496
1491
// normal flow through
@@ -1515,7 +1510,7 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1515
1510
predicate argumentValueFlowsThrough (
1516
1511
ArgNode arg , ReadStepTypesOption read , Node out , string model
1517
1512
) {
1518
- argumentValueFlowsThrough ( _ , _ , arg , read , out , model )
1513
+ argumentValueFlowsThrough ( arg , read , out , model , _ )
1519
1514
}
1520
1515
1521
1516
/**
0 commit comments