@@ -1410,8 +1410,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
14101410 bindingset [ node, ap, isStoreStep]
14111411 predicate stepFilter ( NodeEx node , Ap ap , boolean isStoreStep ) ;
14121412
1413- bindingset [ typ , contentType ]
1414- predicate typecheckStore ( Typ typ , DataFlowType contentType ) ;
1413+ bindingset [ t1 , t2 ]
1414+ predicate typecheck ( Typ t1 , Typ t2 ) ;
14151415
14161416 default predicate enableTypeFlow ( ) { any ( ) }
14171417 }
@@ -1641,7 +1641,9 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
16411641 not inBarrier ( node2 , state ) and
16421642 PrevStage:: storeStepCand ( node1 , apa1 , c , node2 , contentType , containerType ) and
16431643 t2 = getTyp ( containerType ) and
1644- typecheckStore ( t1 , contentType )
1644+ // We need to typecheck stores here, since reverse flow through a getter
1645+ // might have a different type here compared to inside the getter.
1646+ typecheck ( t1 , getTyp ( contentType ) )
16451647 )
16461648 }
16471649
@@ -3742,8 +3744,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
37423744 bindingset [ node, ap, isStoreStep]
37433745 predicate stepFilter ( NodeEx node , Ap ap , boolean isStoreStep ) { any ( ) }
37443746
3745- bindingset [ typ , contentType ]
3746- predicate typecheckStore ( Typ typ , DataFlowType contentType ) { any ( ) }
3747+ bindingset [ t1 , t2 ]
3748+ predicate typecheck ( Typ t1 , Typ t2 ) { any ( ) }
37473749
37483750 predicate enableTypeFlow ( ) { none ( ) }
37493751 }
@@ -3855,8 +3857,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
38553857 bindingset [ node, ap, isStoreStep]
38563858 predicate stepFilter ( NodeEx node , Ap ap , boolean isStoreStep ) { any ( ) }
38573859
3858- bindingset [ typ , contentType ]
3859- predicate typecheckStore ( Typ typ , DataFlowType contentType ) { any ( ) }
3860+ bindingset [ t1 , t2 ]
3861+ predicate typecheck ( Typ t1 , Typ t2 ) { any ( ) }
38603862 }
38613863
38623864 private module Stage3 = MkStage< Stage2 > :: Stage< Stage3Param > ;
@@ -3975,12 +3977,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
39753977 if clearExceptStore ( node , ap ) then isStoreStep = true else any ( )
39763978 }
39773979
3978- bindingset [ typ, contentType]
3979- predicate typecheckStore ( Typ typ , DataFlowType contentType ) {
3980- // We need to typecheck stores here, since reverse flow through a getter
3981- // might have a different type here compared to inside the getter.
3982- compatibleTypesFilter ( typ , contentType )
3983- }
3980+ bindingset [ t1, t2]
3981+ predicate typecheck ( Typ t1 , Typ t2 ) { compatibleTypesFilter ( t1 , t2 ) }
39843982 }
39853983
39863984 private module Stage4 = MkStage< Stage3 > :: Stage< Stage4Param > ;
@@ -4227,10 +4225,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
42274225 if clearExceptStore ( node , ap ) then isStoreStep = true else any ( )
42284226 }
42294227
4230- bindingset [ typ, contentType]
4231- predicate typecheckStore ( Typ typ , DataFlowType contentType ) {
4232- compatibleTypesFilter ( typ , contentType )
4233- }
4228+ bindingset [ t1, t2]
4229+ predicate typecheck ( Typ t1 , Typ t2 ) { compatibleTypesFilter ( t1 , t2 ) }
42344230 }
42354231
42364232 private module Stage5 = MkStage< Stage4 > :: Stage< Stage5Param > ;
@@ -4426,10 +4422,8 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
44264422 if clearExceptStore ( node , ap ) then isStoreStep = true else any ( )
44274423 }
44284424
4429- bindingset [ typ, contentType]
4430- predicate typecheckStore ( Typ typ , DataFlowType contentType ) {
4431- compatibleTypesFilter ( typ , contentType )
4432- }
4425+ bindingset [ t1, t2]
4426+ predicate typecheck ( Typ t1 , Typ t2 ) { compatibleTypesFilter ( t1 , t2 ) }
44334427 }
44344428
44354429 module Stage6 = MkStage< Stage5 > :: Stage< Stage6Param > ;
0 commit comments