diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-02-24 11:03:23 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-02-24 20:46:27 -0800 |
| commit | 5ee89f3f2adbc1b087820f6b929d1dbd3057a507 (patch) | |
| tree | 4bf5adb90854547a17487b168904334cf19bc4b3 /src/rt/rust_cc.cpp | |
| parent | acb129c5412bdc4375bb3a31a192ea6e7f26ebcc (diff) | |
| download | rust-5ee89f3f2adbc1b087820f6b929d1dbd3057a507.tar.gz rust-5ee89f3f2adbc1b087820f6b929d1dbd3057a507.zip | |
add an option to the final cc so that it prints out/logs unreclaimed ptrs
Diffstat (limited to 'src/rt/rust_cc.cpp')
| -rw-r--r-- | src/rt/rust_cc.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/rt/rust_cc.cpp b/src/rt/rust_cc.cpp index ec54b1ef181..eb99e28b2d0 100644 --- a/src/rt/rust_cc.cpp +++ b/src/rt/rust_cc.cpp @@ -12,6 +12,7 @@ #include <set> #include <vector> #include <stdint.h> +#include <ios> // The number of allocations Rust code performs before performing cycle // collection. @@ -20,6 +21,8 @@ // defined in rust_upcall.cpp: void upcall_s_free_shared_type_desc(type_desc *td); +using namespace std; + namespace cc { // Internal reference count computation @@ -660,6 +663,25 @@ do_cc(rust_task *task) { } void +do_final_cc(rust_task *task) { + do_cc(task); + + boxed_region *boxed = &task->boxed; + for (rust_opaque_box *box = boxed->first_live_alloc(); + box != NULL; + box = box->next) { + cerr << "Unreclaimed object found at " << (void*) box << ": "; + const type_desc *td = box->td; + shape::arena arena; + shape::type_param *params = shape::type_param::from_tydesc(td, arena); + shape::log log(task, true, td->shape, params, td->shape_tables, + (uint8_t*)box_body(box), cerr); + log.walk(); + cerr << "\n"; + } +} + +void maybe_cc(rust_task *task) { static debug::flag zeal("RUST_CC_ZEAL"); if (*zeal) { |
