parent
b2f62acaeb
commit
e58270219f
@ -521,16 +521,23 @@ pub fn get_res_dtor(ccx: @mut CrateContext,
|
|||||||
substs: &[ty::t])
|
substs: &[ty::t])
|
||||||
-> ValueRef {
|
-> ValueRef {
|
||||||
let _icx = push_ctxt("trans_res_dtor");
|
let _icx = push_ctxt("trans_res_dtor");
|
||||||
|
let did = if did.crate != ast::LOCAL_CRATE {
|
||||||
|
inline::maybe_instantiate_inline(ccx, did)
|
||||||
|
} else {
|
||||||
|
did
|
||||||
|
};
|
||||||
if !substs.is_empty() {
|
if !substs.is_empty() {
|
||||||
let did = if did.crate != ast::LOCAL_CRATE {
|
|
||||||
inline::maybe_instantiate_inline(ccx, did)
|
|
||||||
} else {
|
|
||||||
did
|
|
||||||
};
|
|
||||||
assert_eq!(did.crate, ast::LOCAL_CRATE);
|
assert_eq!(did.crate, ast::LOCAL_CRATE);
|
||||||
let tsubsts = ty::substs {regions: ty::ErasedRegions,
|
let tsubsts = ty::substs {regions: ty::ErasedRegions,
|
||||||
self_ty: None,
|
self_ty: None,
|
||||||
tps: /*bad*/ substs.to_owned() };
|
tps: /*bad*/ substs.to_owned() };
|
||||||
|
|
||||||
|
// FIXME: #4252: Generic destructors with type bounds are broken.
|
||||||
|
//
|
||||||
|
// Since the vtables aren't passed to `monomorphic_fn` here, generic destructors with type
|
||||||
|
// bounds are broken. Sadly, the `typeck` pass isn't outputting the necessary metadata
|
||||||
|
// because it does so based on method calls present in the AST. Destructor calls are not yet
|
||||||
|
// known about at that stage of compilation, since `trans` handles cleanups.
|
||||||
let (val, _) = monomorphize::monomorphic_fn(ccx,
|
let (val, _) = monomorphize::monomorphic_fn(ccx,
|
||||||
did,
|
did,
|
||||||
&tsubsts,
|
&tsubsts,
|
||||||
|
18
src/test/auxiliary/inline_dtor.rs
Normal file
18
src/test/auxiliary/inline_dtor.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#[link(name="inline_dtor", vers="0.1")];
|
||||||
|
|
||||||
|
pub struct Foo;
|
||||||
|
|
||||||
|
impl Drop for Foo {
|
||||||
|
#[inline]
|
||||||
|
fn drop(&mut self) {}
|
||||||
|
}
|
18
src/test/run-pass/use_inline_dtor.rs
Normal file
18
src/test/run-pass/use_inline_dtor.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
// aux-build:inline_dtor.rs
|
||||||
|
// xfail-fast
|
||||||
|
|
||||||
|
extern mod inline_dtor;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _x = inline_dtor::Foo;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user