@@ -1707,6 +1707,87 @@ mod builtins {
17071707 let f = 123.0f64 ; // $ certainType=f:f64
17081708 let t = true ; // $ certainType=t:bool
17091709 let f = false ; // $ certainType=f:bool
1710+
1711+ trait MyTrait < T > {
1712+ fn my_method ( & self ) -> & T ;
1713+
1714+ fn my_func ( ) -> T ;
1715+ }
1716+
1717+ impl < T : Default , const N : usize > MyTrait < T > for [ T ; N ] {
1718+ fn my_method ( & self ) -> & T {
1719+ self . get ( 0 ) . unwrap ( ) // $ MISSING: target=get target=unwrap
1720+ }
1721+
1722+ fn my_func ( ) -> T {
1723+ T :: default ( ) // $ target=default
1724+ }
1725+ }
1726+
1727+ let x = [ 1 , 2 , 3 ] . my_method ( ) ; // $ target=my_method type=x:&T.i32
1728+ let x = <[ _ ; 3 ] >:: my_method ( & [ 1 , 2 , 3 ] ) ; // $ target=my_method type=x:&T.i32
1729+ let x = <[ i32 ; 3 ] >:: my_func ( ) ; // $ MISSING: target=my_func type=x:i32
1730+
1731+ impl < T : Default > MyTrait < T > for [ T ] {
1732+ fn my_method ( & self ) -> & T {
1733+ self . get ( 0 ) . unwrap ( ) // $ target=get target=unwrap
1734+ }
1735+
1736+ fn my_func ( ) -> T {
1737+ T :: default ( ) // $ target=default
1738+ }
1739+ }
1740+
1741+ let s: & [ i32 ] = & [ 1 , 2 , 3 ] ;
1742+ let x = s. my_method ( ) ; // $ target=my_method type=x:&T.i32
1743+ let x = <[ _ ] >:: my_method ( s) ; // $ target=my_method type=x:&T.i32
1744+ let x = <[ i32 ] >:: my_func ( ) ; // $ MISSING: target=my_func type=x:i32
1745+
1746+ impl < T : Default > MyTrait < T > for ( T , i32 ) {
1747+ fn my_method ( & self ) -> & T {
1748+ & self . 0
1749+ }
1750+
1751+ fn my_func ( ) -> T {
1752+ T :: default ( ) // $ target=default
1753+ }
1754+ }
1755+
1756+ let p = ( 42 , 7 ) ;
1757+ let x = p. my_method ( ) ; // $ target=my_method type=x:&T.i32
1758+ let x = <( _ , _ ) >:: my_method ( & p) ; // $ target=my_method type=x:&T.i32
1759+ let x = <( i32 , i32 ) >:: my_func ( ) ; // $ MISSING: target=my_func type=x:i32
1760+
1761+ impl < T : Default > MyTrait < T > for & T {
1762+ fn my_method ( & self ) -> & T {
1763+ * self // $ target=deref
1764+ }
1765+
1766+ fn my_func ( ) -> T {
1767+ T :: default ( ) // $ target=default
1768+ }
1769+ }
1770+
1771+ let r = & 42 ;
1772+ let x = r. my_method ( ) ; // $ target=my_method type=x:&T.i32
1773+ let x = <& _ >:: my_method ( & r) ; // $ target=my_method type=x:&T.i32
1774+ let x = <& i32 >:: my_func ( ) ; // $ MISSING: target=my_func type=x:i32
1775+
1776+ impl < T : Default > MyTrait < T > for * mut T {
1777+ fn my_method ( & self ) -> & T {
1778+ unsafe { & * * self } // $ target=deref target=deref
1779+ }
1780+
1781+ fn my_func ( ) -> T {
1782+ T :: default ( ) // $ target=default
1783+ }
1784+ }
1785+
1786+ let mut v = 42 ;
1787+ let p: * mut i32 = & mut v;
1788+ let x = unsafe { p. my_method ( ) } ; // $ target=my_method type=x:&T.i32
1789+ let x = unsafe { <* mut _ >:: my_method ( & p) } ; // $ target=my_method type=x:&T.i32
1790+ let x = <* mut i32 >:: my_func ( ) ; // $ MISSING: target=my_func type=x:i32
17101791 }
17111792}
17121793
0 commit comments