Skip to content

Commit 03ed737

Browse files
committed
---
yaml --- r: 36471 b: refs/heads/try2 c: 9e1c9be h: refs/heads/master i: 36469: 438d59a 36467: d9fd065 36463: 8291e11 v: v3
1 parent f0b96f1 commit 03ed737

File tree

97 files changed

+168
-602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+168
-602
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: eb8fd119c65c67f3b1b8268cc7341c22d39b7b61
55
refs/heads/try: d324a424d8f84b1eb049b12cf34182bda91b0024
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: c6b17392323c4eee930451e612e5ba8c81b1f925
8+
refs/heads/try2: 9e1c9be16f9140e09f26de947fddf806c27a957f
99
refs/heads/incoming: d9317a174e434d4c99fc1a37fd7dc0d2f5328d37
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/try2/src/libcore/ops.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub trait Owned {
2525

2626
#[lang="drop"]
2727
pub trait Drop {
28-
fn finalize(); // XXX: Rename to "drop"? --pcwalton
28+
fn finalize(&self); // XXX: Rename to "drop"? --pcwalton
2929
}
3030

3131
#[lang="add"]

branches/try2/src/librustc/middle/trans/base.rs

Lines changed: 0 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -2369,67 +2369,6 @@ fn declare_intrinsics(llmod: ModuleRef) -> HashMap<~str, ValueRef> {
23692369
let frameaddress = decl_cdecl_fn(llmod, ~"llvm.frameaddress",
23702370
T_fn(T_frameaddress_args,
23712371
T_ptr(T_i8())));
2372-
let sqrtf32 = decl_cdecl_fn(llmod, ~"llvm.sqrt.f32",
2373-
T_fn(~[T_f32()], T_f32()));
2374-
let sqrtf64 = decl_cdecl_fn(llmod, ~"llvm.sqrt.f64",
2375-
T_fn(~[T_f64()], T_f64()));
2376-
let powif32 = decl_cdecl_fn(llmod, ~"llvm.powi.f32",
2377-
T_fn(~[T_f32(), T_i32()], T_f32()));
2378-
let powif64 = decl_cdecl_fn(llmod, ~"llvm.powi.f64",
2379-
T_fn(~[T_f64(), T_i32()], T_f64()));
2380-
let sinf32 = decl_cdecl_fn(llmod, ~"llvm.sin.f32",
2381-
T_fn(~[T_f32()], T_f32()));
2382-
let sinf64 = decl_cdecl_fn(llmod, ~"llvm.sin.f64",
2383-
T_fn(~[T_f64()], T_f64()));
2384-
let cosf32 = decl_cdecl_fn(llmod, ~"llvm.cos.f32",
2385-
T_fn(~[T_f32()], T_f32()));
2386-
let cosf64 = decl_cdecl_fn(llmod, ~"llvm.cos.f64",
2387-
T_fn(~[T_f64()], T_f64()));
2388-
let powf32 = decl_cdecl_fn(llmod, ~"llvm.pow.f32",
2389-
T_fn(~[T_f32(), T_f32()], T_f32()));
2390-
let powf64 = decl_cdecl_fn(llmod, ~"llvm.pow.f64",
2391-
T_fn(~[T_f64(), T_f64()], T_f64()));
2392-
let expf32 = decl_cdecl_fn(llmod, ~"llvm.exp.f32",
2393-
T_fn(~[T_f32()], T_f32()));
2394-
let expf64 = decl_cdecl_fn(llmod, ~"llvm.exp.f64",
2395-
T_fn(~[T_f64()], T_f64()));
2396-
let exp2f32 = decl_cdecl_fn(llmod, ~"llvm.exp2.f32",
2397-
T_fn(~[T_f32()], T_f32()));
2398-
let exp2f64 = decl_cdecl_fn(llmod, ~"llvm.exp2.f64",
2399-
T_fn(~[T_f64()], T_f64()));
2400-
let logf32 = decl_cdecl_fn(llmod, ~"llvm.log.f32",
2401-
T_fn(~[T_f32()], T_f32()));
2402-
let logf64 = decl_cdecl_fn(llmod, ~"llvm.log.f64",
2403-
T_fn(~[T_f64()], T_f64()));
2404-
let log10f32 = decl_cdecl_fn(llmod, ~"llvm.log10.f32",
2405-
T_fn(~[T_f32()], T_f32()));
2406-
let log10f64 = decl_cdecl_fn(llmod, ~"llvm.log10.f64",
2407-
T_fn(~[T_f64()], T_f64()));
2408-
let log2f32 = decl_cdecl_fn(llmod, ~"llvm.log2.f32",
2409-
T_fn(~[T_f32()], T_f32()));
2410-
let log2f64 = decl_cdecl_fn(llmod, ~"llvm.log2.f64",
2411-
T_fn(~[T_f64()], T_f64()));
2412-
let fmaf32 = decl_cdecl_fn(llmod, ~"llvm.fma.f32",
2413-
T_fn(~[T_f32(), T_f32(), T_f32()], T_f32()));
2414-
let fmaf64 = decl_cdecl_fn(llmod, ~"llvm.fma.f64",
2415-
T_fn(~[T_f64(), T_f64(), T_f64()], T_f64()));
2416-
let fabsf32 = decl_cdecl_fn(llmod, ~"llvm.fabs.f32",
2417-
T_fn(~[T_f32()], T_f32()));
2418-
let fabsf64 = decl_cdecl_fn(llmod, ~"llvm.fabs.f64",
2419-
T_fn(~[T_f64()], T_f64()));
2420-
let floorf32 = decl_cdecl_fn(llmod, ~"llvm.floor.f32",
2421-
T_fn(~[T_f32()], T_f32()));
2422-
let floorf64 = decl_cdecl_fn(llmod, ~"llvm.floor.f64",
2423-
T_fn(~[T_f64()], T_f64()));
2424-
let ceilf32 = decl_cdecl_fn(llmod, ~"llvm.ceil.f32",
2425-
T_fn(~[T_f32()], T_f32()));
2426-
let ceilf64 = decl_cdecl_fn(llmod, ~"llvm.ceil.f64",
2427-
T_fn(~[T_f64()], T_f64()));
2428-
let truncf32 = decl_cdecl_fn(llmod, ~"llvm.trunc.f32",
2429-
T_fn(~[T_f32()], T_f32()));
2430-
let truncf64 = decl_cdecl_fn(llmod, ~"llvm.trunc.f64",
2431-
T_fn(~[T_f64()], T_f64()));
2432-
24332372
let intrinsics = HashMap();
24342373
intrinsics.insert(~"llvm.gcroot", gcroot);
24352374
intrinsics.insert(~"llvm.gcread", gcread);
@@ -2439,37 +2378,6 @@ fn declare_intrinsics(llmod: ModuleRef) -> HashMap<~str, ValueRef> {
24392378
intrinsics.insert(~"llvm.memset.p0i8.i64", memset64);
24402379
intrinsics.insert(~"llvm.trap", trap);
24412380
intrinsics.insert(~"llvm.frameaddress", frameaddress);
2442-
intrinsics.insert(~"llvm.sqrt.f32", sqrtf32);
2443-
intrinsics.insert(~"llvm.sqrt.f64", sqrtf64);
2444-
intrinsics.insert(~"llvm.powi.f32", powif32);
2445-
intrinsics.insert(~"llvm.powi.f64", powif64);
2446-
intrinsics.insert(~"llvm.sin.f32", sinf32);
2447-
intrinsics.insert(~"llvm.sin.f64", sinf64);
2448-
intrinsics.insert(~"llvm.cos.f32", cosf32);
2449-
intrinsics.insert(~"llvm.cos.f64", cosf64);
2450-
intrinsics.insert(~"llvm.pow.f32", powf32);
2451-
intrinsics.insert(~"llvm.pow.f64", powf64);
2452-
intrinsics.insert(~"llvm.exp.f32", expf32);
2453-
intrinsics.insert(~"llvm.exp.f64", expf64);
2454-
intrinsics.insert(~"llvm.exp2.f32", exp2f32);
2455-
intrinsics.insert(~"llvm.exp2.f64", exp2f64);
2456-
intrinsics.insert(~"llvm.log.f32", logf32);
2457-
intrinsics.insert(~"llvm.log.f64", logf64);
2458-
intrinsics.insert(~"llvm.log10.f32", log10f32);
2459-
intrinsics.insert(~"llvm.log10.f64", log10f64);
2460-
intrinsics.insert(~"llvm.log2.f32", log2f32);
2461-
intrinsics.insert(~"llvm.log2.f64", log2f64);
2462-
intrinsics.insert(~"llvm.fma.f32", fmaf32);
2463-
intrinsics.insert(~"llvm.fma.f64", fmaf64);
2464-
intrinsics.insert(~"llvm.fabs.f32", fabsf32);
2465-
intrinsics.insert(~"llvm.fabs.f64", fabsf64);
2466-
intrinsics.insert(~"llvm.floor.f32", floorf32);
2467-
intrinsics.insert(~"llvm.floor.f64", floorf64);
2468-
intrinsics.insert(~"llvm.ceil.f32", ceilf32);
2469-
intrinsics.insert(~"llvm.ceil.f64", ceilf64);
2470-
intrinsics.insert(~"llvm.trunc.f32", truncf32);
2471-
intrinsics.insert(~"llvm.trunc.f64", truncf64);
2472-
24732381
return intrinsics;
24742382
}
24752383

branches/try2/src/librustc/middle/trans/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ fn with_field_tys<R>(tcx: ty::ctxt,
888888
}
889889

890890
ty::ty_class(did, ref substs) => {
891-
let has_dtor = ty::ty_dtor(tcx, did).is_some();
891+
let has_dtor = ty::ty_dtor(tcx, did).is_present();
892892
op(has_dtor, class_items_as_mutable_fields(tcx, did, substs))
893893
}
894894

branches/try2/src/librustc/middle/trans/foreign.rs

Lines changed: 1 addition & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -973,7 +973,7 @@ fn trans_intrinsic(ccx: @crate_ctxt, decl: ValueRef, item: @ast::foreign_item,
973973
let llcast = PointerCast(bcx, llcast, T_ptr(T_i8()));
974974
call_memcpy(bcx, llretptr, llcast, llsize_of(ccx, lltp_ty));
975975
}
976-
}
976+
}
977977
~"addr_of" => {
978978
Store(bcx, get_param(decl, first_real_arg), fcx.llretptr);
979979
}
@@ -1024,164 +1024,6 @@ fn trans_intrinsic(ccx: @crate_ctxt, decl: ValueRef, item: @ast::foreign_item,
10241024
T_ptr(T_nil()));
10251025
Store(bcx, morestack_addr, fcx.llretptr);
10261026
}
1027-
~"sqrtf32" => {
1028-
let x = get_param(decl, first_real_arg);
1029-
let sqrtf = ccx.intrinsics.get(~"llvm.sqrt.f32");
1030-
Store(bcx, Call(bcx, sqrtf, ~[x]), fcx.llretptr);
1031-
}
1032-
~"sqrtf64" => {
1033-
let x = get_param(decl, first_real_arg);
1034-
let sqrtf = ccx.intrinsics.get(~"llvm.sqrt.f64");
1035-
Store(bcx, Call(bcx, sqrtf, ~[x]), fcx.llretptr);
1036-
}
1037-
~"powif32" => {
1038-
let a = get_param(decl, first_real_arg);
1039-
let x = get_param(decl, first_real_arg + 1u);
1040-
let powif = ccx.intrinsics.get(~"llvm.powi.f32");
1041-
Store(bcx, Call(bcx, powif, ~[a, x]), fcx.llretptr);
1042-
}
1043-
~"powif64" => {
1044-
let a = get_param(decl, first_real_arg);
1045-
let x = get_param(decl, first_real_arg + 1u);
1046-
let powif = ccx.intrinsics.get(~"llvm.powi.f64");
1047-
Store(bcx, Call(bcx, powif, ~[a, x]), fcx.llretptr);
1048-
}
1049-
~"sinf32" => {
1050-
let x = get_param(decl, first_real_arg);
1051-
let sinf = ccx.intrinsics.get(~"llvm.sin.f32");
1052-
Store(bcx, Call(bcx, sinf, ~[x]), fcx.llretptr);
1053-
}
1054-
~"sinf64" => {
1055-
let x = get_param(decl, first_real_arg);
1056-
let sinf = ccx.intrinsics.get(~"llvm.sin.f64");
1057-
Store(bcx, Call(bcx, sinf, ~[x]), fcx.llretptr);
1058-
}
1059-
~"cosf32" => {
1060-
let x = get_param(decl, first_real_arg);
1061-
let cosf = ccx.intrinsics.get(~"llvm.cos.f32");
1062-
Store(bcx, Call(bcx, cosf, ~[x]), fcx.llretptr);
1063-
}
1064-
~"cosf64" => {
1065-
let x = get_param(decl, first_real_arg);
1066-
let cosf = ccx.intrinsics.get(~"llvm.cos.f64");
1067-
Store(bcx, Call(bcx, cosf, ~[x]), fcx.llretptr);
1068-
}
1069-
~"powf32" => {
1070-
let a = get_param(decl, first_real_arg);
1071-
let x = get_param(decl, first_real_arg + 1u);
1072-
let powf = ccx.intrinsics.get(~"llvm.pow.f32");
1073-
Store(bcx, Call(bcx, powf, ~[a, x]), fcx.llretptr);
1074-
}
1075-
~"powf64" => {
1076-
let a = get_param(decl, first_real_arg);
1077-
let x = get_param(decl, first_real_arg + 1u);
1078-
let powf = ccx.intrinsics.get(~"llvm.pow.f64");
1079-
Store(bcx, Call(bcx, powf, ~[a, x]), fcx.llretptr);
1080-
}
1081-
~"expf32" => {
1082-
let x = get_param(decl, first_real_arg);
1083-
let expf = ccx.intrinsics.get(~"llvm.exp.f32");
1084-
Store(bcx, Call(bcx, expf, ~[x]), fcx.llretptr);
1085-
}
1086-
~"expf64" => {
1087-
let x = get_param(decl, first_real_arg);
1088-
let expf = ccx.intrinsics.get(~"llvm.exp.f64");
1089-
Store(bcx, Call(bcx, expf, ~[x]), fcx.llretptr);
1090-
}
1091-
~"exp2f32" => {
1092-
let x = get_param(decl, first_real_arg);
1093-
let exp2f = ccx.intrinsics.get(~"llvm.exp2.f32");
1094-
Store(bcx, Call(bcx, exp2f, ~[x]), fcx.llretptr);
1095-
}
1096-
~"exp2f64" => {
1097-
let x = get_param(decl, first_real_arg);
1098-
let exp2f = ccx.intrinsics.get(~"llvm.exp2.f64");
1099-
Store(bcx, Call(bcx, exp2f, ~[x]), fcx.llretptr);
1100-
}
1101-
~"logf32" => {
1102-
let x = get_param(decl, first_real_arg);
1103-
let logf = ccx.intrinsics.get(~"llvm.log.f32");
1104-
Store(bcx, Call(bcx, logf, ~[x]), fcx.llretptr);
1105-
}
1106-
~"logf64" => {
1107-
let x = get_param(decl, first_real_arg);
1108-
let logf = ccx.intrinsics.get(~"llvm.log.f64");
1109-
Store(bcx, Call(bcx, logf, ~[x]), fcx.llretptr);
1110-
}
1111-
~"log10f32" => {
1112-
let x = get_param(decl, first_real_arg);
1113-
let log10f = ccx.intrinsics.get(~"llvm.log10.f32");
1114-
Store(bcx, Call(bcx, log10f, ~[x]), fcx.llretptr);
1115-
}
1116-
~"log10f64" => {
1117-
let x = get_param(decl, first_real_arg);
1118-
let log10f = ccx.intrinsics.get(~"llvm.log10.f64");
1119-
Store(bcx, Call(bcx, log10f, ~[x]), fcx.llretptr);
1120-
}
1121-
~"log2f32" => {
1122-
let x = get_param(decl, first_real_arg);
1123-
let log2f = ccx.intrinsics.get(~"llvm.log2.f32");
1124-
Store(bcx, Call(bcx, log2f, ~[x]), fcx.llretptr);
1125-
}
1126-
~"log2f64" => {
1127-
let x = get_param(decl, first_real_arg);
1128-
let log2f = ccx.intrinsics.get(~"llvm.log2.f64");
1129-
Store(bcx, Call(bcx, log2f, ~[x]), fcx.llretptr);
1130-
}
1131-
~"fmaf32" => {
1132-
let a = get_param(decl, first_real_arg);
1133-
let b = get_param(decl, first_real_arg + 1u);
1134-
let c = get_param(decl, first_real_arg + 2u);
1135-
let fmaf = ccx.intrinsics.get(~"llvm.fma.f32");
1136-
Store(bcx, Call(bcx, fmaf, ~[a, b, c]), fcx.llretptr);
1137-
}
1138-
~"fmaf64" => {
1139-
let a = get_param(decl, first_real_arg);
1140-
let b = get_param(decl, first_real_arg + 1u);
1141-
let c = get_param(decl, first_real_arg + 2u);
1142-
let fmaf = ccx.intrinsics.get(~"llvm.fma.f64");
1143-
Store(bcx, Call(bcx, fmaf, ~[a, b, c]), fcx.llretptr);
1144-
}
1145-
~"fabsf32" => {
1146-
let x = get_param(decl, first_real_arg);
1147-
let fabsf = ccx.intrinsics.get(~"llvm.fabs.f32");
1148-
Store(bcx, Call(bcx, fabsf, ~[x]), fcx.llretptr);
1149-
}
1150-
~"fabsf64" => {
1151-
let x = get_param(decl, first_real_arg);
1152-
let fabsf = ccx.intrinsics.get(~"llvm.fabs.f64");
1153-
Store(bcx, Call(bcx, fabsf, ~[x]), fcx.llretptr);
1154-
}
1155-
~"floorf32" => {
1156-
let x = get_param(decl, first_real_arg);
1157-
let floorf = ccx.intrinsics.get(~"llvm.floor.f32");
1158-
Store(bcx, Call(bcx, floorf, ~[x]), fcx.llretptr);
1159-
}
1160-
~"floorf64" => {
1161-
let x = get_param(decl, first_real_arg);
1162-
let floorf = ccx.intrinsics.get(~"llvm.floor.f64");
1163-
Store(bcx, Call(bcx, floorf, ~[x]), fcx.llretptr);
1164-
}
1165-
~"ceilf32" => {
1166-
let x = get_param(decl, first_real_arg);
1167-
let ceilf = ccx.intrinsics.get(~"llvm.ceil.f32");
1168-
Store(bcx, Call(bcx, ceilf, ~[x]), fcx.llretptr);
1169-
}
1170-
~"ceilf64" => {
1171-
let x = get_param(decl, first_real_arg);
1172-
let ceilf = ccx.intrinsics.get(~"llvm.ceil.f64");
1173-
Store(bcx, Call(bcx, ceilf, ~[x]), fcx.llretptr);
1174-
}
1175-
~"truncf32" => {
1176-
let x = get_param(decl, first_real_arg);
1177-
let truncf = ccx.intrinsics.get(~"llvm.trunc.f32");
1178-
Store(bcx, Call(bcx, truncf, ~[x]), fcx.llretptr);
1179-
}
1180-
~"truncf64" => {
1181-
let x = get_param(decl, first_real_arg);
1182-
let truncf = ccx.intrinsics.get(~"llvm.trunc.f64");
1183-
Store(bcx, Call(bcx, truncf, ~[x]), fcx.llretptr);
1184-
}
11851027
_ => {
11861028
// Could we make this an enum rather than a string? does it get
11871029
// checked earlier?

branches/try2/src/librustc/middle/trans/glue.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,14 @@ fn make_free_glue(bcx: block, v: ValueRef, t: ty::t) {
397397
}
398398
ty::ty_class(did, ref substs) => {
399399
// Call the dtor if there is one
400-
do option::map_default(&ty::ty_dtor(bcx.tcx(), did), bcx) |dt_id| {
401-
trans_class_drop(bcx, v, *dt_id, did, substs)
400+
match ty::ty_dtor(bcx.tcx(), did) {
401+
ty::NoDtor => bcx,
402+
ty::LegacyDtor(ref dt_id) => {
403+
trans_class_drop(bcx, v, *dt_id, did, substs, false)
404+
}
405+
ty::TraitDtor(ref dt_id) => {
406+
trans_class_drop(bcx, v, *dt_id, did, substs, true)
407+
}
402408
}
403409
}
404410
_ => bcx
@@ -410,7 +416,8 @@ fn trans_class_drop(bcx: block,
410416
v0: ValueRef,
411417
dtor_did: ast::def_id,
412418
class_did: ast::def_id,
413-
substs: &ty::substs) -> block {
419+
substs: &ty::substs,
420+
take_ref: bool) -> block {
414421
let drop_flag = GEPi(bcx, v0, struct_dtor());
415422
do with_cond(bcx, IsNotNull(bcx, Load(bcx, drop_flag))) |cx| {
416423
let mut bcx = cx;
@@ -427,7 +434,18 @@ fn trans_class_drop(bcx: block,
427434
// just consist of the output pointer and the environment
428435
// (self)
429436
assert(params.len() == 2);
430-
let self_arg = PointerCast(bcx, v0, params[1]);
437+
438+
// If we need to take a reference to the class (because it's using
439+
// the Drop trait), do so now.
440+
let llval;
441+
if take_ref {
442+
llval = alloca(bcx, val_ty(v0));
443+
Store(bcx, v0, llval);
444+
} else {
445+
llval = v0;
446+
}
447+
448+
let self_arg = PointerCast(bcx, llval, params[1]);
431449
let args = ~[bcx.fcx.llretptr, self_arg];
432450
Call(bcx, dtor_addr, args);
433451

@@ -465,10 +483,13 @@ fn make_drop_glue(bcx: block, v0: ValueRef, t: ty::t) {
465483
ty::ty_class(did, ref substs) => {
466484
let tcx = bcx.tcx();
467485
match ty::ty_dtor(tcx, did) {
468-
Some(dtor) => {
469-
trans_class_drop(bcx, v0, dtor, did, substs)
486+
ty::TraitDtor(dtor) => {
487+
trans_class_drop(bcx, v0, dtor, did, substs, true)
470488
}
471-
None => {
489+
ty::LegacyDtor(dtor) => {
490+
trans_class_drop(bcx, v0, dtor, did, substs, false)
491+
}
492+
ty::NoDtor => {
472493
// No dtor? Just the default case
473494
iter_structural_ty(bcx, v0, t, drop_ty)
474495
}

branches/try2/src/librustc/middle/trans/machine.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub fn simplify_type(tcx: ty::ctxt, typ: ty::t) -> ty::t {
2727
// Reduce a class type to a record type in which all the fields are
2828
// simplified
2929
ty::ty_class(did, ref substs) => {
30-
let simpl_fields = (if ty::ty_dtor(tcx, did).is_some() {
30+
let simpl_fields = (if ty::ty_dtor(tcx, did).is_present() {
3131
// remember the drop flag
3232
~[{ident: syntax::parse::token::special_idents::dtor,
3333
mt: {ty: ty::mk_u8(tcx),

branches/try2/src/librustc/middle/trans/type_of.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ fn type_of(cx: @crate_ctxt, t: ty::t) -> TypeRef {
199199

200200
// include a byte flag if there is a dtor so that we know when we've
201201
// been dropped
202-
if ty::ty_dtor(cx.tcx, did) != None {
202+
if ty::ty_dtor(cx.tcx, did).is_present() {
203203
common::set_struct_body(llty, ~[T_struct(tys), T_i8()]);
204204
} else {
205205
common::set_struct_body(llty, ~[T_struct(tys)]);

0 commit comments

Comments
 (0)