@@ -2682,6 +2682,7 @@ module MakeImpl<InputSig Lang> {
26822682 ) {
26832683 not isUnreachableInCall1 ( node2 , cc ) and
26842684 not inBarrier ( node2 , state ) and
2685+ not outBarrier ( node1 , state ) and
26852686 (
26862687 localFlowEntry ( node1 , pragma [ only_bind_into ] ( state ) ) and
26872688 (
@@ -3761,6 +3762,9 @@ module MakeImpl<InputSig Lang> {
37613762
37623763 override NodeEx getNodeEx ( ) { result = node }
37633764
3765+ pragma [ inline]
3766+ final NodeEx getNodeExOutgoing ( ) { result = node and not outBarrier ( node , state ) }
3767+
37643768 override FlowState getState ( ) { result = state }
37653769
37663770 CallContext getCallContext ( ) { result = cc }
@@ -3777,14 +3781,11 @@ module MakeImpl<InputSig Lang> {
37773781 }
37783782
37793783 override PathNodeImpl getASuccessorImpl ( ) {
3780- not outBarrier ( node , state ) and
3781- (
3782- // an intermediate step to another intermediate node
3783- result = this .getSuccMid ( )
3784- or
3785- // a final step to a sink
3786- result = this .getSuccMid ( ) .projectToSink ( )
3787- )
3784+ // an intermediate step to another intermediate node
3785+ result = this .getSuccMid ( )
3786+ or
3787+ // a final step to a sink
3788+ result = this .getSuccMid ( ) .projectToSink ( )
37883789 }
37893790
37903791 override predicate isSource ( ) {
@@ -3935,22 +3936,22 @@ module MakeImpl<InputSig Lang> {
39353936 ap instanceof AccessPathNil
39363937 )
39373938 or
3938- jumpStepEx ( mid .getNodeEx ( ) , node ) and
3939+ jumpStepEx ( mid .getNodeExOutgoing ( ) , node ) and
39393940 state = mid .getState ( ) and
39403941 cc instanceof CallContextAny and
39413942 sc instanceof SummaryCtxNone and
39423943 t = mid .getType ( ) and
39433944 ap = mid .getAp ( )
39443945 or
3945- additionalJumpStep ( mid .getNodeEx ( ) , node ) and
3946+ additionalJumpStep ( mid .getNodeExOutgoing ( ) , node ) and
39463947 state = mid .getState ( ) and
39473948 cc instanceof CallContextAny and
39483949 sc instanceof SummaryCtxNone and
39493950 mid .getAp ( ) instanceof AccessPathNil and
39503951 t = node .getDataFlowType ( ) and
39513952 ap = TAccessPathNil ( )
39523953 or
3953- additionalJumpStateStep ( mid .getNodeEx ( ) , mid .getState ( ) , node , state ) and
3954+ additionalJumpStateStep ( mid .getNodeExOutgoing ( ) , mid .getState ( ) , node , state ) and
39543955 cc instanceof CallContextAny and
39553956 sc instanceof SummaryCtxNone and
39563957 mid .getAp ( ) instanceof AccessPathNil and
@@ -3985,7 +3986,7 @@ module MakeImpl<InputSig Lang> {
39853986 ) {
39863987 ap0 = mid .getAp ( ) and
39873988 c = ap0 .getHead ( ) and
3988- Stage5:: readStepCand ( mid .getNodeEx ( ) , c , node ) and
3989+ Stage5:: readStepCand ( mid .getNodeExOutgoing ( ) , c , node ) and
39893990 state = mid .getState ( ) and
39903991 cc = mid .getCallContext ( )
39913992 }
@@ -3998,7 +3999,7 @@ module MakeImpl<InputSig Lang> {
39983999 exists ( DataFlowType contentType |
39994000 t0 = mid .getType ( ) and
40004001 ap0 = mid .getAp ( ) and
4001- Stage5:: storeStepCand ( mid .getNodeEx ( ) , _, c , node , contentType , t ) and
4002+ Stage5:: storeStepCand ( mid .getNodeExOutgoing ( ) , _, c , node , contentType , t ) and
40024003 state = mid .getState ( ) and
40034004 cc = mid .getCallContext ( ) and
40044005 compatibleTypes ( t0 , contentType )
@@ -4016,7 +4017,8 @@ module MakeImpl<InputSig Lang> {
40164017 not outBarrier ( retNode , state ) and
40174018 innercc = mid .getCallContext ( ) and
40184019 innercc instanceof CallContextNoCall and
4019- apa = mid .getAp ( ) .getApprox ( )
4020+ apa = mid .getAp ( ) .getApprox ( ) and
4021+ not outBarrier ( retNode , state )
40204022 )
40214023 }
40224024
@@ -4137,7 +4139,8 @@ module MakeImpl<InputSig Lang> {
41374139 pathNode ( _, ret , state , cc , sc , t , ap , _) and
41384140 kind = ret .getKind ( ) and
41394141 apa = ap .getApprox ( ) and
4140- parameterFlowThroughAllowed ( sc .getParamNode ( ) , kind )
4142+ parameterFlowThroughAllowed ( sc .getParamNode ( ) , kind ) and
4143+ not outBarrier ( ret , state )
41414144 )
41424145 }
41434146
0 commit comments