diff options
| author | Patrick Walton <[email protected]> | 2011-03-09 16:07:55 -0800 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-03-09 16:07:55 -0800 |
| commit | ea2c86874448439a31012ccb141450c67e3d94d8 (patch) | |
| tree | 68833c7d2988438da9bbfc88de251dc1801ba498 | |
| parent | rustc Remove dead "llunit_ty" assignment in trans_index (diff) | |
| download | rust-ea2c86874448439a31012ccb141450c67e3d94d8.tar.xz rust-ea2c86874448439a31012ccb141450c67e3d94d8.zip | |
rustc: Perform type substitutions for tag variants in dynamic_size_of()
| -rw-r--r-- | src/comp/middle/trans.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 57dc9121..3c5253ff 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -1020,9 +1020,17 @@ fn dynamic_size_of(@block_ctxt cx, @ty.t t) -> result { let ValueRef max_size = bcx.build.Alloca(T_int()); bcx.build.Store(C_int(0), max_size); + auto ty_params = tag_ty_params(bcx.fcx.ccx, tid); auto variants = tag_variants(bcx.fcx.ccx, tid); for (ast.variant variant in variants) { - let vec[@ty.t] tys = variant_types(bcx.fcx.ccx, variant); + // Perform type substitution on the raw variant types. + let vec[@ty.t] raw_tys = variant_types(bcx.fcx.ccx, variant); + let vec[@ty.t] tys = vec(); + for (@ty.t raw_ty in raw_tys) { + auto t = ty.substitute_ty_params(ty_params, tps, raw_ty); + tys += vec(t); + } + auto rslt = align_elements(bcx, tys); bcx = rslt.bcx; |