rustc: Fix type_need_unwind_cleanup. Closes #2272
This commit is contained in:
parent
5437a045fc
commit
e7dbf42214
4 changed files with 18 additions and 11 deletions
|
|
@ -1176,7 +1176,8 @@ fn type_needs_unwind_cleanup_(cx: ctxt, ty: t,
|
|||
let mut encountered_box = encountered_box;
|
||||
let mut needs_unwind_cleanup = false;
|
||||
maybe_walk_ty(ty) {|ty|
|
||||
alt get(ty).struct {
|
||||
let old_encountered_box = encountered_box;
|
||||
let result = alt get(ty).struct {
|
||||
ty_box(_) | ty_opaque_box {
|
||||
encountered_box = true;
|
||||
true
|
||||
|
|
@ -1216,7 +1217,10 @@ fn type_needs_unwind_cleanup_(cx: ctxt, ty: t,
|
|||
needs_unwind_cleanup = true;
|
||||
false
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
encountered_box = old_encountered_box;
|
||||
result
|
||||
}
|
||||
|
||||
ret needs_unwind_cleanup;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,3 @@
|
|||
// xfail-test
|
||||
/*
|
||||
tjc: currently this results in a memory leak after a call to
|
||||
span_fatal in typeck. I think it's the same issue as #2272, because
|
||||
if I make type_needs_unwind_cleanup always return true, the test passes.
|
||||
FIXME: Un-xfail this when #2272 is fixed.
|
||||
*/
|
||||
class cat implements int { //! ERROR can only implement interface types
|
||||
let meows: uint;
|
||||
new(in_x : uint) { self.meows = in_x; }
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
// error-pattern: overly deep expansion
|
||||
// issue 2258
|
||||
// This is currently exposing a memory leak, and xfailed for that reason
|
||||
// xfail-test
|
||||
|
||||
iface to_opt {
|
||||
fn to_option() -> option<self>;
|
||||
|
|
|
|||
12
src/test/run-fail/issue-2272.rs
Normal file
12
src/test/run-fail/issue-2272.rs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
// error-pattern:explicit failure
|
||||
// Issue #2272 - unwind this without leaking the unique pointer
|
||||
|
||||
fn main() {
|
||||
let _x = {
|
||||
y: {
|
||||
z: @0
|
||||
},
|
||||
a: ~0
|
||||
};
|
||||
fail;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue