@@ -1439,23 +1439,15 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
14391439 CachedCallContextSensitivity:: CcNoCall ctx1 , CachedCallContextSensitivity:: CcNoCall ctx2
14401440 |
14411441 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
14501442 ctx = mergeContexts ( ctx1 , ctx2 )
14511443 |
14521444 // flow through: no prior read
14531445 parameterValueFlowArg ( p , arg , mustBeNone , model1 , ctx1 ) and
1454- argumentValueFlowsThrough ( call , callable , arg , read , node , model2 )
1446+ argumentValueFlowsThrough ( call , callable , arg , read , node , model2 , ctx2 )
14551447 or
14561448 // flow through: no read inside method
14571449 parameterValueFlowArg ( p , arg , read , model1 , ctx1 ) and
1458- argumentValueFlowsThrough ( call , callable , arg , mustBeNone , node , model2 )
1450+ argumentValueFlowsThrough ( call , callable , arg , mustBeNone , node , model2 , ctx2 )
14591451 )
14601452 }
14611453
@@ -1471,26 +1463,28 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
14711463 pragma [ nomagic]
14721464 private predicate argumentValueFlowsThrough0 (
14731465 DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReturnKind kind ,
1474- ReadStepTypesOption read , string model
1466+ ReadStepTypesOption read , string model , CachedCallContextSensitivity :: CcNoCall outerCtx
14751467 ) {
1476- exists ( ParamNode param , CachedCallContextSensitivity:: CcNoCall ctx |
1468+ exists ( ParamNode param , CachedCallContextSensitivity:: CcNoCall innerCtx |
14771469 viableParamArg ( call , param , arg ) and
1478- parameterValueFlowReturn ( param , kind , read , model , ctx ) and
1479- callable = nodeGetEnclosingCallable ( param )
1470+ parameterValueFlowReturn ( param , kind , read , model , innerCtx ) and
1471+ callable = nodeGetEnclosingCallable ( param ) and
1472+ outerCtx = CachedCallContextSensitivity:: getCallContextReturn ( callable , call )
14801473 |
1481- CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( ctx )
1474+ CachedCallContextSensitivity:: viableImplNotCallContextReducedReverse ( innerCtx )
14821475 or
1483- call = CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , ctx )
1476+ call =
1477+ CachedCallContextSensitivity:: viableImplCallContextReducedReverse ( callable , innerCtx )
14841478 )
14851479 }
14861480
14871481 pragma [ nomagic]
14881482 private predicate argumentValueFlowsThrough (
14891483 DataFlowCall call , DataFlowCallable callable , ArgNode arg , ReadStepTypesOption read ,
1490- Node out , string model
1484+ Node out , string model , CachedCallContextSensitivity :: CcNoCall ctx
14911485 ) {
14921486 exists ( ReturnKind kind |
1493- argumentValueFlowsThrough0 ( call , callable , arg , kind , read , model ) and
1487+ argumentValueFlowsThrough0 ( call , callable , arg , kind , read , model , ctx ) and
14941488 out = getAnOutNode ( call , kind )
14951489 |
14961490 // normal flow through
@@ -1515,7 +1509,7 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
15151509 predicate argumentValueFlowsThrough (
15161510 ArgNode arg , ReadStepTypesOption read , Node out , string model
15171511 ) {
1518- argumentValueFlowsThrough ( _, _, arg , read , out , model )
1512+ argumentValueFlowsThrough ( _, _, arg , read , out , model , _ )
15191513 }
15201514
15211515 /**
0 commit comments