fn enum_metadata(cx: &mut CrateContext,
enum_type: ty::t,
enum_def_id: ast::def_id,
- substs: &ty::substs,
+ // _substs is only needed in the other version. Will go away with new snapshot.
+ _substs: &ty::substs,
span: span)
-> DIType {
};
}
-fn boxed_vec_metadata(cx: &mut CrateContext,
- element_type: ty::t,
- span: span)
- -> DICompositeType {
+fn vec_metadata(cx: &mut CrateContext,
+ element_type: ty::t,
+ span: span)
+ -> DICompositeType {
let element_type_metadata = type_metadata(cx, element_type, span);
let element_llvm_type = type_of::type_of(cx, element_type);
// fill alloc elements
let member_type_metadata = &[int_type_metadata, int_type_metadata, array_type_metadata];
- let vec_metadata = composite_type_metadata(
+ return composite_type_metadata(
cx,
vec_llvm_type,
vec_type_name,
member_names,
member_type_metadata,
span);
+}
+
+fn boxed_vec_metadata(cx: &mut CrateContext,
+ element_type: ty::t,
+ span: span)
+ -> DICompositeType {
+
+ let element_llvm_type = type_of::type_of(cx, element_type);
+ let vec_llvm_type = Type::vec(cx.sess.targ_cfg.arch, &element_llvm_type);
+ let vec_type_name: &str = fmt!("[%s]", ty_to_str(cx.tcx, element_type));
+ let vec_metadata = vec_metadata(cx, element_type, span);
return boxed_type_metadata(
cx,
ty::vstore_fixed(len) => {
fixed_vec_metadata(cx, i8_t, len + 1, span)
},
- ty::vstore_uniq |
+ ty::vstore_uniq => {
+ let vec_metadata = vec_metadata(cx, i8_t, span);
+ pointer_type_metadata(cx, t, vec_metadata)
+ }
ty::vstore_box => {
- let box_metadata = boxed_vec_metadata(cx, i8_t, span);
- pointer_type_metadata(cx, t, box_metadata)
+ let boxed_vec_metadata = boxed_vec_metadata(cx, i8_t, span);
+ pointer_type_metadata(cx, t, boxed_vec_metadata)
}
ty::vstore_slice(_region) => {
vec_slice_metadata(cx, t, i8_t, span)
match *vstore {
ty::vstore_fixed(len) => {
fixed_vec_metadata(cx, mt.ty, len, span)
- },
- ty::vstore_uniq |
- ty::vstore_box => {
- let box_metadata = boxed_vec_metadata(cx, mt.ty, span);
- pointer_type_metadata(cx, t, box_metadata)
- },
+ }
+ ty::vstore_uniq if ty::type_contents(cx.tcx, mt.ty).contains_managed() => {
+ let boxed_vec_metadata = boxed_vec_metadata(cx, mt.ty, span);
+ pointer_type_metadata(cx, t, boxed_vec_metadata)
+ }
+ ty::vstore_uniq => {
+ let vec_metadata = vec_metadata(cx, mt.ty, span);
+ pointer_type_metadata(cx, t, vec_metadata)
+ }
+ ty::vstore_box => {
+ let boxed_vec_metadata = boxed_vec_metadata(cx, mt.ty, span);
+ pointer_type_metadata(cx, t, boxed_vec_metadata)
+ }
ty::vstore_slice(_) => {
vec_slice_metadata(cx, t, mt.ty, span)
}
// debugger:print *((uint64_t[3]*)(managed->val.elements))
// check:$2 = {7, 8, 9}
-// debugger:print unique->val.fill
+// debugger:print unique->fill
// check:$3 = 32
-// debugger:print *((uint64_t[4]*)(unique->val.elements))
+// debugger:print *((uint64_t[4]*)(unique->elements))
// check:$4 = {10, 11, 12, 13}
fn main() {
+++ /dev/null
-// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
-
-// compile-flags:-Z extra-debug-info
-// debugger:set print pretty off
-// debugger:break zzz
-// debugger:run
-// debugger:finish
-
-// debugger:print *ordinary_unique
-// check:$1 = {-1, -2}
-
-// debugger:print managed_within_unique.val->x
-// check:$2 = -3
-
-// debugger:print managed_within_unique.val->y->val
-// check:$3 = -4
-
-struct ContainsManaged
-{
- x: int,
- y: @int
-}
-
-fn main() {
-
- let ordinary_unique = ~(-1, -2);
-
-
- // This is a special case: Normally values allocated in the exchange heap are not boxed, unless,
- // however, if they contain managed pointers.
- // This test case verifies that both cases are handled correctly.
- let managed_within_unique = ~ContainsManaged { x: -3, y: @-4 };
-
- zzz();
-}
-
-fn zzz() {()}
\ No newline at end of file
--- /dev/null
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
+
+// compile-flags:-Z extra-debug-info
+// debugger:break zzz
+// debugger:run
+// debugger:finish
+
+// debugger:print unique->val.elements[0]->val
+// check:$1 = 10
+
+// debugger:print unique->val.elements[1]->val
+// check:$2 = 11
+
+// debugger:print unique->val.elements[2]->val
+// check:$3 = 12
+
+// debugger:print unique->val.elements[3]->val
+// check:$4 = 13
+
+fn main() {
+
+ let unique: ~[@i64] = ~[@10, @11, @12, @13];
+
+ zzz();
+}
+
+fn zzz() {()}
\ No newline at end of file
--- /dev/null
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
+
+// compile-flags:-Z extra-debug-info
+// debugger:set print pretty off
+// debugger:break zzz
+// debugger:run
+// debugger:finish
+
+// debugger:print *ordinary_unique
+// check:$1 = {-1, -2}
+
+// debugger:print managed_within_unique.val->x
+// check:$2 = -3
+
+// debugger:print managed_within_unique.val->y->val
+// check:$3 = -4
+
+struct ContainsManaged
+{
+ x: int,
+ y: @int
+}
+
+fn main() {
+
+ let ordinary_unique = ~(-1, -2);
+
+
+ // This is a special case: Normally values allocated in the exchange heap are not boxed, unless,
+ // however, if they contain managed pointers.
+ // This test case verifies that both cases are handled correctly.
+ let managed_within_unique = ~ContainsManaged { x: -3, y: @-4 };
+
+ zzz();
+}
+
+fn zzz() {()}
\ No newline at end of file