@@ -712,6 +712,11 @@ private class CapturedVariableContent extends Content, TCapturedVariableContent
712712 override string toString ( ) { result = "captured " + v }
713713}
714714
715+ /** A value referred to by a reference. */
716+ final class ReferenceContent extends Content , TReferenceContent {
717+ override string toString ( ) { result = "&ref" }
718+ }
719+
715720/**
716721 * An element in an array.
717722 */
@@ -1051,6 +1056,13 @@ module RustDataFlow implements InputSig<Location> {
10511056 [ "crate::option::Option::Some" , "crate::result::Result::Ok" ]
10521057 )
10531058 or
1059+ exists ( PrefixExprCfgNode deref |
1060+ c instanceof ReferenceContent and
1061+ deref .getOperatorName ( ) = "*" and
1062+ node1 .asExpr ( ) = deref .getExpr ( ) and
1063+ node2 .asExpr ( ) = deref
1064+ )
1065+ or
10541066 VariableCapture:: readStep ( node1 , c , node2 )
10551067 )
10561068 or
@@ -1128,6 +1140,12 @@ module RustDataFlow implements InputSig<Location> {
11281140 node2 .( PostUpdateNode ) .getPreUpdateNode ( ) .asExpr ( ) = index .getBase ( )
11291141 )
11301142 or
1143+ exists ( RefExprCfgNode ref |
1144+ c instanceof ReferenceContent and
1145+ node1 .asExpr ( ) = ref .getExpr ( ) and
1146+ node2 .asExpr ( ) = ref
1147+ )
1148+ or
11311149 VariableCapture:: storeStep ( node1 , c , node2 )
11321150 }
11331151
@@ -1395,7 +1413,8 @@ private module Cached {
13951413 e =
13961414 [
13971415 any ( IndexExprCfgNode i ) .getBase ( ) , any ( FieldExprCfgNode access ) .getExpr ( ) ,
1398- any ( TryExprCfgNode try ) .getExpr ( )
1416+ any ( TryExprCfgNode try ) .getExpr ( ) ,
1417+ any ( PrefixExprCfgNode pe | pe .getOperatorName ( ) = "*" ) .getExpr ( )
13991418 ]
14001419 } or
14011420 TSsaNode ( SsaImpl:: DataFlowIntegration:: SsaNode node ) or
@@ -1495,7 +1514,8 @@ private module Cached {
14951514 TStructFieldContent ( StructCanonicalPath s , string field ) {
14961515 field = s .getStruct ( ) .getFieldList ( ) .( RecordFieldList ) .getAField ( ) .getName ( ) .getText ( )
14971516 } or
1498- TCapturedVariableContent ( VariableCapture:: CapturedVariable v )
1517+ TCapturedVariableContent ( VariableCapture:: CapturedVariable v ) or
1518+ TReferenceContent ( )
14991519
15001520 cached
15011521 newtype TContentSet = TSingletonContentSet ( Content c )
0 commit comments