Skip to content

Commit f42ac85

Browse files
committed
---
yaml --- r: 216319 b: refs/heads/stable c: 1f79348 h: refs/heads/master i: 216317: 70e916d 216315: a3a8010 216311: 7080c73 216303: c0877c0 216287: b618660 216255: e5f1761 216191: 1beccef 216063: 4c5ba02 v: v3
1 parent db164b5 commit f42ac85

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ refs/heads/tmp: 378a370ff2057afeb1eae86eb6e78c476866a4a6
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: a5286998df566e736b32f6795bfc3803bdaf453d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: b892264ea4f048feb5f380d3e659d82ba463f5b7
32+
refs/heads/stable: 1f793482930ab98c3ecb2da7507cd4d55ace023c
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
// Check that one cannot subvert Drop Check rule via a user-defined
12+
// Clone implementation.
13+
14+
#![allow(unused_variables, unused_assignments)]
15+
16+
struct D<T:Copy>(T, &'static str);
17+
18+
#[derive(Copy)]
19+
struct S<'a>(&'a D<i32>, &'static str);
20+
impl<'a> Clone for S<'a> {
21+
fn clone(&self) -> S<'a> {
22+
println!("cloning `S(_, {})` and thus accessing: {}", self.1, (self.0).0);
23+
S(self.0, self.1)
24+
}
25+
}
26+
27+
impl<T:Copy> Drop for D<T> {
28+
fn drop(&mut self) {
29+
println!("calling Drop for {}", self.1);
30+
let _call = self.0.clone();
31+
}
32+
}
33+
34+
fn main() {
35+
let (d2, d1);
36+
d1 = D(34, "d1");
37+
d2 = D(S(&d1, "inner"), "d2"); //~ ERROR `d1` does not live long enough
38+
}

0 commit comments

Comments
 (0)