@@ -102,7 +102,7 @@ fn test_set_var_field() {
102102 match e1 {
103103 MyFieldEnum :: C { field_c : i } => sink ( i) ,
104104 MyFieldEnum :: D { field_d : i } => sink ( i) , // $ hasValueFlow=5
105- MyFieldEnum :: E { field_e : o } => ( )
105+ MyFieldEnum :: E { field_e : o } => ( ) ,
106106 }
107107}
108108
@@ -258,18 +258,17 @@ fn test_enum_source() {
258258 match s {
259259 MyFieldEnum :: C { field_c : i } => sink ( i) ,
260260 MyFieldEnum :: D { field_d : i } => sink ( i) , // $ hasValueFlow=12
261- MyFieldEnum :: E { field_e : o } => ( )
261+ MyFieldEnum :: E { field_e : o } => ( ) ,
262262 }
263263
264264 let s = enum_source_nested ( 13 ) ;
265265 match s {
266266 MyFieldEnum :: C { field_c : i } => sink ( i) ,
267267 MyFieldEnum :: D { field_d : i } => sink ( i) ,
268- MyFieldEnum :: E { field_e : o } =>
269- {
268+ MyFieldEnum :: E { field_e : o } => {
270269 match o {
271270 Some ( i) => sink ( i) , // $ hasValueFlow=13
272- None => ( )
271+ None => ( ) ,
273272 }
274273 }
275274 }
@@ -281,13 +280,13 @@ fn test_enum_method_source() {
281280 match s {
282281 MyFieldEnum :: C { field_c : i } => sink ( i) , // $ hasValueFlow=13
283282 MyFieldEnum :: D { field_d : i } => sink ( i) ,
284- MyFieldEnum :: E { field_e : o } => ( )
283+ MyFieldEnum :: E { field_e : o } => ( ) ,
285284 }
286285}
287286
288287mod source_into_function {
289- use crate :: MyFieldEnum ;
290288 use super :: sink;
289+ use crate :: MyFieldEnum ;
291290
292291 // has a source model
293292 fn pass_source < A > ( _i : i64 , f : impl FnOnce ( i64 ) -> A ) -> A {
@@ -320,11 +319,10 @@ mod source_into_function {
320319 match e {
321320 MyFieldEnum :: C { field_c : i } => sink ( i) ,
322321 MyFieldEnum :: D { field_d : i } => sink ( i) ,
323- MyFieldEnum :: E { field_e : o } =>
324- {
322+ MyFieldEnum :: E { field_e : o } => {
325323 match o {
326324 Some ( i) => sink ( i) , // $ hasValueFlow=5
327- None => ( )
325+ None => ( ) ,
328326 }
329327 }
330328 }
@@ -333,22 +331,24 @@ mod source_into_function {
333331}
334332
335333mod sink_out_of_function {
336- use crate :: MyFieldEnum ;
337334 use super :: source;
335+ use crate :: MyFieldEnum ;
338336
339337 // has a sink model
340- fn pass_sink ( f : impl FnOnce ( ( ) ) -> i64 ) { }
338+ fn pass_sink ( f : impl FnOnce ( ( ) ) -> i64 ) { }
341339
342340 // has a sink model
343- fn pass_sink_nested ( f : impl FnOnce ( ( ) ) -> MyFieldEnum ) { }
341+ fn pass_sink_nested ( f : impl FnOnce ( ( ) ) -> MyFieldEnum ) { }
344342
345343 fn test_sink_out_of_function ( ) {
346344 let a = |a| source ( 1 ) ;
347345 pass_sink ( a) ; // $ hasValueFlow=1
348346
349347 let b = |_a| {
350348 let s = source ( 2 ) ;
351- MyFieldEnum :: E { field_e : Option :: Some ( s) }
349+ MyFieldEnum :: E {
350+ field_e : Option :: Some ( s) ,
351+ }
352352 } ;
353353 pass_sink_nested ( b) ; // $ hasValueFlow=2
354354 }
@@ -460,6 +460,17 @@ impl Ord for MyStruct2 {
460460 }
461461}
462462
463+ trait MyTrait3 {
464+ fn flow_through3 ( i : i64 ) -> i64 ;
465+ }
466+
467+ impl < T > MyTrait3 for T {
468+ // has an explicit model
469+ fn flow_through3 ( i : i64 ) -> i64 {
470+ 0
471+ }
472+ }
473+
463474fn test_trait_model < T : Ord > ( x : T ) {
464475 let x1 = source ( 20 ) . max ( 0 ) ;
465476 sink ( x1) ; // $ hasValueFlow=20
@@ -488,6 +499,12 @@ fn test_trait_model<T: Ord>(x: T) {
488499
489500 let x7 = ( source ( 28 ) as i32 ) < 1 ;
490501 sink ( x7) ;
502+
503+ let x8 = <( ) >:: flow_through2 ( source ( 29 ) ) ;
504+ sink ( x8) ; // $ hasValueFlow=29
505+
506+ let x9 = <( ) >:: flow_through3 ( source ( 30 ) ) ;
507+ sink ( x9) ; // $ hasValueFlow=30
491508}
492509
493510mod external_file;
0 commit comments