@@ -2682,6 +2682,7 @@ module MakeImpl<InputSig Lang> {
2682
2682
) {
2683
2683
not isUnreachableInCall1 ( node2 , cc ) and
2684
2684
not inBarrier ( node2 , state ) and
2685
+ not outBarrier ( node1 , state ) and
2685
2686
(
2686
2687
localFlowEntry ( node1 , pragma [ only_bind_into ] ( state ) ) and
2687
2688
(
@@ -3757,6 +3758,9 @@ module MakeImpl<InputSig Lang> {
3757
3758
3758
3759
override NodeEx getNodeEx ( ) { result = node }
3759
3760
3761
+ pragma [ inline]
3762
+ final NodeEx getNodeExOutgoing ( ) { result = node and not outBarrier ( node , state ) }
3763
+
3760
3764
override FlowState getState ( ) { result = state }
3761
3765
3762
3766
CallContext getCallContext ( ) { result = cc }
@@ -3928,22 +3932,22 @@ module MakeImpl<InputSig Lang> {
3928
3932
ap instanceof AccessPathNil
3929
3933
)
3930
3934
or
3931
- jumpStepEx ( mid .getNodeEx ( ) , node ) and
3935
+ jumpStepEx ( mid .getNodeExOutgoing ( ) , node ) and
3932
3936
state = mid .getState ( ) and
3933
3937
cc instanceof CallContextAny and
3934
3938
sc instanceof SummaryCtxNone and
3935
3939
t = mid .getType ( ) and
3936
3940
ap = mid .getAp ( )
3937
3941
or
3938
- additionalJumpStep ( mid .getNodeEx ( ) , node ) and
3942
+ additionalJumpStep ( mid .getNodeExOutgoing ( ) , node ) and
3939
3943
state = mid .getState ( ) and
3940
3944
cc instanceof CallContextAny and
3941
3945
sc instanceof SummaryCtxNone and
3942
3946
mid .getAp ( ) instanceof AccessPathNil and
3943
3947
t = node .getDataFlowType ( ) and
3944
3948
ap = TAccessPathNil ( )
3945
3949
or
3946
- additionalJumpStateStep ( mid .getNodeEx ( ) , mid .getState ( ) , node , state ) and
3950
+ additionalJumpStateStep ( mid .getNodeExOutgoing ( ) , mid .getState ( ) , node , state ) and
3947
3951
cc instanceof CallContextAny and
3948
3952
sc instanceof SummaryCtxNone and
3949
3953
mid .getAp ( ) instanceof AccessPathNil and
@@ -3978,7 +3982,7 @@ module MakeImpl<InputSig Lang> {
3978
3982
) {
3979
3983
ap0 = mid .getAp ( ) and
3980
3984
c = ap0 .getHead ( ) and
3981
- Stage5:: readStepCand ( mid .getNodeEx ( ) , c , node ) and
3985
+ Stage5:: readStepCand ( mid .getNodeExOutgoing ( ) , c , node ) and
3982
3986
state = mid .getState ( ) and
3983
3987
cc = mid .getCallContext ( )
3984
3988
}
@@ -3991,7 +3995,7 @@ module MakeImpl<InputSig Lang> {
3991
3995
exists ( DataFlowType contentType |
3992
3996
t0 = mid .getType ( ) and
3993
3997
ap0 = mid .getAp ( ) and
3994
- Stage5:: storeStepCand ( mid .getNodeEx ( ) , _, c , node , contentType , t ) and
3998
+ Stage5:: storeStepCand ( mid .getNodeExOutgoing ( ) , _, c , node , contentType , t ) and
3995
3999
state = mid .getState ( ) and
3996
4000
cc = mid .getCallContext ( ) and
3997
4001
compatibleTypes ( t0 , contentType )
@@ -4009,7 +4013,8 @@ module MakeImpl<InputSig Lang> {
4009
4013
not outBarrier ( retNode , state ) and
4010
4014
innercc = mid .getCallContext ( ) and
4011
4015
innercc instanceof CallContextNoCall and
4012
- apa = mid .getAp ( ) .getApprox ( )
4016
+ apa = mid .getAp ( ) .getApprox ( ) and
4017
+ not outBarrier ( retNode , state )
4013
4018
)
4014
4019
}
4015
4020
@@ -4130,7 +4135,8 @@ module MakeImpl<InputSig Lang> {
4130
4135
pathNode ( _, ret , state , cc , sc , t , ap , _) and
4131
4136
kind = ret .getKind ( ) and
4132
4137
apa = ap .getApprox ( ) and
4133
- parameterFlowThroughAllowed ( sc .getParamNode ( ) , kind )
4138
+ parameterFlowThroughAllowed ( sc .getParamNode ( ) , kind ) and
4139
+ not outBarrier ( ret , state )
4134
4140
)
4135
4141
}
4136
4142
0 commit comments