]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/issue-9382.rs
librustc: Pass the correct type when adding cleanups.
[rust.git] / src / test / run-pass / issue-9382.rs
1  // Copyright 2013 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 #[allow(unnecessary_allocation)];
12
13 // Tests for a previous bug that occured due to an interaction
14 // between struct field initialization and the auto-coercion
15 // from a vector to a slice. The drop glue was being invoked on
16 // the temporary slice with a wrong type, triggering an LLVM assert.
17
18 struct Thing1<'self> {
19     baz: &'self [~int],
20     bar: ~u64,
21 }
22
23 struct Thing2<'self> {
24     baz: &'self [~int],
25     bar: u64,
26 }
27
28 pub fn main() {
29     let _t1_fixed = Thing1 {
30         baz: [],
31         bar: ~32,
32     };
33     let _t1_uniq = Thing1 {
34         baz: ~[],
35         bar: ~32,
36     };
37     let _t1_at = Thing1 {
38         baz: @[],
39         bar: ~32,
40     };
41     let _t2_fixed = Thing2 {
42         baz: [],
43         bar: 32,
44     };
45     let _t2_uniq = Thing2 {
46         baz: ~[],
47         bar: 32,
48     };
49     let _t2_at = Thing2 {
50         baz: @[],
51         bar: 32,
52     };
53 }