@@ -1578,6 +1578,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1578
1578
fwdFlowThrough ( call , cc , state , ccc , summaryCtx , argT , argAp , t , ap , apa , ret ,
1579
1579
innerArgApa ) and
1580
1580
flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow , innerArgApa , apa ) and
1581
+ not inBarrier ( node , state ) and
1581
1582
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1582
1583
)
1583
1584
}
@@ -1610,6 +1611,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1610
1611
) {
1611
1612
exists ( DataFlowType contentType , DataFlowType containerType , ApApprox apa1 |
1612
1613
fwdFlow ( node1 , state , cc , summaryCtx , argT , argAp , t1 , ap1 , apa1 ) and
1614
+ not outBarrier ( node1 , state ) and
1615
+ not inBarrier ( node2 , state ) and
1613
1616
PrevStage:: storeStepCand ( node1 , apa1 , c , node2 , contentType , containerType ) and
1614
1617
t2 = getTyp ( containerType ) and
1615
1618
typecheckStore ( t1 , contentType )
@@ -1651,6 +1654,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1651
1654
) {
1652
1655
exists ( ApHeadContent apc |
1653
1656
fwdFlow ( node1 , state , cc , summaryCtx , argT , argAp , t , ap , _) and
1657
+ not outBarrier ( node1 , state ) and
1658
+ not inBarrier ( node2 , state ) and
1654
1659
apc = getHeadContent ( ap ) and
1655
1660
readStepCand0 ( node1 , apc , c , node2 )
1656
1661
)
@@ -1761,6 +1766,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1761
1766
or
1762
1767
viableImplArgNotCallContextReduced ( call , arg , outercc )
1763
1768
) and
1769
+ not outBarrier ( arg , state ) and
1770
+ not inBarrier ( p , state ) and
1764
1771
callEdgeArgParamRestrictedInlineLate ( call , inner , arg , p , allowsFieldFlow , apa ) and
1765
1772
( if allowsFieldFlow = false then emptyAp = true else any ( ) ) and
1766
1773
if allowsFieldFlowThrough ( call , inner )
@@ -1888,6 +1895,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1888
1895
ApOption argAp , Typ t , Ap ap , ApApprox apa
1889
1896
) {
1890
1897
instanceofCcNoCall ( cc ) and
1898
+ not outBarrier ( ret , state ) and
1891
1899
fwdFlow ( ret , state , cc , summaryCtx , argT , argAp , t , ap , apa )
1892
1900
}
1893
1901
@@ -1925,6 +1933,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
1925
1933
exists ( RetNodeEx ret , CcNoCall innercc , boolean allowsFieldFlow |
1926
1934
fwdFlowIntoRet ( ret , state , innercc , summaryCtx , argT , argAp , t , ap , apa ) and
1927
1935
fwdFlowOutValidEdge ( call , ret , innercc , inner , out , outercc , apa , allowsFieldFlow ) and
1936
+ not inBarrier ( out , state ) and
1928
1937
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
1929
1938
)
1930
1939
}
@@ -2018,6 +2027,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2018
2027
fwdFlow ( pragma [ only_bind_into ] ( ret ) , state , ccc ,
2019
2028
TParamNodeSome ( pragma [ only_bind_into ] ( summaryCtx .asNode ( ) ) ) , TypOption:: some ( argT ) ,
2020
2029
pragma [ only_bind_into ] ( apSome ( argAp ) ) , t , ap , pragma [ only_bind_into ] ( apa ) ) and
2030
+ not outBarrier ( ret , state ) and
2021
2031
kind = ret .getKind ( ) and
2022
2032
parameterFlowThroughAllowed ( summaryCtx , kind ) and
2023
2033
argApa = getApprox ( argAp ) and
@@ -2839,6 +2849,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2839
2849
fwdFlowThroughStep1 ( pn1 , pn2 , pn3 , call , cc , state , ccc , summaryCtx , argT , argAp , t ,
2840
2850
ap , apa , ret , innerArgApa ) and
2841
2851
flowThroughOutOfCall ( call , ccc , ret , node , allowsFieldFlow , innerArgApa , apa ) and
2852
+ not inBarrier ( node , state ) and
2842
2853
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
2843
2854
)
2844
2855
}
@@ -2926,11 +2937,15 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2926
2937
|
2927
2938
jumpStepEx ( mid , node ) and
2928
2939
state = state0 and
2940
+ not outBarrier ( mid , state ) and
2941
+ not inBarrier ( node , state ) and
2929
2942
t = t0 and
2930
2943
label = ""
2931
2944
or
2932
2945
additionalJumpStep ( mid , node , label ) and
2933
2946
state = state0 and
2947
+ not outBarrier ( mid , state ) and
2948
+ not inBarrier ( node , state ) and
2934
2949
t = getNodeTyp ( node ) and
2935
2950
ap instanceof ApNil
2936
2951
or
@@ -2967,6 +2982,7 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
2967
2982
pn1 = TStagePathNodeMid ( ret , state , innercc , summaryCtx , argT , argAp , t , ap ) and
2968
2983
fwdFlowIntoRet ( ret , state , innercc , summaryCtx , argT , argAp , t , ap , apa ) and
2969
2984
fwdFlowOutValidEdge ( _, ret , innercc , _, node , cc , apa , allowsFieldFlow ) and
2985
+ not inBarrier ( node , state ) and
2970
2986
label = "" and
2971
2987
if allowsFieldFlow = false then ap instanceof ApNil else any ( )
2972
2988
)
0 commit comments