diff --git a/src/rustc/metadata/astencode.rs b/src/rustc/metadata/astencode.rs index f0106953211..ac0b07cef4b 100644 --- a/src/rustc/metadata/astencode.rs +++ b/src/rustc/metadata/astencode.rs @@ -844,6 +844,12 @@ fn encode_side_tables_for_id(ecx: @e::encode_ctxt, } } } + + option::iter(tcx.borrowings.find(id)) {|_i| + ebml_w.tag(c::tag_table_borrowings) {|| + ebml_w.id(id); + } + } } impl decoder for ebml::doc { @@ -914,6 +920,8 @@ fn decode_side_tables(xcx: extended_decode_ctxt, dcx.maps.copy_map.insert(id, ()); } else if tag == (c::tag_table_spill as uint) { dcx.maps.spill_map.insert(id, ()); + } else if tag == (c::tag_table_borrowings as uint) { + dcx.tcx.borrowings.insert(id, ()); } else { let val_doc = entry_doc[c::tag_table_val]; let val_dsr = ebml::ebml_deserializer(val_doc); diff --git a/src/rustc/metadata/common.rs b/src/rustc/metadata/common.rs index 33ae58d3a05..4262266a0d9 100644 --- a/src/rustc/metadata/common.rs +++ b/src/rustc/metadata/common.rs @@ -109,7 +109,8 @@ enum astencode_tag { // Reserves 0x50 -- 0x6f tag_table_last_use, tag_table_spill, tag_table_method_map, - tag_table_vtable_map + tag_table_vtable_map, + tag_table_borrowings } // djb's cdb hashes. diff --git a/src/rustc/metadata/tydecode.rs b/src/rustc/metadata/tydecode.rs index 0aaf79d3e8f..872dfa8b8d4 100644 --- a/src/rustc/metadata/tydecode.rs +++ b/src/rustc/metadata/tydecode.rs @@ -307,6 +307,11 @@ fn parse_ty(st: @pstate, conv: conv_did) -> ty::t { '@' { ret ty::mk_box(st.tcx, parse_mt(st, conv)); } '~' { ret ty::mk_uniq(st.tcx, parse_mt(st, conv)); } '*' { ret ty::mk_ptr(st.tcx, parse_mt(st, conv)); } + '&' { + let r = parse_region(st); + let mt = parse_mt(st, conv); + ret ty::mk_rptr(st.tcx, r, mt); + } 'I' { ret ty::mk_vec(st.tcx, parse_mt(st, conv)); } 'V' { let mt = parse_mt(st, conv); diff --git a/src/test/auxiliary/cci_borrow_lib.rs b/src/test/auxiliary/cci_borrow_lib.rs new file mode 100644 index 00000000000..80c1817746f --- /dev/null +++ b/src/test/auxiliary/cci_borrow_lib.rs @@ -0,0 +1,3 @@ +fn foo(x: &uint) -> uint { + *x +} diff --git a/src/test/run-pass/cci_borrow.rs b/src/test/run-pass/cci_borrow.rs new file mode 100644 index 00000000000..f15481d64fe --- /dev/null +++ b/src/test/run-pass/cci_borrow.rs @@ -0,0 +1,12 @@ +// xfail-fast - check-fast doesn't understand aux-build +// aux-build:cci_borrow_lib.rs + +use cci_borrow_lib; +import cci_borrow_lib::foo; + +fn main() { + let p = @22u; + let r = foo(p); + #debug["r=%u", r]; + assert r == 22u; +}