@@ -1053,6 +1053,9 @@ fn dynamic_align_of(@block_ctxt cx, @ty.t t) -> result {
1053
1053
}
1054
1054
ret res( bcx, a) ;
1055
1055
}
1056
+ case ( ty. ty_tag( _, _) ) {
1057
+ ret res( cx, C_int ( 1 ) ) ; // FIXME: stub
1058
+ }
1056
1059
}
1057
1060
}
1058
1061
@@ -1805,12 +1808,21 @@ fn iter_structural_ty_full(@block_ctxt cx,
1805
1808
auto variants = tag_variants( cx. fcx. ccx, tid) ;
1806
1809
auto n_variants = _vec. len[ ast. variant] ( variants) ;
1807
1810
1808
- auto lldiscrim_a_ptr = cx. build. GEP ( av, vec( C_int ( 0 ) , C_int ( 0 ) ) ) ;
1809
- auto llunion_a_ptr = cx. build. GEP ( av, vec( C_int ( 0 ) , C_int ( 1 ) ) ) ;
1811
+ // Cast the tags to types we can GEP into.
1812
+ auto lltagty = T_opaque_tag_ptr ( cx. fcx. ccx. tn) ;
1813
+ auto av_tag = cx. build. PointerCast ( av, lltagty) ;
1814
+ auto bv_tag = cx. build. PointerCast ( bv, lltagty) ;
1815
+
1816
+ auto lldiscrim_a_ptr = cx. build. GEP ( av_tag,
1817
+ vec( C_int ( 0 ) , C_int ( 0 ) ) ) ;
1818
+ auto llunion_a_ptr = cx. build. GEP ( av_tag,
1819
+ vec( C_int ( 0 ) , C_int ( 1 ) ) ) ;
1810
1820
auto lldiscrim_a = cx. build. Load ( lldiscrim_a_ptr) ;
1811
1821
1812
- auto lldiscrim_b_ptr = cx. build. GEP ( bv, vec( C_int ( 0 ) , C_int ( 0 ) ) ) ;
1813
- auto llunion_b_ptr = cx. build. GEP ( bv, vec( C_int ( 0 ) , C_int ( 1 ) ) ) ;
1822
+ auto lldiscrim_b_ptr = cx. build. GEP ( bv_tag,
1823
+ vec( C_int ( 0 ) , C_int ( 0 ) ) ) ;
1824
+ auto llunion_b_ptr = cx. build. GEP ( bv_tag,
1825
+ vec( C_int ( 0 ) , C_int ( 1 ) ) ) ;
1814
1826
auto lldiscrim_b = cx. build. Load ( lldiscrim_b_ptr) ;
1815
1827
1816
1828
// NB: we must hit the discriminant first so that structural
0 commit comments