diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-06-16 11:04:59 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-06-16 11:16:03 -0700 |
| commit | 4673eb6839852b3902dc6855cce48d195c3b4092 (patch) | |
| tree | f74d9a7f5c905db3e35cd6cc0c57c24a4c2e2c56 /src/comp | |
| parent | 741e77174c89723b05eb3dd79c3c47b2d0cd24d8 (diff) | |
| download | rust-4673eb6839852b3902dc6855cce48d195c3b4092.tar.gz rust-4673eb6839852b3902dc6855cce48d195c3b4092.zip | |
rustc: Fix LLVM type error when generating cmp glue for interior vectors
Diffstat (limited to 'src/comp')
| -rw-r--r-- | src/comp/middle/trans.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 35bea36cbc3..a83469e73bc 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -2164,10 +2164,26 @@ fn make_cmp_glue(&@block_ctxt cx, ValueRef lhs0, ValueRef rhs0, &ty::t t, // If we hit == all the way through the minimum-shared-length // section, default to judging the relative sequence lengths. - r = - compare_numerical_values(scx, vec_fill(scx, lhs), - vec_fill(scx, rhs), unsigned_int, - llop); + auto lhs_fill; + auto rhs_fill; + auto bcx; + if (ty::sequence_is_interior(cx.fcx.lcx.ccx.tcx, t)) { + auto lad = ivec::get_len_and_data(scx, lhs, + ty::sequence_element_type(cx.fcx.lcx.ccx.tcx, t)); + bcx = lad._2; + lhs_fill = lad._0; + lad = ivec::get_len_and_data(bcx, rhs, + ty::sequence_element_type(cx.fcx.lcx.ccx.tcx, t)); + bcx = lad._2; + rhs_fill = lad._0; + } else { + lhs_fill = vec_fill(scx, lhs); + rhs_fill = vec_fill(scx, rhs); + bcx = scx; + } + + r = compare_numerical_values(bcx, lhs_fill, rhs_fill, + unsigned_int, llop); r.bcx.build.Store(r.val, flag); } else { // == and <= default to true if they find == all the way. < |
