@@ -89,3 +89,68 @@ public static void Sink(object o) { }
8989
9090 static T Source < T > ( object source ) => throw null ;
9191}
92+
93+ public class DFieldProps
94+ {
95+ object FieldProp0
96+ {
97+ get { return field ; }
98+ set { field = value ; }
99+ } = Source < object > ( 0 ) ;
100+
101+ object FieldProp1
102+ {
103+ get { return field ; }
104+ set { field = value ; }
105+ }
106+
107+ object FieldProp2
108+ {
109+ get { return field ; }
110+ set
111+ {
112+ var x = value ;
113+ field = x ;
114+ }
115+ }
116+
117+ static object StaticFieldProp
118+ {
119+ get { return field ; }
120+ set { field = value ; }
121+ }
122+
123+ private void M ( )
124+ {
125+ var d0 = new DFieldProps ( ) ;
126+ Sink ( d0 . FieldProp0 ) ; // $ hasValueFlow=0
127+ Sink ( d0 . FieldProp1 ) ; // no flow
128+ Sink ( d0 . FieldProp2 ) ; // no flow
129+ Sink ( DFieldProps . StaticFieldProp ) ; // no flow
130+
131+ var d1 = new DFieldProps ( ) ;
132+ var o1 = Source < object > ( 1 ) ;
133+ d1 . FieldProp1 = o1 ;
134+ Sink ( d1 . FieldProp0 ) ; // $ hasValueFlow=0
135+ Sink ( d1 . FieldProp1 ) ; // $ hasValueFlow=1
136+ Sink ( d1 . FieldProp2 ) ; // no flow
137+ Sink ( DFieldProps . StaticFieldProp ) ; // no flow
138+
139+ var d2 = new DFieldProps ( ) ;
140+ var o2 = Source < object > ( 2 ) ;
141+ d2 . FieldProp2 = o2 ;
142+ Sink ( d2 . FieldProp0 ) ; // $ hasValueFlow=0
143+ Sink ( d2 . FieldProp1 ) ; // no flow
144+ Sink ( d2 . FieldProp2 ) ; // $ hasValueFlow=2
145+ Sink ( DFieldProps . StaticFieldProp ) ; // no flow
146+
147+ var o3 = Source < object > ( 3 ) ;
148+ DFieldProps . StaticFieldProp = o3 ;
149+ Sink ( DFieldProps . StaticFieldProp ) ; // $ hasValueFlow=3
150+ }
151+
152+ public static void Sink ( object o ) { }
153+
154+ static T Source < T > ( object source ) => throw null ;
155+
156+ }
0 commit comments