@@ -516,25 +516,12 @@ private predicate clearsContentEx(NodeEx n, Content c) {
516516}
517517
518518pragma [ nomagic]
519- private predicate storeSet (
520- NodeEx node1 , ContentSet c , NodeEx node2 , DataFlowType contentType , DataFlowType containerType ,
521- Configuration config
522- ) {
523- storeSet ( node1 .asNode ( ) , c , node2 .asNode ( ) , contentType , containerType ) and
524- stepFilter ( node1 , node2 , config ) and
525- read ( _, c .getAStoreContent ( ) , _, config )
526- }
527-
528- // inline to reduce fan-out via `getAStoreContent`
529- pragma [ inline]
530519private predicate store (
531- NodeEx node1 , Content c , NodeEx node2 , DataFlowType contentType , DataFlowType containerType ,
532- Configuration config
520+ NodeEx node1 , TypedContent tc , NodeEx node2 , DataFlowType contentType , Configuration config
533521) {
534- exists ( ContentSet cs |
535- storeSet ( node1 , cs , node2 , contentType , containerType , config ) and
536- c = cs .getAStoreContent ( )
537- )
522+ store ( node1 .asNode ( ) , tc , node2 .asNode ( ) , contentType ) and
523+ read ( _, tc .getContent ( ) , _, config ) and
524+ stepFilter ( node1 , node2 , config )
538525}
539526
540527pragma [ nomagic]
@@ -602,7 +589,7 @@ private module Stage1 {
602589 exists ( NodeEx mid |
603590 useFieldFlow ( config ) and
604591 fwdFlow ( mid , cc , config ) and
605- storeSet ( mid , _, node , _ , _, config )
592+ store ( mid , _, node , _, config )
606593 )
607594 or
608595 // read
@@ -644,11 +631,12 @@ private module Stage1 {
644631 */
645632 pragma [ nomagic]
646633 private predicate fwdFlowConsCand ( Content c , Configuration config ) {
647- exists ( NodeEx mid , NodeEx node |
634+ exists ( NodeEx mid , NodeEx node , TypedContent tc |
648635 not fullBarrier ( node , config ) and
649636 useFieldFlow ( config ) and
650637 fwdFlow ( mid , _, config ) and
651- store ( mid , c , node , _, _, config )
638+ store ( mid , tc , node , _, config ) and
639+ c = tc .getContent ( )
652640 )
653641 }
654642
@@ -748,9 +736,9 @@ private module Stage1 {
748736 )
749737 or
750738 // store
751- exists ( ContentSet c |
752- revFlowStoreSet ( c , node , toReturn , config ) and
753- revFlowConsCandSet ( c , config )
739+ exists ( Content c |
740+ revFlowStore ( c , node , toReturn , config ) and
741+ revFlowConsCand ( c , config )
754742 )
755743 or
756744 // read
@@ -791,18 +779,12 @@ private module Stage1 {
791779 }
792780
793781 pragma [ nomagic]
794- private predicate revFlowConsCandSet ( ContentSet c , Configuration config ) {
795- revFlowConsCand ( c .getAStoreContent ( ) , config )
796- }
797-
798- pragma [ nomagic]
799- private predicate revFlowStoreSet (
800- ContentSet c , NodeEx node , boolean toReturn , Configuration config
801- ) {
802- exists ( NodeEx mid |
782+ private predicate revFlowStore ( Content c , NodeEx node , boolean toReturn , Configuration config ) {
783+ exists ( NodeEx mid , TypedContent tc |
803784 revFlow ( mid , toReturn , pragma [ only_bind_into ] ( config ) ) and
804- fwdFlowConsCandSet ( c , _, pragma [ only_bind_into ] ( config ) ) and
805- storeSet ( node , c , mid , _, _, config )
785+ fwdFlowConsCandSet ( _, c , pragma [ only_bind_into ] ( config ) ) and
786+ store ( node , tc , mid , _, config ) and
787+ c = tc .getContent ( )
806788 )
807789 }
808790
@@ -812,11 +794,8 @@ private module Stage1 {
812794 */
813795 pragma [ nomagic]
814796 private predicate revFlowIsReadAndStored ( Content c , Configuration conf ) {
815- revFlowConsCand ( c , pragma [ only_bind_into ] ( conf ) ) and
816- exists ( ContentSet cs |
817- revFlowStoreSet ( cs , _, _, pragma [ only_bind_into ] ( conf ) ) and
818- c = cs .getAStoreContent ( )
819- )
797+ revFlowConsCand ( c , conf ) and
798+ revFlowStore ( c , _, _, conf )
820799 }
821800
822801 pragma [ nomagic]
@@ -901,11 +880,11 @@ private module Stage1 {
901880 NodeEx node1 , Ap ap1 , TypedContent tc , NodeEx node2 , DataFlowType contentType ,
902881 Configuration config
903882 ) {
904- exists ( Content c , DataFlowType containerType |
905- revFlowIsReadAndStored ( pragma [ only_bind_into ] ( c ) , pragma [ only_bind_into ] ( config ) ) and
906- store ( node1 , c , node2 , contentType , containerType , config ) and
883+ exists ( Content c |
884+ revFlowIsReadAndStored ( c , pragma [ only_bind_into ] ( config ) ) and
907885 revFlow ( node2 , pragma [ only_bind_into ] ( config ) ) and
908- tc = MkTypedContent ( c , containerType ) and
886+ store ( node1 , tc , node2 , contentType , config ) and
887+ c = tc .getContent ( ) and
909888 exists ( ap1 )
910889 )
911890 }
@@ -1978,7 +1957,7 @@ private module Stage3 {
19781957 private predicate flowIntoCall = flowIntoCallNodeCand2 / 5 ;
19791958
19801959 pragma [ nomagic]
1981- predicate clearSet ( NodeEx node , ContentSet c , Configuration config ) {
1960+ private predicate clearSet ( NodeEx node , ContentSet c , Configuration config ) {
19821961 PrevStage:: revFlow ( node , config ) and
19831962 clearsContentCached ( node .asNode ( ) , c )
19841963 }
@@ -4270,7 +4249,7 @@ private module Subpaths {
42704249 result .isHidden ( ) and
42714250 exists ( NodeEx n1 , NodeEx n2 | n1 = n .getNodeEx ( ) and n2 = result .getNodeEx ( ) |
42724251 localFlowBigStep ( n1 , _, n2 , _, _, _, _, _) or
4273- storeSet ( n1 , _, n2 , _ , _, _) or
4252+ store ( n1 , _, n2 , _, _) or
42744253 readSet ( n1 , _, n2 , _)
42754254 )
42764255 }
@@ -4921,11 +4900,10 @@ private module FlowExploration {
49214900 PartialPathNodeFwd mid , PartialAccessPath ap1 , TypedContent tc , NodeEx node ,
49224901 PartialAccessPath ap2
49234902 ) {
4924- exists ( NodeEx midNode , Content c , DataFlowType contentType , DataFlowType containerType |
4903+ exists ( NodeEx midNode , DataFlowType contentType |
49254904 midNode = mid .getNodeEx ( ) and
49264905 ap1 = mid .getAp ( ) and
4927- store ( midNode , c , node , contentType , containerType , mid .getConfiguration ( ) ) and
4928- tc = MkTypedContent ( c , containerType ) and
4906+ store ( midNode , tc , node , contentType , mid .getConfiguration ( ) ) and
49294907 ap2 .getHead ( ) = tc and
49304908 ap2 .len ( ) = unbindInt ( ap1 .len ( ) + 1 ) and
49314909 compatibleTypes ( ap1 .getType ( ) , contentType )
@@ -4947,11 +4925,10 @@ private module FlowExploration {
49474925 PartialPathNodeFwd mid , PartialAccessPath ap , TypedContent tc , NodeEx node , CallContext cc ,
49484926 Configuration config
49494927 ) {
4950- exists ( NodeEx midNode , Content c |
4928+ exists ( NodeEx midNode |
49514929 midNode = mid .getNodeEx ( ) and
49524930 ap = mid .getAp ( ) and
4953- read ( midNode , c , node , pragma [ only_bind_into ] ( config ) ) and
4954- tc .getContent ( ) = c and
4931+ read ( midNode , tc .getContent ( ) , node , pragma [ only_bind_into ] ( config ) ) and
49554932 ap .getHead ( ) = tc and
49564933 pragma [ only_bind_into ] ( config ) = mid .getConfiguration ( ) and
49574934 cc = mid .getCallContext ( )
@@ -5202,12 +5179,13 @@ private module FlowExploration {
52025179 private predicate revPartialPathStoreStep (
52035180 PartialPathNodeRev mid , RevPartialAccessPath ap , Content c , NodeEx node , Configuration config
52045181 ) {
5205- exists ( NodeEx midNode , DataFlowType contentType , DataFlowType containerType , TypedContent tc |
5182+ exists ( NodeEx midNode , TypedContent tc |
52065183 midNode = mid .getNodeEx ( ) and
52075184 ap = mid .getAp ( ) and
5208- store ( node , c , midNode , contentType , containerType , config ) and
5209- tc = MkTypedContent ( c , containerType ) and
5210- config = mid .getConfiguration ( )
5185+ store ( node , tc , midNode , _, config ) and
5186+ ap .getHead ( ) = c and
5187+ config = mid .getConfiguration ( ) and
5188+ tc .getContent ( ) = c
52115189 )
52125190 }
52135191
0 commit comments