Skip to content

Commit 82d7396

Browse files
committed
auto merge of #4823 : pcwalton/rust/enum-variant-discriminants, r=graydon
r? @graydon
2 parents fa69739 + 6d13c90 commit 82d7396

File tree

2 files changed

+3
-24
lines changed

2 files changed

+3
-24
lines changed

Diff for: src/librustc/middle/trans/base.rs

-21
Original file line numberDiff line numberDiff line change
@@ -813,27 +813,6 @@ pub fn get_discrim_val(cx: @crate_ctxt, span: span, enum_did: ast::def_id,
813813
}
814814
}
815815

816-
pub fn lookup_discriminant(ccx: @crate_ctxt, vid: ast::def_id) -> ValueRef {
817-
unsafe {
818-
let _icx = ccx.insn_ctxt("lookup_discriminant");
819-
match ccx.discrims.find(&vid) {
820-
None => {
821-
// It's an external discriminant that we haven't seen yet.
822-
assert (vid.crate != ast::local_crate);
823-
let sym = csearch::get_symbol(ccx.sess.cstore, vid);
824-
let gvar = str::as_c_str(sym, |buf| {
825-
llvm::LLVMAddGlobal(ccx.llmod, ccx.int_type, buf)
826-
});
827-
lib::llvm::SetLinkage(gvar, lib::llvm::ExternalLinkage);
828-
llvm::LLVMSetGlobalConstant(gvar, True);
829-
ccx.discrims.insert(vid, gvar);
830-
return gvar;
831-
}
832-
Some(llval) => return llval,
833-
}
834-
}
835-
}
836-
837816
pub fn invoke(bcx: block, llfn: ValueRef, +llargs: ~[ValueRef]) -> block {
838817
let _icx = bcx.insn_ctxt("invoke_");
839818
if bcx.unreachable { return bcx; }

Diff for: src/librustc/middle/trans/expr.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -696,15 +696,15 @@ fn trans_def_dps_unadjusted(bcx: block, ref_expr: @ast::expr,
696696
return fn_data_to_datum(bcx, impl_did, fn_data, lldest);
697697
}
698698
ast::def_variant(tid, vid) => {
699-
if ty::enum_variant_with_id(ccx.tcx, tid, vid).args.len() > 0u {
699+
let variant_info = ty::enum_variant_with_id(ccx.tcx, tid, vid);
700+
if variant_info.args.len() > 0u {
700701
// N-ary variant.
701702
let fn_data = callee::trans_fn_ref(bcx, vid, ref_expr.id);
702703
return fn_data_to_datum(bcx, vid, fn_data, lldest);
703704
} else {
704705
// Nullary variant.
705706
let lldiscrimptr = GEPi(bcx, lldest, [0u, 0u]);
706-
let lldiscrim_gv = base::lookup_discriminant(ccx, vid);
707-
let lldiscrim = Load(bcx, lldiscrim_gv);
707+
let lldiscrim = C_int(bcx.ccx(), variant_info.disr_val);
708708
Store(bcx, lldiscrim, lldiscrimptr);
709709
return bcx;
710710
}

0 commit comments

Comments
 (0)