diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-03-18 18:45:49 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-03-18 18:45:49 -0700 |
| commit | e6b6d1b64589e077a8ba6e8c752eabd3cfec6755 (patch) | |
| tree | 69359584654921a058485100a91c6be11483f726 /src/comp/middle | |
| parent | 95dc89f0124b85e289024c9ff96ae2e6f9f2b249 (diff) | |
| download | rust-e6b6d1b64589e077a8ba6e8c752eabd3cfec6755.tar.gz rust-e6b6d1b64589e077a8ba6e8c752eabd3cfec6755.zip | |
rustc: Make trans_path() generic-safe wrt nullary tags
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/trans.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index e0d381401e2..8bbd9fa2393 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -3441,8 +3441,15 @@ fn trans_path(@block_ctxt cx, &ast.path p, &option.t[ast.def] dopt, auto alloc_result = alloc_ty(cx, tag_ty); auto lltagblob = alloc_result.val; + + auto lltagty; + if (ty.type_has_dynamic_size(tag_ty)) { + lltagty = T_opaque_tag(cx.fcx.ccx.tn); + } else { + lltagty = type_of(cx.fcx.ccx, tag_ty); + } auto lltagptr = alloc_result.bcx.build.PointerCast( - lltagblob, T_ptr(type_of(cx.fcx.ccx, tag_ty))); + lltagblob, T_ptr(lltagty)); auto lldiscrimptr = alloc_result.bcx.build.GEP( lltagptr, vec(C_int(0), C_int(0))); |
