File tree Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Expand file tree Collapse file tree 3 files changed +105
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // Test method calls with self as an argument cannot subvert type checking.
12+
13+ struct Foo ;
14+
15+ impl Foo {
16+ fn bar ( & self ) { }
17+ }
18+
19+ fn main ( ) {
20+ let x = Foo ;
21+ Foo :: bar ( x) ; //~ERROR mismatched types: expected `&Foo`, found `Foo`
22+ Foo :: bar ( & & x) ; //~ERROR mismatched types: expected `&Foo`, found `&&Foo`
23+ Foo :: bar ( & 42 i) ; //~ERROR mismatched types: expected `&Foo`, found `&int`
24+ }
Original file line number Diff line number Diff line change 1+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // Test method calls with self as an argument cannot subvert borrow checking.
12+
13+ struct Foo ;
14+
15+ impl Foo {
16+ fn bar ( & self ) { }
17+ fn baz ( & mut self ) { }
18+ }
19+
20+ fn main ( ) {
21+ let mut x = Foo ;
22+ let y = & mut x;
23+ Foo :: bar ( & x) ; //~ERROR cannot borrow `x`
24+
25+ let x = Foo ;
26+ Foo :: baz ( & x) ; //~ERROR cannot borrow immutable dereference of `&`-pointer as mutable
27+ }
Original file line number Diff line number Diff line change 1+ // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // Test method calls with self as an argument
12+
13+ static mut COUNT : uint = 1 ;
14+
15+ struct Foo ;
16+
17+ impl Foo {
18+ fn foo ( self , x : & Foo ) {
19+ unsafe { COUNT *= 2 ; }
20+ // Test internal call.
21+ Foo :: bar ( & self ) ;
22+ Foo :: bar ( x) ;
23+
24+ Foo :: baz ( self ) ;
25+ Foo :: baz ( * x) ;
26+
27+ Foo :: qux ( box self ) ;
28+ Foo :: qux ( box * x) ;
29+ }
30+
31+ fn bar ( & self ) {
32+ unsafe { COUNT *= 3 ; }
33+ }
34+
35+ fn baz ( self ) {
36+ unsafe { COUNT *= 5 ; }
37+ }
38+
39+ fn qux ( self : Box < Foo > ) {
40+ unsafe { COUNT *= 7 ; }
41+ }
42+ }
43+
44+ fn main ( ) {
45+ let x = Foo ;
46+ // Test external call.
47+ Foo :: bar ( & x) ;
48+ Foo :: baz ( x) ;
49+ Foo :: qux ( box x) ;
50+
51+ x. foo ( & x) ;
52+
53+ unsafe { assert ! ( COUNT == 2 u* 3 * 3 * 3 * 5 * 5 * 5 * 7 * 7 * 7 ) ; }
54+ }
You can’t perform that action at this time.
0 commit comments