diff options
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/boot/util/common.ml | 2 | ||||
| -rw-r--r-- | src/test/run-pass/size-and-align.rs | 18 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile index c10088ea..49c53331 100644 --- a/src/Makefile +++ b/src/Makefile @@ -507,6 +507,7 @@ TEST_XFAILS_LLVM := $(TASK_XFAILS) \ rec-tup.rs \ rec.rs \ simple-obj.rs \ + size-and-align.rs \ spawn-fn.rs \ spawn-module-qualified.rs \ spawn.rs \ diff --git a/src/boot/util/common.ml b/src/boot/util/common.ml index 58caf78d..7b0f7848 100644 --- a/src/boot/util/common.ml +++ b/src/boot/util/common.ml @@ -686,7 +686,7 @@ let rec max_sz (a:size) (b:size) : size = | (SIZE_rt_max (b, c), a) when a = c -> max_sz a b | (SIZE_fixed a, SIZE_fixed b) -> SIZE_fixed (i64_max a b) | (SIZE_fixed 0L, b) when no_negs b -> b - | (a, SIZE_fixed 0L) when no_negs a -> b + | (a, SIZE_fixed 0L) when no_negs a -> a | (a, SIZE_fixed b) -> max_sz (SIZE_fixed b) a | (a, b) when a = b -> a | (a, b) -> SIZE_rt_max (a, b) diff --git a/src/test/run-pass/size-and-align.rs b/src/test/run-pass/size-and-align.rs new file mode 100644 index 00000000..94fa3bc1 --- /dev/null +++ b/src/test/run-pass/size-and-align.rs @@ -0,0 +1,18 @@ +// -*- rust -*- + +use std; +import std._vec; + +type clam[T] = tag(a(T, int), b()); + +fn uhoh[T](vec[clam[T]] v) { + alt (v.(1)) { + case (a[T](t, u)) { log "incorrect"; log u; fail; } + case (b[T]()) { log "correct"; } + } +} + +fn main() { + let vec[clam[int]] v = vec(b[int](), b[int](), a[int](42, 17)); + uhoh[int](v); +} |