File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed
Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2015 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+ // Regression test for issue #20533. At some point, only 1 out of the
12+ // 3 errors below were being reported.
13+
14+ use std:: marker:: PhantomData ;
15+
16+ fn foo < ' a , T > ( _x : & ' a T ) -> PhantomData < & ' a ( ) > {
17+ PhantomData
18+ }
19+
20+ struct Wrap < T > ( T ) ;
21+
22+ fn bar < ' a , T > ( _x : & ' a T ) -> Wrap < PhantomData < & ' a ( ) > > {
23+ Wrap ( PhantomData )
24+ }
25+
26+ struct Baked < ' a > ( PhantomData < & ' a ( ) > ) ;
27+
28+ fn baz < ' a , T > ( _x : & ' a T ) -> Baked < ' a > {
29+ Baked ( PhantomData )
30+ }
31+
32+ struct AffineU32 ( u32 ) ;
33+
34+ fn main ( ) {
35+ {
36+ let a = AffineU32 ( 1_u32 ) ;
37+ let x = foo ( & a) ;
38+ drop ( a) ; //~ ERROR cannot move out of `a`
39+ drop ( x) ;
40+ }
41+ {
42+ let a = AffineU32 ( 1_u32 ) ;
43+ let x = bar ( & a) ;
44+ drop ( a) ; //~ ERROR cannot move out of `a`
45+ drop ( x) ;
46+ }
47+ {
48+ let a = AffineU32 ( 1_u32 ) ;
49+ let x = baz ( & a) ;
50+ drop ( a) ; //~ ERROR cannot move out of `a`
51+ drop ( x) ;
52+ }
53+ }
54+
You can’t perform that action at this time.
0 commit comments