@@ -1726,17 +1726,15 @@ fn iter_structural_ty(cx: @block_ctxt, av: ValueRef, t: ty::t,
1726
1726
Unreachable ( unr_cx) ;
1727
1727
let llswitch = Switch ( cx, lldiscrim_a, unr_cx. llbb , n_variants) ;
1728
1728
let next_cx = new_sub_block_ctxt ( cx, "tag-iter-next" ) ;
1729
- let i = 0 u;
1730
1729
for variant: ty:: variant_info in * variants {
1731
1730
let variant_cx =
1732
1731
new_sub_block_ctxt ( cx,
1733
1732
"tag-iter-variant-" +
1734
- uint :: to_str ( i , 10 u) ) ;
1735
- AddCase ( llswitch, C_int ( ccx, i as int ) , variant_cx. llbb ) ;
1733
+ int :: to_str ( variant . disr_val , 10 u) ) ;
1734
+ AddCase ( llswitch, C_int ( ccx, variant . disr_val ) , variant_cx. llbb ) ;
1736
1735
variant_cx =
1737
1736
iter_variant ( variant_cx, llunion_a_ptr, variant, tps, tid, f) ;
1738
1737
Br ( variant_cx, next_cx. llbb ) ;
1739
- i += 1 u;
1740
1738
}
1741
1739
ret next_cx;
1742
1740
}
@@ -2745,12 +2743,9 @@ fn trans_var(cx: @block_ctxt, sp: span, def: ast::def, id: ast::node_id)
2745
2743
let bcx = alloc_result. bcx ;
2746
2744
let lltagptr = PointerCast ( bcx, lltagblob, T_ptr ( lltagty) ) ;
2747
2745
let lldiscrimptr = GEPi ( bcx, lltagptr, [ 0 , 0 ] ) ;
2748
- let d = if vec:: len ( * ty:: tag_variants ( ccx. tcx , tid) ) != 1 u {
2749
- let lldiscrim_gv = lookup_discriminant ( bcx. fcx . lcx , vid) ;
2750
- let lldiscrim = Load ( bcx, lldiscrim_gv) ;
2751
- lldiscrim
2752
- } else { C_int ( ccx, 0 ) } ;
2753
- Store ( bcx, d, lldiscrimptr) ;
2746
+ let lldiscrim_gv = lookup_discriminant ( bcx. fcx . lcx , vid) ;
2747
+ let lldiscrim = Load ( bcx, lldiscrim_gv) ;
2748
+ Store ( bcx, lldiscrim, lldiscrimptr) ;
2754
2749
ret lval_no_env ( bcx, lltagptr, temporary) ;
2755
2750
}
2756
2751
}
@@ -4685,7 +4680,7 @@ fn trans_res_ctor(cx: @local_ctxt, sp: span, dtor: ast::fn_decl,
4685
4680
4686
4681
4687
4682
fn trans_tag_variant ( cx : @local_ctxt , tag_id : ast:: node_id ,
4688
- variant : ast:: variant , index : int , is_degen : bool ,
4683
+ variant : ast:: variant , is_degen : bool ,
4689
4684
ty_params : [ ast:: ty_param ] ) {
4690
4685
let ccx = cx. ccx ;
4691
4686
@@ -4735,7 +4730,7 @@ fn trans_tag_variant(cx: @local_ctxt, tag_id: ast::node_id,
4735
4730
let lltagptr =
4736
4731
PointerCast ( bcx, fcx. llretptr , T_opaque_tag_ptr ( ccx) ) ;
4737
4732
let lldiscrimptr = GEPi ( bcx, lltagptr, [ 0 , 0 ] ) ;
4738
- Store ( bcx, C_int ( ccx, index ) , lldiscrimptr) ;
4733
+ Store ( bcx, C_int ( ccx, variant . node . disr_val ) , lldiscrimptr) ;
4739
4734
GEPi ( bcx, lltagptr, [ 0 , 1 ] )
4740
4735
} ;
4741
4736
i = 0 u;
@@ -5086,10 +5081,8 @@ fn trans_item(cx: @local_ctxt, item: ast::item) {
5086
5081
ast:: item_tag ( variants, tps) {
5087
5082
let sub_cx = extend_path ( cx, item. ident ) ;
5088
5083
let degen = vec:: len ( variants) == 1 u;
5089
- let i = 0 ;
5090
5084
for variant: ast:: variant in variants {
5091
- trans_tag_variant ( sub_cx, item. id , variant, i, degen, tps) ;
5092
- i += 1 ;
5085
+ trans_tag_variant ( sub_cx, item. id , variant, degen, tps) ;
5093
5086
}
5094
5087
}
5095
5088
ast:: item_const ( _, expr) { trans_const ( cx. ccx , expr, item. id ) ; }
@@ -5421,19 +5414,18 @@ fn trans_constant(ccx: @crate_ctxt, it: @ast::item, &&pt: [str],
5421
5414
visit:: visit_item ( it, new_pt, v) ;
5422
5415
alt it. node {
5423
5416
ast:: item_tag ( variants, _) {
5424
- let i = 0 u;
5425
5417
for variant in variants {
5426
5418
let p = new_pt + [ variant. node . name , "discrim" ] ;
5427
5419
let s = mangle_exported_name ( ccx, p, ty:: mk_int ( ccx. tcx ) ) ;
5420
+ let disr_val = variant. node . disr_val ;
5428
5421
let discrim_gvar = str:: as_buf ( s, { |buf|
5429
5422
llvm:: LLVMAddGlobal ( ccx. llmod , ccx. int_type , buf)
5430
5423
} ) ;
5431
- llvm:: LLVMSetInitializer ( discrim_gvar, C_int ( ccx, i as int ) ) ;
5424
+ llvm:: LLVMSetInitializer ( discrim_gvar, C_int ( ccx, disr_val ) ) ;
5432
5425
llvm:: LLVMSetGlobalConstant ( discrim_gvar, True ) ;
5433
5426
ccx. discrims . insert (
5434
5427
ast_util:: local_def ( variant. node . id ) , discrim_gvar) ;
5435
5428
ccx. discrim_symbols . insert ( variant. node . id , s) ;
5436
- i += 1 u;
5437
5429
}
5438
5430
}
5439
5431
ast:: item_impl ( tps, some ( @{ node: ast:: ty_path ( _, id) , _} ) , _, ms) {
0 commit comments